[RESOLU] Problème d'affichage des données dans un tableau HTML

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 18:40

Bonjour,

Je n'ai pas d'erreur quand je lance la page de mon projet (panier.php), mais les données n'apparaissent pas dans les lignes du tableau HTML. Pourtant quand je rentre la requête dans mon logiciel de base données, il n'y a pas d'erreur.
Le problème doit venir de ma bouclee mais je ne sais pas exactement ce qui ne va pas.

J'espère que vous pourrez m'aider.

Merci d'avance

Voici le code de la page (panier.php) :
<?php
    include("header.php");
    require("config/commandes.php");
    require("config/connexion.php");

    if(!isset($_SESSION)){
        session_start();
    }
    if(!isset($_SESSION["panier"])){
        $_SESSION['panier'] = array();
    }
    var_dump($_SESSION);
    // unset($_SESSION["panier"]);
?>
<div class="container mb-4">
    <div class="row">
        <div class="col-12">
            <div class="table-responsive">
                <table class="table table-striped">
                    <thead>
                        <tr>
                            <th scope="col"></th>
                            <th scope="col">Produit</th>
                            <th scope="col" class="text-center">Quantité</th>
                            <th scope="col" class="text-right">Prix</th>
                            <th> </th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                            $ids = array_keys($_SESSION["panier"]);
                            $products = $access->prepare('SELECT id, image, nom, prix FROM produits WHERE id IN('.implode(',',$ids).')');
                            $products->execute();
                            $products->fetchAll(PDO::FETCH_OBJ);
                            echo "<br>";
                            print_r($products);
                            echo "<br>";
                            print_r($ids);
                            foreach($products as $product): 
                        ?>
                        <tr>
                            <td><img src="<?= $product->image ?>" style="width: 15%"></td>
                            <td><?= $product->nom ?></td>
                            <td><input class="form-control" type="text" value="1" />1</td>
                            <td class="text-right"><?= $product->prix ?>€</td>
                            <td class="text-right"><button class="btn btn-sm btn-danger">Supprimer</button> </td>
                        </tr>
                        <?php endforeach; ?>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><strong>Total</strong></td>
                            <td class="text-right"><strong>346,90 €</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <div class="col mb-2">
            <div class="row">
                <div class="col-sm-12  col-md-6">
                    <a href="index.php"><button class="btn btn-block btn-light">Liste des produits</button></a>
                </div>
                <div class="col-sm-12 col-md-6 text-right">
                    <button class="btn btn-block btn-light">Valider</button>
                </div>
            </div>
        </div>
    </div>
</div>
<?php
    require("footer.php");
?>

Mammouth du PHP | 2703 Messages

10 janv. 2023, 19:12

quel est le code html généré par ce php ? (ctrl + u pour voir la source)

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 22:53

Le contenu de ma boucle foreach n'est pas généré.
Je n'ai pas mis le header ni le footer vu que ce n'est pas utile pour le contexte.

Voici le contenu généré :
<div class="container mb-4">
    <div class="row">
        <div class="col-12">
            <div class="table-responsive">
                <table class="table table-striped">
                    <thead>
                        <tr>
                            <th scope="col"></th>
                            <th scope="col">Produit</th>
                            <th scope="col" class="text-center">Quantité</th>
                            <th scope="col" class="text-right">Prix</th>
                            <th> </th>
                        </tr>
                    </thead>
                    <tbody>
                                                <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><strong>Total</strong></td>
                            <td class="text-right"><strong>346,90 €</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <div class="col mb-2">
            <div class="row">
                <div class="col-sm-12  col-md-6">
                    <a href="index.php"><button class="btn btn-block btn-light">Liste des produits</button></a>
                </div>
                <div class="col-sm-12 col-md-6 text-right">
                    <button class="btn btn-block btn-light">Valider</button>
                </div>
            </div>
        </div>
    </div>
</div>

Mammouth du PHP | 2703 Messages

10 janv. 2023, 22:58

et
echo "<br>";
print_r($products);
echo "<br>";
print_r($ids);
?

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 23:16

Je l'avais mis en commentaire dsl. Et oui je l'ai décommenter et j'obtiens un résultat.

Voici le résultat :
<tbody>
                        <br>
PDOStatement Object
(
    [queryString] => SELECT id, image, nom, prix FROM produits WHERE id IN(8,7)
)
<br>
Array
(
    [0] => 8
    [1] => 7
)
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><strong>Total</strong></td>
                            <td class="text-right"><strong>346,90 €</strong></td>
                        </tr>
                    </tbody>

Mammouth du PHP | 2703 Messages

10 janv. 2023, 23:20

que fait la fonction fetchAll ?

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 23:27

La fonction retourne un tableau de résultat contenant toutes les lignes d'enregistrements de la requête préparée.

En gros la fonction retourne un tableau associatif.

Mammouth du PHP | 2703 Messages

10 janv. 2023, 23:29

que faites-vous de ce retour ?

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 23:36

Les lignes récupérées sont transformés en objet pour que je puisse plus facilement les utiliser pour afficher les données dont j'ai besoin, je l'ai fait mais au final rien n'a été affiché.

Mammouth du PHP | 2703 Messages

10 janv. 2023, 23:39

non, vous ne faites pas cela du retour de fetchAll

Eléphanteau du PHP | 45 Messages

10 janv. 2023, 23:41

Comment ça ?

Mammouth du PHP | 2703 Messages

10 janv. 2023, 23:46

relisez votre code.
et si vous ne trouvez pas, toujours comparer à l'exemple de la doc.

Eléphanteau du PHP | 45 Messages

11 janv. 2023, 00:34

je crois que je viens de comprendre pour pouvoir manipuler le résultat du fetchAll je dois le mettre dans une variable comme ceci :
$result = $products->fetchAll(PDO::FETCH_OBJ);
Grâce à tes questions t'a pu éclaircir mes idées. Merci bcp !