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

Résolu
Lib76 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
et quand tu écrivais "les autres s'ajoutent bien dans ma base", c'était aussi incorrect?
0