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 :

Listes liées : 2ème liste vide pour une seule valeur sélectionnée dans la première liste [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Par défaut Listes liées : 2ème liste vide pour une seule valeur sélectionnée dans la première liste
    Bonjour à tous,

    Voici une énième question au sujet de listes liées, mais à laquelle je n'ai pas trouvé de réponse.

    J'ai construit deux listes liées (PHP, MYSQL, AJAX) à partir de 2 tables :
    Liste1 à partir de la TABLE1 contenant 2 champs : id1 (clé primaire) et lbl1
    Liste2 à partir de la TABLE2 avec 3 champs : id2 (clé primaire) ref_id1 (clé de TABLE1) et lbl2
    Liste2 est fonction de la valeur id1 sélectionnée dans Liste1

    Tout fonctionne au poil, sauf si je sélectionne dans liste1 l'id1 du premier enregistrement de TABLE1 (soit id1=0). Dans ce cas uniquement, la liste2 est vide (alors qu'elle devrait me sortir 8 lignes).
    Pour tout autre choix, la liste2 s'affiche correctement.
    Comprend pas...

    Si quelqu'un pouvait m'aider à comprendre, et à fixer le problème

    pour info, les extraits de code concernés :

    listes.php
    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
     
    <!DOCTYPE html>
    <html>
    ...
    <body>
    ...
    <?php
        $query = "SELECT * FROM TABLE1 ORDER BY lbl1 ASC";
        $res = mysqli_query ($db, $query);
        $rowCount = mysqli_num_rows ($res);    
    ?>
     
    <select id="liste1">
        <option value="">selectionner le lbl1</option>
        <?php
        if($rowCount > 0)
            {
            while($row = mysqli_fetch_assoc ($res))
                { 
                echo '<option value="'.$row['id1'].'">'.$row['lbl1'].'</option>';
                }
            }
        else
            {
            echo '<option value="">pas de lbl1 disponible</option>';
            }
        ?>
    </select>
     
    <select id="liste2">
        <option value="">selectionner un lbl1 ci-dessus</option>
    </select>
    ...
    </body>
    </html>
    ajaxlistes.php
    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
    ...
    if(!empty($_POST["id1"]))
        {
        $query = "SELECT * FROM TABLE2 WHERE ref_id1 = ".$_POST['id1']." ORDER BY lbl2 ASC";
        $res = mysqli_query ($db, $query);
        $rowCount2 = mysqli_num_rows ($res);
        if($rowCount2 > 0)
            {
            echo '<option value="">Selectionner le lbl2 </option>';
            while($row = mysqli_fetch_assoc ($res))
                { 
                echo '<option value="'.$row['id2'].'">'.$row['lbl2'].'</option>';
                }
            }
        else
            {
            echo '<option value="">Pas de lbl2 disponible</option>';
            }
        }
    ...
    ?>
    Je peux aussi fournir le javascript si ça peut être utile.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Tes 2 scripts PHP ont l'air cohérents, donc je suppose que le problème vient de l'appel ajax au 2e script lors de la modification de la valeur de la 1ere liste.
    Peut-on voir le JS ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Par défaut
    Merci Celira pour ta réponse rapide.
    liste1vers2.js :
    Code javascript : 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
    $(document).ready(function()
        {
        $('#liste1').on('change',function lbl1handle()
            {
            var lbl1ID = $(this).val();
            if(lbl1ID)
                {
                $.ajax(
                    {
                    type:'POST',
                    url:'ajaxlistes.php',
                    data:'id1='+lbl1ID,
                    success:function(html)
                        {
                        $('#liste2').html(html);
                        ...
                        }
                    }); 
                }
            else
                {
                $('#liste2').html('<option value="">Selectionner le lbl1 ci-dessus</option>');
                ...
                }
            });
        });

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Salut,
    Citation Envoyé par ClayStone
    sauf si je sélectionne dans liste1 l'id1 du premier enregistrement de TABLE1 (soit id1=0). Dans ce cas uniquement, la liste2 est vide
    Est ce qu'il y a des lignes avec ref_id1=0 dans la table2 ?

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Dans ton javascript, tu as ceci :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var lbl1ID = $(this).val();
    if(lbl1ID)
    Javascript fait une conversion automatique de la valeur en booléen pour le test. Or 0 est considéré comme équivalent au booléen false. Essaye avec :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var lbl1ID = $(this).val();
    if(lbl1ID != "")
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Homme Profil pro
    autodidacte / éternel débutant
    Inscrit en
    Avril 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : autodidacte / éternel débutant

    Informations forums :
    Inscription : Avril 2018
    Messages : 64
    Par défaut
    @ Toufik83 Merci pour la piste, mais...
    Est ce qu'il y a des lignes avec ref_id1=0 dans la table2 ?
    Oui, il y en a 8, et la requête dans phpmyadmin me renvoie bien les 8 lignes correctement. Et s'il n'y en avait pas, est-ce que la liste2 n'afficherait pas : "Pas de lbl2 disponible" au lieu d'être vide ?

    @Celira
    1-
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var lbl1ID = $(this).val();
    if(lbl1ID != "")
    Pas de changement, id° avec des simples guillemets, id° avec un espace : une liste vide (mais une liste quand-même)

    Mais
    2- donne en liste2 : "Selectionner le lbl1 ci-dessus"

    Je dis peut-être une bêtise mais, avec 1- le test semble réussi puisqu'il me donne une liste (vide), et échoué avec 2- (pas de liste du tout)?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deux Activity pour une seule valeur
    Par Davesique dans le forum Android
    Réponses: 1
    Dernier message: 22/06/2013, 23h51
  2. Réponses: 3
    Dernier message: 16/11/2008, 23h08
  3. Réponses: 2
    Dernier message: 11/11/2008, 00h44
  4. Réponses: 0
    Dernier message: 08/11/2008, 17h19
  5. Réponses: 13
    Dernier message: 30/06/2008, 15h25

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