Ajouter plusieurs éléments dans le même tableau
Résolu
Lib76
Messages postés
14
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 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 :
Le traitement de ces fonctions :
Voici également le résultat du débug qui montre ce que contient mon panier :
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 !
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 !
3 réponses
-
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);
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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. -
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 !