C'est parce que ta nouvelle valeur écrase l'ancienne.
1 2 3 4
|
if($i==$key){
echo "trouve";
echo $_SESSION['PanierVirtuel'][$i]['quantite'] += $q; |
$i est bien mis à jour. Tout est correct. Sauf que ta clause else se lance lorsque $i != $key, et c'est le cas si tu as d'autres paniers virtuels dans la session. Dans ce cas, la clause else s'exécute à chaque fois qu'il y a un panier différent, et
$_SESSION['PanierVirtuel'][$i]['quantite'] = $q; etc...
est exécuté. Par conséquent, la valeur mise à jour dans if est écrasée et $i est insérée comme un nouveau panier..
Tu peux résoudre ce problème en faisant unset sur $_SESSION['PanierVirtuel'] au début si tu n'as besoin que d'un panier par utilisateur.
Sinon, utilise un break à la fin de la clause if (solution inélégante), ou utilise un switch et un break si $i == $key afin que les autres cas ne puissent plus s'exécuter, si tu as besoin d'avoir plusieurs paniers en session.
Partager