Partage
  • Partager sur Facebook
  • Partager sur Twitter

While qui ne s''execute pas

    16 octobre 2018 à 21:23:17

    Bonjour j'ai un petit soucis pour alimenter ma barre de navigation je dois recupérer les categories dans ma base de données à partir de ses catégories, je recupère les continents ainsi que les pays qui vont être affiché dans un dropdown

    Le problème c'est que j'arrive à récupérer une seule categorie avec ses continents et ses pays mais il ne me recupèré pas les autres 

    • <?php  while($a = $Categorie->fetch()) { ?>
                <li class="nav-item dropdown hover" id="menu2">
                      <a class="nav-link" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true">
                         <h6 class="nav_text"><?= $a['nom'] ?></h6> 
                         <span class="sr-only">(current)</span>
                      </a>
              
                    <ul class="dropdown-menu multi-column columns-3">
                      <div class="row">
                        
                        <?php while($c = $continent->fetch()) { ?> 
                         <div class="col-sm-3">
                             <ul class="multi-column-dropdown">
                                 <li><a href="#"><?=$c['nom']; ?></a></li>
                                     <?php $pays->execute(array($a['id'],$c['id'])); 
                                      while($b = $pays->fetch()) { ?>
                                         <li style="text-transform:lowercase;">
                                             <a href="#"><?=$b['nom'] ?> </a>
                                          </li>
                                       <?php }?>   
                               </ul>
                           </div> 
                           <?php }?> 
                     </div>
                   </ul>
                </li>
            <?php } ?>
      Merci d'avance pour votre aide

    -
    Edité par JeromeMoi 16 octobre 2018 à 21:28:08

    • Partager sur Facebook
    • Partager sur Twitter
      16 octobre 2018 à 22:18:36

      Bonjour,

      Des WHILE imbriqués comme ça, déjà ça ne sent pas bon, mais on n'a même pas les requêtes. Il faudrait sans doute plutôt faire une jointure.

      • Partager sur Facebook
      • Partager sur Twitter
        16 octobre 2018 à 23:05:50

        +1 pour les jointures.

        Ton code ne peut pas fonctionner car les requêtes ne sont pas dans les itérations : tes while de sous-niveau ne parcourent qu'une fois la résultat de la requête correspondante. Les fois suivantes, il n'y a donc plus rien à lire.

        Pour être clair : un résultat de requête ne peut être parcouru qu'une seule fois (avec PDO/par défaut ; sans passer par fetchAll où il est mis en mémoire)

        EDIT : j'ai loupé l'execute des pays mais il en aurait manqué un pour les continents pour qu'en l'état le code fonctionne (mais pas "correct" ou plutôt idéal).

        -
        Edité par julp 16 octobre 2018 à 23:13:14

        • Partager sur Facebook
        • Partager sur Twitter
          16 octobre 2018 à 23:49:09

          Quelle est la solution pour que je puisse avancer ? 

          Je vous ajoute mon code php pour l'appelation des requettes, merci beaucoup pour le temps que vous prenez à me repondre 

          $Categorie = $bdd->prepare('SELECT * FROM categorie');
          	$Categorie->execute(array());
          	
          	$pays = $bdd->prepare('SELECT * FROM sous_categorie Where id_categorie=? AND id_continent=?');
          
          	$continent = $bdd->prepare('SELECT * FROM continent WHERE continent.nom !="AUCUN"');
          	$continent->execute(array());
          • Partager sur Facebook
          • Partager sur Twitter
            17 octobre 2018 à 6:39:02

            Pas besoin de preparer la premiere et la derniere tu n'as 0 parametre, go sur un query aulieu de prepare/execute
            • Partager sur Facebook
            • Partager sur Twitter

            Jeune et ambitieux Htmlspecialschars  - Var_dump

              17 octobre 2018 à 9:36:52

              Sans la structure des tables c'est un peu difficile, mais ça devrait être quelque chose comme ça :

              $Categorie = $bdd->prepare('SELECT * FROM categorie C LEFT JOIN sous_categorie S ON C.id=S.id_categorie');
              

              On verra pour les continents après, si ça te donne le résultat attendu.

              • Partager sur Facebook
              • Partager sur Twitter

              While qui ne s''execute pas

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown