C'est normal, décortiquons ta méthode :
public function add($product_id){
if(isset($_SESSION'panier']$product_id])){
// Si le produit est déjà dans le panier, on lui attribut le nombre
// de produit passé en POST, on ajoute pas...
$_SESSION'panier']$product_id] = $_POST'nbr_art'];
}else{
// Si le produit n'est pas déjà dans le panier, on n'en met qu'un :
$_SESSION'panier']$product_id] = 1;
}
}
Il faudrait donc plutôt faire quelque chose du genre :
public function add($product_id){
if(isset($_SESSION'panier']$product_id])){
// J'ajoute à la quantité actuelle la valeur passée en POST
$_SESSION'panier']$product_id] += $_POST'nbr_art'];
// C'est pareil que $_SESSION'panier']$product_id] = $_SESSION'panier']$product_id] + $_POST'nbr_art'];
}else{
// Sinon je lui donne comme quantité de départ la valeur passée en POST :
$_SESSION'panier']$product_id] = $_POST'nbr_art'];
}
}
Cela dit , je trouve que ce n'est pas une très bonne manière de faire, et voici ce que je te propose :
D'un coté la classe :
// J'ajoute en paramètre la quantité, avec 1 par défaut pour être sûr.
public function add($product_id, $quantity = 1){
if(isset($_SESSION'panier']$product_id])){
$_SESSION'panier']$product_id] += $quantity;
}else{
$_SESSION'panier']$product_id] = $quantity;
}
}
De l'autre ton traitement :
<?php
require 'require.php';
if(isset($_GET'id'])){
$product = $DB->query('SELECT * FROM produits WHERE id=:id', array('id' => $_GET'id']));
if(empty($product)){
die("Ce produit n\'existe pas !");
}
// J'ajoute la valeur passée en POST dans ma méthode add :
$panier->add($product[0]->id, $_POST'nbr_art']);
echo 'Article dans le panier';
}else{
echo 'Vous n\'avez sélectionné aucun produit';
}
?>
Mais, si je ne dis pas de bêtises (j'ai pas testé), les deux manières de faire fonctionnent...
J'espère que ça t'aidera :-)