xpatval Posté 5 Janvier 2007 Posté 5 Janvier 2007 'Soir, Essayant de comprendre les subtilités de l'autcomplétion, je tente de faire fonctionner un script trouvé dans un tuto. Bien évidemment, ça ne fonctionne pas. j'effectue une requête sql, et construit un tableau avec les données de la requête. Puis ces données doivent être traitées par JS. $debut = strtolower($debut);$mysql->query("SELECT libelle FROM marque");if ($mysql->num_rows() > 0) { while ($mysql->movenext()) { $liste[] = $mysql->getfield("libelle"); }}function generateOptions($debut,$liste) { $MAX_RETURN = 10; $i = 0; foreach ($liste as $element) { if ($i<$MAX_RETURN && substr($element, 0, strlen($debut))==$debut) { echo(utf8_encode("<option>".$element."</option>")); $i++; } }} Malheureusement, aucune donnée n'est retournée lors de la saisie. Ces données existent, et la requête fonctionne. Mais nada. Si je remplace ma requête par un simple $liste = array("alain","anatole","andromaque"); , donné dans l'exemple, je n'ai pas ce problème. Pige pas. Pourriez-vous m'aider ? Merci, xpatval
ZeBrian Posté 5 Janvier 2007 Posté 5 Janvier 2007 C'est la première fois que je vois cette syntaxe pour une requête SQL... Utilises-tu une classe ? J'ai trouvé une syntaxe exactement similaire ici (voir le post de lazy_yogi), j'en déduis que ta classe vient de là Je ne suis pas sûr de comprendre l'origine du problème, mais en tout cas il manque le début du script : as-tu bien initialisé la variable $liste avec une commande du type $liste=array(); ?
xpatval Posté 6 Janvier 2007 Auteur Posté 6 Janvier 2007 Le code du php: <?phpheader('Content-Type: text/xml;charset=utf-8');echo(utf8_encode("<?xml version='1.0' encoding='UTF-8' ?><options>"));if (isset($_GET['debut'])) { $debut = utf8_decode($_GET['debut']);} else { $debut = "";}$debut = strtolower($debut);include "class.mysql.php";include "db_con.php";$mysql->query("SELECT libelle FROM marque");if ($mysql->num_rows() > 0) { while ($mysql->movenext()) { $liste[] = $mysql->getfield("libelle"); }}function generateOptions($debut,$liste) { $MAX_RETURN = 10; $i = 0; foreach ($liste as $element) { if ($i<$MAX_RETURN && substr($element, 0, strlen($debut))==$debut) { echo(utf8_encode("<option>".$element."</option>")); $i++; } }}generateOptions($debut,$liste);echo("</options>");?> Mon problème est de comprendre pourquoi je ne récupère aucune donnée du tableau issu de ma requête, alors qu'avec un tableau préformaté, il y a pas de souci. Tout en sachant que cette requête me ramène bien des données puisque testée dans des conditions expurgées de JS. Lorsque je regarde le résultat, via firebug, je n'ai aucune erreur de script. A la console, pas de problème non plus( réponse: <?xml version='1.0' encoding='UTF-8' ?><options></options>. Je n'avais pas initialisé la variable $liste, mais même en l'ajoutant, rien ne change... xpatval
dams41 Posté 28 Janvier 2007 Posté 28 Janvier 2007 remplace ce bloc : $mysql->query("SELECT libelle FROM marque");if ($mysql->num_rows() > 0){while ($mysql->movenext()){$liste[] = $mysql->getfield("libelle");}} par $mysql->query("SELECT libelle FROM marque");while ($mysql->movenext()){$liste[] = $mysql->getfield("libelle");} qu'est-ce que ça dit ?
Bh@Mp0 Posté 28 Janvier 2007 Posté 28 Janvier 2007 Avant d'appeler ta fonction generateOptions(), fait un : print_r($liste); A mon avis, ton tableau est mal construit, et le problème vient de ta boucle ...
xpatval Posté 30 Janvier 2007 Auteur Posté 30 Janvier 2007 A m'y remettre dessus ce soir, je viens de trouver la raison du problème. Un caractère "&" fait partie des données recupérées par la requête, et xml n'a pas l'air d'aimer... Merci de vos réponses. xpatval
xpatval Posté 31 Janvier 2007 Auteur Posté 31 Janvier 2007 Rebonjour, Chose inconnue (de moi), il semblerait que dans mon traitement (ci-dessus), le 1er caractère des valeurs retournées par ma requête pour l'autocomplétion doit absolument être en minuscule. Ce qui explique pourquoi mes premiers tests ne fonctionnaient pas (je viens de passer un strtolower sur les valeurs, qui s'autocomplètent normalement maintenant). Est-ce xml qui oblige à cela ? xpatval
Anonymus Posté 12 Février 2007 Posté 12 Février 2007 Bonjour, Tu testes une variable que tu passes préalablement en minuscule. C'est ce qui t'oblige ensuite à envoyer des variables en minuscule. <?phpheader('Content-Type: text/xml;charset=utf-8'); echo(utf8_encode("<?xml version='1.0' encoding='UTF-8' ?><options>")); if (isset($_GET['debut'])) { $debut = utf8_decode($_GET['debut']); } else { $debut = ""; } $debut = strtolower($debut); include "class.mysql.php"; Enlève toute référence aux minuscules (dont le strtolower ici), et tu pourras chercher des majuscules Nico.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant