Bonjour,

J'ai un système de panier avec des quantité que je mouvemente avec deux boutons + et -

Quand je clique dessus je lance une fonction dans mon controleur

Le controleur n'arrive pas à retrouver l'id du produit concerné alors qu'il apparaît bien dans la session

Merci pour votre aide

Ma table de produits



<table class="table ">
                    <tr>
                        <th class="text-center">Vignette</th>
                        <th class="text-center">Index Photo</th>
                        <th class="text-center">Référence Photo</th>
                        <th class="text-center">Quantité </th>
                        <th class="text-center">Prix Unitaire </th>
                        <th class="text-center">Prix Total</th>
                        <th class="text-center"></th>
                    </tr>
<?php
                    foreach ($_SESSION['cart'] as $item) : 
                        {
?>                                    
                        <tr>
                            <td><img width="180" src="/images/Voyages/<?=$item['reference']?>"></td>
                            <td><?= $item['id']; ?></td>  
                            <td><?= $item['reference']; ?></td>
                        <td>

                        <!-- Boutons + et - pour modifier la quantité -->
                            <div class="quantity-container">
                                <!-- Pour incrémenter la quantité -->

                                <a href="/fr/FO/Carts/increment/<?= $item['id']; ?>">+</a>

                               
                                <span class="quantity" data-product-id="<?= $item['id']; ?>"><?php echo $item['quantity']; ?></span>

                                <!-- Pour décrémenter la quantité -->
                                <a href="/fr/FO/Carts/decrement/<?php echo $item['id']; ?>">-</a>
                            </div>
                        </td>
                        <td class="price" data-product-id="<?php echo $item['id']; ?>">
                        <?php echo number_format($item['price'], 2); ?>
                        </td>
                        <td class="total" data-product-id="<?php echo $item['id']; ?>">
                        <?php echo number_format($item['price'] * $item['quantity'], 2); ?>
                        </td>
                        <td><a class="SuppressCartLink " href="/fr/FO/Carts/removeFromCart/<?= $item['id'] ;?>" ><img src="/librairies/icones/delete.gif"  class="my-icon"></a>
                        </td>
                    </tr>
<?php  
                }
                endforeach; ?>

                </table>


Mon controleur



public function increment() {

    if (isset($_GET['param'])) 
        {
        $productId = $_GET['param'];

        // Votre logique pour incrémenter la quantité du produit dans la session
        /*if (isset($_SESSION['cart'][$productId]))
            {
            $_SESSION['cart'][$productId]['quantity'] += 1;
            }*/
      
        if (array_key_exists($productId, $_SESSION['cart']))
             {
            // La clé existe, vous pouvez y accéder en toute sécurité
            //$product = $_SESSION['cart'][$productId];
            echo "Le produit avec l'ID $productId est dans le panier.";
            // Faites quelque chose avec $product...
            }
        else 
            {
            // La clé n'existe pas, gestion en conséquence
             echo "Le produit avec l'ID $productId n'est pas dans le panier.";
            }
}
Salut,

Qu'as-tu essayé de faire pour déboguer ton code ?

Quelques pistes :
- Dans ton contrôleur, que contient $_GET['param'] ? Es-tu sûr que le lien cliqué transmet bien l'ID du produit ?
- Dans ta vue, le lien <a href="/fr/FO/Carts/increment/<?= $item['id']; ?>">+</a> contient-il l'ID produit ? Si oui, celui-ci est-il bien transmis en tant que paramètre d'URL dans $_GET ?

Pour déboguer facilement, je te recommande de surveiller les valeurs des variables au fur et à mesure des étapes de ton code, en utilisant var_dump() suivi d'un die() par exemple.

Si tu as besoin d'aide à propos de la méthodologie pour déboguer du code PHP, je me rappelle de cette courte playlist de Grafikart qui à l'époque m'avait montré les bases. En espérant que cela puisse aider Smiley smile
Merci pour le tuto

pour le $_GET['param'] j'obtiens :

string(3) "192"

et pour la session :

array(1) {
[0]=>
array(4) {
["id"]=>
string(3) "192"
["reference"]=>
string(15) "Voyages_153.jpg"
["price"]=>
string(3) "200"
["quantity"]=>
int(1)
}
}
Modifié par dudu22 (29 Dec 2023 - 11:48)
Mais du coup, est-ce que dans la session la clé $_SESSION['cart'][$productId] existe ?
J'ai plus l'impression de voir la clé $_SESSION['cart']['id'] plutôt non ?
Modifié par Loraga (29 Dec 2023 - 11:53)
j'ai fait une confusion avec l'index qui correspond à celui du tableau (0,1 ..) et non pas à l'id du produit

J'ai modifié mon code



public function increment() {

    $productId = $_GET['param'];
    // Recherchez l'élément dans le tableau $_SESSION['cart'] qui a le 'id' correspondant
    $cartItem = null;

    foreach ($_SESSION['cart'] as &$item)
        {
        if ($item['id'] === $productId)
            {
            $cartItem = $item;
            break;
            }
        } 
    // Vérifiez si l'élément a été trouvé
    if ($cartItem !== null)
        {
        $cartItem['quantity'] += 1;
        }
    else
        {
        // Gérer le cas où l'élément n'a pas été trouvé
        echo "Aucun élément avec l'id $productId n'a été trouvé dans le tableau.";
        }
            
        $nb_items = $this->getCartItemCount();
        $total = $this->getCartTotal();

        header('Location: /fr/FO/Carts/show');
        exit(); 

        $this->render('carts/show', compact('nb_items', 'total'));
        
}




Modifié par dudu22 (29 Dec 2023 - 13:16)