While dans un while (requêtes PHP)

Eléphanteau du PHP | 10 Messages

15 oct. 2021, 09:25

Bonjour à tous.

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

Code : Tout sélectionner

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 oct. 2021, 11:08

2 possibilités :
- soit ta requête renvoie 0 résultat, et alors la condition dans le while est false donc c'est normal de ne pas rentrer dedans
- soit tu as une erreur dans ta requête et ça plante silencieusement. Il faut que tu actives la gestion d'erreurs de PDO en WARNING
https://www.php.net/manual/fr/pdo.error-handling.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

15 oct. 2021, 16:39

Oui, la requête n'était pas bonne.
J'ai d'ailleurs revu mon code à l'aide de requêtes préparées qui m'ont permises de supprimer le 2ème while :

Code : Tout sélectionner

<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>
Désormais, je peux récupérer tous mes ID, et je souhaiterais récupérer ma liste d'ID dans un tableau en dehors de la boucle foreach, mais je peine à y arriver à cet endroit là :

Code : Tout sélectionner

foreach ($stmt1 as $row) { $nb = $row[0]; echo $nb."<br>"; }
Quelqu'un sait-il comment je puisse y arriver ?

Merci d'avance.

P.S. : les tabulations ne fonctionnent plus ?!