Partage
  • Partager sur Facebook
  • Partager sur Twitter

While dans un while (requêtes PHP)

    14 octobre 2021 à 16:37:37

    Bonjour à tous.

    Je rencontre un problème avec mon code PHP que voici :

    <table id="commandes">
            <tr>
                <td id="id">ID</td>
                <td id="nom">Nom de l'article</td>
                <td id="stock">Stock</td>
            </tr>
            <?php
            $sql =  'SELECT DISTINCT order_id, order_item_name FROM `fyz7g_woocommerce_order_items`';   
            $req = $conn->query($sql);
            while ($row = $req->fetch()) {
                if ($row['order_id']) {
                    $order_id = $row['order_id'];
                    echo "<tr><td>".$row['order_id']."</td>";
                }
                if ($row['order_item_name']) {
                    if ($row['order_item_name'] != "Retrait en boutique" && $row['order_item_name'] != "Panier de légumes" && $row['order_item_name'] != "Retrait à la Ferme") {
                        echo "<td>".$row['order_item_name']."</td>";
    
                        $sql2 = "SELECT stock_status, stock_quantity FROM `fyz7g_wc_product_meta_lookup` WHERE product_id = $order_id";
                        $req2 = $conn->query($sql2);
    
                        //echo "<td>test2</td></tr>";
                        
                        while ($row2 = $req2->fetch()) {
                            echo "<td>test</td></tr>";
                        }
                    }
                }
            }
            ?>
    </table>

    En fait j'entre bien dans le 1er while, mais pas dans le 2ème (j'ai page blanche).

    Pouvez-vous m'aider svp ? Ma requête est bonne mais un simple echo plus rien ne s'affiche.

    Merci d'avance les amis.

    -
    Edité par fliewight 14 octobre 2021 à 16:37:57

    • Partager sur Facebook
    • Partager sur Twitter
      14 octobre 2021 à 16:44:29

      Salut,

      sur la ligne 14, enlève ton } qui finit ton if.

      Il faut que cette accolade, tu la places après la ligne 28.

      Ainsi, ton 2e if est contenu dans ton premier if.

      Redis-moi si ca fonctionne.

      Phil

      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2021 à 16:47:56

        Salut

        Il y aurait moyen d'éviter de lancer une requête dans la boucle en utilisant une jointure. Ça peut compliquer un peu l'affichage, mais c'est un cas d'école. Tes commandes sont ses films et tes produits ses acteurs.

        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2021 à 16:49:18

          Merci pour ta réponse.

          Non malheureusement ça ne fonctionne toujours pas.

          Même si je fais une jointure j'ai besoin de $order_id qui se trouve dans le premier while.

          Ce qu'il me faudrait, c'est de récupérer la valeur de $row2['stock_status'] sans effectuer de boucle.

          -
          Edité par fliewight 14 octobre 2021 à 16:58:54

          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2021 à 17:20:54

            Je reste assez certain que c'est possible de faire en une seule requête comme dans l'autre sujet. Parce que l'ID de la commande est présente dans les deux tables, vu que tu prends de l'une pour mettre dans la requête vers l'autre. Et du coup, tu pourrais ainsi avoir toutes tes données en une seule requête.

            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2021 à 9:15:56

              Voici ce que j'ai fait, mais je n'ai pas le $order_id comme je l'avais pressenti :

              <table id="commandes">
              <tr>
                  <td id="id">ID</td>
                  <td id="nom">Nom de l'article</td>
                  <td id="stock">Stock</td>
              </tr>
              <?php
              $sql =  "SELECT order_id, order_item_name, stock_status, stock_quantity FROM `fyz7g_wc_product_meta_lookup` INNER JOIN fyz7g_woocommerce_order_items ON fyz7g_wc_product_meta_lookup.product_id = fyz7g_woocommerce_order_items.order_id WHERE product_id = $order_id";   
              $req = $conn->query($sql);
              while ($row = $req->fetch())
              {
                  if ($row['order_id']) {
                      $order_id = $row['order_id'];
                      echo "<tr><td>".$row['order_id']."</td>";
                  }
                  if ($row['order_item_name'])
                  {
                      if ($row['order_item_name'] != "Retrait en boutique" && $row['order_item_name'] != "Panier de légumes" && $row['order_item_name'] != "Retrait à la Ferme")
                      {
                          echo "<td>".$row['order_item_name']."</td>";
                          
                      }
                  }
                  if ($row['stock_status']) {
                      $statut = '';
                      switch ($row['stock_status']) {
                          case 'outofstock' : $statut = 'Rupture de stock'; break;
                          case 'onbackorder' : $statut = 'En réapprovisionnement'; break;
                          case 'instock' : $statut = 'En stock'; break;
                      }
                  }
                  if ($row['stock_quantity']) {
                      if ($statut == 'En stock') echo "<td>".$statut += $row['stock_quantity']."</td>";
                  }
              }
              ?>
              </table>

              je vais voir avec une requête préparée, je vous tiens au courant

              -
              Edité par fliewight 15 octobre 2021 à 10:02:57

              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2021 à 18:01:03

                Je ne vois pas pourquoi tu voudrais une requête qui prend en compte dès le départ un ID de commande sachant que dans ton code initial tu les récupérais toutes… A moins que ç'ait été ta volonté dès le départ, auquel cas seule la boucle intérieure était utile dans le tout premier code.

                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2021 à 9:06:38

                  Ma requête première n'était pas bonne.

                  Voici où j'en suis :

                  <table id="commandes">
                  <tr>
                      <td id="id">ID</td>
                      <td id="nom">Nom de l'article</td>
                      <td id="stock">Stock</td>
                  </tr>
                  <?php
                  $stmt1 = $conn->prepare("SELECT product_id FROM fyz7g_wc_product_meta_lookup"); 
                  $stmt2 = $conn->prepare("SELECT post_title, stock_status, stock_quantity FROM fyz7g_posts INNER JOIN fyz7g_wc_product_meta_lookup ON fyz7g_posts.ID = fyz7g_wc_product_meta_lookup.product_id WHERE ID = ?");
                  
                  $stmt1->execute();
                  
                  foreach ($stmt1 as $row) {
                      $nb = $row[0];
                      echo $nb."<br>";
                  }
                  
                  while ($row = $req->fetch())
                  {
                      if ($row['order_id']) {
                          $order_id = $row['order_id'];
                          echo "<tr><td>".$row['order_id']."</td>";
                      }
                      if ($row['order_item_name'])
                      {
                          if ($row['order_item_name'] != "Retrait en boutique" && $row['order_item_name'] != "Panier de légumes" && $row['order_item_name'] != "Retrait à la Ferme")
                          {
                              echo "<td>".$row['order_item_name']."</td>";
                              
                          }
                      }
                      if ($row['stock_status']) {
                          $statut = '';
                          switch ($row['stock_status']) {
                              case 'outofstock' : $statut = 'Rupture de stock'; break;
                              case 'onbackorder' : $statut = 'En réapprovisionnement'; break;
                              case 'instock' : $statut = 'En stock'; break;
                          }
                      }
                      if ($row['stock_quantity']) {
                          if ($statut == 'En stock') echo "<td>".$statut += $row['stock_quantity']."</td>";
                      }
                  }
                  ?>
                  </table>



                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 octobre 2021 à 13:05:37

                    Je ne comprends toujours pas l'utilité de la première requête, d'autant que là tu n'exécutes même pas la seconde.

                    L'ID que tu devrais passer pour exécuter la seconde requête proviendrait d'où ?

                    • S'il provenait de chaque résultat de la première requête, tu n'as absolument pas besoin de WHERE … dans la seconde requête ;
                    • S'il provenait de la requête ("en GET" ou "en POST"), tu n'as alors absolument pas besoin de la première .

                    -
                    Edité par Ymox 26 octobre 2021 à 17:03:48

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 octobre 2021 à 10:43:15

                      Bonjour,

                      Je rejoins l'avis de Ymox, lorsqu'on se retrouve à faire une intrication de boucle pour des requêtes Sql il est possible (en se grattant en peu la tête parfois) de s'en passé.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      While dans un while (requêtes PHP)

                      × 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