Version complète: sur le forum Webmaster Hub : Passage php/js ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > AjaX et JavaScript
xpatval
'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.
CODE
$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
CODE
$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
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à tongue.gif

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
Le code du php:
CODE
<?php
header('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:
CITATION
<?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...

wacko.gif

xpatval
dams41
remplace ce bloc :
CODE
$mysql->query("SELECT libelle FROM marque");
if ($mysql->num_rows() > 0)
{
while ($mysql->movenext())
{
$liste[] = $mysql->getfield("libelle");
}
}


par
CODE
$mysql->query("SELECT libelle FROM marque");

while ($mysql->movenext())
{
$liste[] = $mysql->getfield("libelle");
}


qu'est-ce que ça dit ?
Bh@Mp0
Avant d'appeler ta fonction generateOptions(), fait un :
CODE
print_r($liste);


A mon avis, ton tableau est mal construit, et le problème vient de ta boucle ...
xpatval
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
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
Bonjour,

Tu testes une variable que tu passes préalablement en minuscule. C'est ce qui t'oblige ensuite à envoyer des variables en minuscule.
CITATION
<?php
header('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 wink.gif

Nico.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.