Ajouter plusieurs éléments dans le même tableau

Résolu/Fermé
Lib76 Messages postés 12 Date d'inscription dimanche 24 mars 2019 Statut Membre Dernière intervention 18 juin 2020 - 17 mars 2020 à 14:15
yg_be Messages postés 23487 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 10 mars 2025 - 17 mars 2020 à 17:46
Bonjour à tous,

Je travaille actuellement sur une page de type panier, ou l'utilisateur est censé pouvoir ajouter plusieurs articles. Je souhaite pour ça utiliser un seul tableau qui comprendra tout les produits que l'utilisateur à choisi. Le problème, c'est que pour le moment, je n'arrive à récupérer qu'un seul produit dans mon tableau, les autres s'ajoutent bien dans ma base, mais je ne les récupèrent pas ailleurs ... Voici ce que j'ai déjà fait :

Mes fonctions :

  // Ajouter un produit dans un panier

    public function addPanier($users_id, $products){

        $req = $this->pdo->prepare("INSERT INTO panier(users_id, products) VALUES (?, ?)");
        $req->execute([$users_id, serialize($products)]);


    }

    // Afficher le panier d'un utilisateur

    public function getUserPanier($users_id){
        $req = $this->pdo->prepare("SELECT * FROM panier WHERE users_id = ?");
        $req->execute([$users_id]);
        $data = $req->fetch();

        if(!empty($data->products)){
            $data->products = unserialize($data->products);
            return $data->products ;

        } else{
            return $data->products;
        }
    }


Le traitement de ces fonctions :

if (isset($_POST) && !empty($_POST)) {


    $tab = [$_POST["product_id"] . "a" => ["qt" => $_POST["qt"]]];

    $post = $_POST;



    if (existPanier($post, $panier)) {
        $index = $_POST["product_id"] . "a";
        unset($panier[$index]);

        $tab2 = array_merge($panier, $tab);
        $test = existPanier($panier,$post).$ordersModel->addPanier($user->id,serialize([$_POST["product_id"] . "a" => ["qt" => $_POST["qt"]]]));






    } else {
        $tab2 = array_merge($panier, $tab);
        $test = existPanier($panier,$post).$ordersModel->addPanier($user->id,serialize([$_POST["product_id"] . "a" => ["qt" => $_POST["qt"]]]));


    }

}


function existPanier($post, $panier)
{
    return isset($post["product_id"]) && array_key_exists($post["product_id"] . "a1", $panier);
}



Voici également le résultat du débug qui montre ce que contient mon panier :

Array
(
    [29a] => Array
        (
            [qt] => 6
        )

)


Il m'affiche comme on le voit correctement le produit ainsi que sa quantité, sauf que j'en ai d'autre et il ne les prends pas du tout dans le tableau, et je n'arrive pas à push les éléments... J'ai pourtant saigné la doc PHP sur les tableaux, mais je n'arrive à rien. Merci d'avance pour votre aide !
A voir également:

3 réponses

jordane45 Messages postés 38451 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mars 2025 4 739
17 mars 2020 à 14:58
Bonjour,

Es-tu sûr que tous tes produits sont enregistrés dans ta table ?
car tu fais :
addPanier($user->id,serialize([$_POST["product_id"] . "a" => ["qt" => $_POST["qt"]]]))

Donc tu n'envoies qu'un seul produit... celui en POST.
A aucun moment tu ne sembles utiliser ton
 $tab2 = array_merge($panier, $tab);


1
yg_be Messages postés 23487 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 10 mars 2025 Ambassadeur 1 570
17 mars 2020 à 14:43
bonjour,
à quel endroit as-tu placé le debug?
il faut visiblement en placer un autre plus tôt, pour découvrir où tu perds le contenu du panier.
0
Lib76 Messages postés 12 Date d'inscription dimanche 24 mars 2019 Statut Membre Dernière intervention 18 juin 2020
17 mars 2020 à 16:35
Alors j'ai finalement réussi ! Effectivement j'envoyais qu'un seul produit en POST et je n'utilisais pas mon array_merge correctement. Merci beaucoup de l'aide !
0
yg_be Messages postés 23487 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 10 mars 2025 1 570
17 mars 2020 à 17:46
et quand tu écrivais "les autres s'ajoutent bien dans ma base", c'était aussi incorrect?
0