[AJAX] Réponse XML pour autocomplétion
Bonjour à tous,
Source : AJAX - une autocomplétion pas à pas (Denis Cabasson)
J'essaie en vain depuis hier de modifier ce tutoriel afin d'obtenir les données d'une base MySql et je bloque toujours sur la réponse XML.
Le fichier options.php stocke une liste de mots dans un tableau qui est ensuite transformé en fichier XML. C'est ce fichier XML qui sert à afficher l'autocomplétion dans le champs de saisit.
J'ai modifié ce fichier de manière à ce que la liste des mots provienne d'une base MySql. L'extraction des données ne pose pas de problème. Je crée un tableau avec les mots tirés de la bd et le fichier XML est bien généré... mais l'autocomplétion ne fonctionne pas.
J'ai l'impression que je ne génère pas le fichier XML correctement. Quelqu'un saurait il me dire d'où vient mon erreur ?
La liste de mots en dur dans le fichier ressemble à ça au départ dans le tutoriel :
Code:
$liste = array("abeille","abricot","acheter","acheteur","adjectif","adroit");
Ce qui donne un fichier XML comme ceci :
Code:
1 2 3 4 5 6 7 8 9
| <?xml version='1.0' encoding='UTF-8' ?>
<options>
<option>abeille</option>
<option>abricot</option>
<option>acheter</option>
<option>acheteur</option>
<option>adjectif</option>
<option>adroit</option>
</options> |
Pour ma part, j'ai remplacé la liste "en dur" par le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11
| $valeurs = "";
$n = 0;
//Sélection des valeurs de la base de données
$requete_aliments = "SELECT * FROM fromages ORDER BY fromage_libelle ASC";
$resultat_aliments = requete_SQL($requete_aliments);
while ($donnees_aliments = mysql_fetch_array($resultat_aliments)) {
$liste[$n] = $donnees_aliments["fromage_libelle"];
$n++;
} |
Ce qui me donne le résultat XML suivant (et qui me parait propre)
Code:
1 2 3 4 5 6 7
| <?xml version='1.0' encoding='UTF-8' ?>
<options>
<option>Cantadou</option>
<option>Chavroux</option>
<option>Saint Moret</option>
<option>Vache qui rit</option>
</options> |
Est-ce que je fais une erreur sur la génération du XML ?
Avec mon code l'autocomplétion ne fonctionne tout simplement pas, aucun choix n'est affiché dans la liste lorsque je saisit des lettres dans le champ.
Merci par avance à ceux qui pourront m'aider à trouver une solution.
Je n'ai pas modifié la partie qui génère le XML
Voici la totalité du code de option.php.
Je tiens à préciser que je n'ai pas modifié la partie du code qui génère le XML (et qui provient directement des sources téléchargées du tutoriel). Je n'ai fait qu'ajouter une requête pour aller chercher les données dans une table, afin de stocker ses données dans le tableau qui est justement utilisé par le fonction qui génère le XML.
J'espère que je suis clair et que ça répond à ta question
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?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("fichiers-communs/inc-fonctions.php");
//Connexion à la base
connexion_BD("mabase");
$valeurs = "";
$n = 0;
//Sélection des valeurs de la base de données
$requete_aliments = "SELECT * FROM fromages ORDER BY fromage_libelle ASC";
$resultat_aliments = requete_SQL($requete_aliments);
while ($donnees_aliments = mysql_fetch_array($resultat_aliments)) {
//$valeurs = $valeurs.$donnees_aliments["fromage_libelle"];
$liste[$n] = $donnees_aliments["fromage_libelle"];
$n++;
}
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>");
//Fermeture de la connexion
deconnexion_DB();
?> |