Aller au contenu

Sujets conseillés

Posté

'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

Posté

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à :P

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(); ?

Posté

Le code du php:

<?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:

<?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:

xpatval

  • 4 semaines plus tard...
Posté

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 ?

Posté

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 ...

Posté

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

Posté

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

  • 2 semaines plus tard...
Posté

Bonjour,

Tu testes une variable que tu passes préalablement en minuscule. C'est ce qui t'oblige ensuite à envoyer des variables en minuscule.

<?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 ;)

Nico.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...