IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

boucle qui ne fonctionne pas dans autocompletion


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Points : 53
    Points
    53
    Par défaut boucle qui ne fonctionne pas dans autocompletion
    bonjour

    j'ai recuperer un code pour faire une autocompletion un peu a la facebook..

    seule souci, il ne prends pas en compte la boucle que je fais dans la base pour recuperer tout les noms, mais ce limite au premier..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $response = array();
     
    include '../../connex.php';
    $sql=mysql_query("SELECT usernamejoueurs FROM roomies WHERE username = 'kanel' " );
     
    while ($donnees = mysql_fetch_array($sql)){
    $username = $donnees['usernamejoueurs'];
     
     
    $names = array( " $username ", ); 
    }
    // make sure they're sorted alphabetically, for binary search tests
    sort($names);
     
    foreach ($names as $i => $name)
    {
    	$filename = str_replace(' ', '', strtolower($name));
    	$response[] = array($i, $name, null, $name);
    }
     
    header('Content-type: application/json');
    echo json_encode($response);
    $username est bien dans la boucle, donc je ne vois pas pourquoi il ne renvoi qu'un nom...

    merci de votre aide

  2. #2
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    C'est pas simplement parce que ta requête ne te retourne qu'un seul enregistrement? Tu as une clause "where username='kanel'" alors c'est probablement pour ça que tu n'as que le premier nom... à moins que tu aies plusieurs usernams avec cet identificateur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Points : 53
    Points
    53
    Par défaut
    non ma requete retourne bien plusieurs enregistrements, tester sur une page a part avec un echo, cela me donne bien ce que je veux, a savoir plusieurs résultats

  4. #4
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    En y regardant d'un peu plus près, je vois que tu as la ligne "$names = array("$username", ); à l'intérieur de la boucle. Je crois que le problème doit probablement venir de là, puisque tu écrases le contenu de $names à chaque tour de boucle au lieu de rajouter dans un tableau, comme je présume que tu veux faire. Également, la ligne laisse supposer que tu mets plusieurs valeurs dans chaque cases de ton tableau $names, mais ici, il n'y a que la première. En plus, si tu veux que tes noms soient triés, tu peux utiliser la clause order by dans ta requête, ça t'évitera un sort après ta boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    $response = array();
    $names = array();
    $indice = 0;
     
    include '../../connex.php';
    $sql=mysql_query("SELECT usernamejoueurs FROM roomies WHERE username = 'kanel' order by usernamejoueurs" );
     
    while ($donnees = mysql_fetch_array($sql)){
    $username = $donnees['usernamejoueurs'];
     
     
    $names[$indice] = array( " $username ", ); //attention ici, j'ai l'impression qu'il manque quelque chose
    $indice++;
    }
    // make sure they're sorted alphabetically, for binary search tests
    //sort($names); //inutile si tu utilises le order by dans la requete
     
    foreach ($names as $i => $name)
    {
    	$filename = str_replace(' ', '', strtolower($name));
    	$response[] = array($i, $name, null, $name);
    }
     
    header('Content-type: application/json');
    echo json_encode($response);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Points : 53
    Points
    53
    Par défaut
    effectivement je veux stocker $username dans un tableau, et oui on peut choisir plusieur noms a la suite dans la case..

    mais la ta modif ne marche pas, je n'ai meme plus un seul nom..

  6. #6
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Je veux m'assurer de bien comprendre. La variable $names est un tableau et tu vas stocker tes username dans les cases de ton tableau. Moi j'ai compris que cela donnerait une structure semblable à celle-ci:

    $names[0] = "Username1"
    $names[1] = "Username2"
    $names[2] = "Username3"

    Si j'ai bien compris ce que tu veux, j'ai effectivement une petite modification à apporter à mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    $response = array();
    $names = array();
    $indice = 0;
     
    include '../../connex.php';
    $sql=mysql_query("SELECT usernamejoueurs FROM roomies WHERE username = 'kanel' order by usernamejoueurs" );
     
    while ($donnees = mysql_fetch_array($sql)){
    $username = $donnees['usernamejoueurs'];
     
     
    $names[$indice] = $username; //modification apportée ici
    $indice++;
    }
     
    //Ici, on fait afficher le contenu du tableau $names pour s'assurer
    //que les username sont chargés correctement.
     
    print_r($names);
     
    //Avant de s'attaquer à cette boucle, on va s'assurer que le début fonctionne
    //correctement. Une fois que les noms sont chargés correctement, on va
    //pouvoir s'occuper de les traiter.
     
    /*
    foreach ($names as $i => $name)
    {
    	$filename = str_replace(' ', '', strtolower($name));
    	$response[] = array($i, $name, null, $name);
    }
     */
    header('Content-type: application/json');
    echo json_encode($response);
    Tu remarqueras que j'ai ajouter un print_r qui devrait t'afficher le contenu du tableau $names et on devrait voir une bonne fois pour toute si les noms sont chargés dans le tableau ou non. Aussi, j'aimerais savoir quelle genre de structure tu essayes d'obtenir avec le tableau $response. Actuellement, elle ressemble à ceci:

    $response[0] = {0, "username1", null, "username1"}
    $response[1] = {1, "username2", null, "username2"}

    et ainsi de suite. Est-ce que c'est vraiment ce que tu désires obtenir? Aussi, j'ai mis ta seconde boucle en commentaire alors ne te surprend pas si elle ne s'exécute pas .

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Points : 53
    Points
    53
    Par défaut
    donc la c'est bon, pour les noms tout s'affiche bien a la suite...

  8. #8
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Bon, maintenant qu'on sait que les noms sont bien chargés en mémoire, il ne reste plus qu'à parcourir le tableau $names et à construire $response en conséquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    $response = array();
    $names = array();
    $indice = 0;
     
    include '../../connex.php';
    $sql=mysql_query("SELECT usernamejoueurs FROM roomies WHERE username = 'kanel' order by usernamejoueurs" );
     
    while ($donnees = mysql_fetch_array($sql)){
    $username = $donnees['usernamejoueurs'];
     
     
    $names[$indice] = $username; //modification apportée ici
    $indice++;
    }
     
    //Ici, on fait afficher le contenu du tableau $names pour s'assurer
    //que les username sont chargés correctement.
     
    print_r($names);
     
    //Avant de s'attaquer à cette boucle, on va s'assurer que le début fonctionne
    //correctement. Une fois que les noms sont chargés correctement, on va
    //pouvoir s'occuper de les traiter.
     
    $indice = 0;
    foreach ($names as $name)
    {
    	$filename = str_replace(' ', '', strtolower($name));
    	$response[$indice] = array($indice, $name, null, $name);
            $indice++;
    }
     
    header('Content-type: application/json');
    echo json_encode($response);
    ?>
    Normalement, si je ne me suis pas trompé, ceci devrait fonctionner correctement. Après, pour accéder à tes éléments, tu peux le faire de la façon suivante:

    $response[0][0] //la position de $indice
    $response[0][1] //la position de $name
    $response[0][2] //la position de null
    $response[0][3] //la position du deuxième $name

    La structure va évidemment se répéter si tu utilises $response[1]. Aussi, dernier détail... à quoi sert ta variable $filename? Tu ne l'utilises nulle part.

    Donc, avec ça, je crois que cette fois on y est. Bonne chance

Discussions similaires

  1. Range.Offset(1) dans une boucle qui ne fonctionne pas
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2008, 11h58
  2. function javascript qui ne fonctionne pas dans la balise <body>
    Par typikal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2008, 16h45
  3. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  4. [FTP] fopen qui ne fonctionne pas dans tous les contextes ..
    Par Christophe Charron dans le forum Langage
    Réponses: 6
    Dernier message: 15/06/2006, 10h25
  5. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo