Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 2009
-
22 mars 2009 à 11:54
Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 2009
-
22 mars 2009 à 15:52
Bonjour à tous,
Voici mon problème : je dispose d'un panier pour mon site de vente en ligne. Mon problème est lorsque je clique sur "Ajouter un produit" la première fois il me l'ajoute correctement au panier, si je souhaite l'ajouter une 2eme fois, il me l'ajoute à nouveau au lieu de modifier la quantité de l'article.
Et cela ainsi de suite.
Par contre si je choisi un deuxième produit à ajouter au panier, tout se passe comme il faut si je l'ajoute plusieurs fois, il modifie bien ma quantité.
Je ne vois pas ce que cela pourrait être ...
Merci d'avance
Voila ma fonction pour ajouter un article au panier.
// ------------ Ajouter un article ------------
function ajouterArticle($numProduit,$libelleProduit,$qteProduit,$prixProduit)
{
if (creationPanier()) // Si mon panier existe
{
$positionProduit = array_search($numProduit, $_SESSION['panier']['numProduit']);
if ($positionProduit == true) // Si le produit existe déjà on augmente sa quantité
{
$_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
}
else // Sinon on l'ajoute au panier
{
array_push($_SESSION['panier']['numProduit'],$numProduit);
array_push($_SESSION['panier']['libelleProduit'],$libelleProduit);
array_push($_SESSION['panier']['qteProduit'],$qteProduit);
array_push($_SESSION['panier']['prixProduit'],$prixProduit);
}
}
}
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 22 mars 2009 à 15:35
... sorry, j'ai raconté une ou deux conneries dans mon précédent post ...lu trop vite.
Le "seul" pb qu'il y a dans ton code c'est le
if ($positionProduit = = true) Pourquoi ?
Parce que array_search retourne la clé de la valeur trouvée, ou false si elle n'est pas dans le tableau. Elle ne retourne jamais true.
Le problème est que ton premier produit ajouté à pour clé : 0, et que 0 == false
Par exemple ces conditions renvoient vrai :
if (true == 1)
if (false == 0)
par contre ces conditions ne sont pas vérifiées:
if (true === 1)
if (false === 0)
(j'espère être clair)
Donc if ($positionProduit true) > faux pour ton premier ajout (clée 0), un nouvelle entrée est donc créée
Il te suffit donc de remplacer cette condition par
if (false !== $positionProduit)
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 22 mars 2009 à 14:31
Salut Foozie,
Déjà ça ce n'est pas une très bonne idée :
if ($positionProduit = = true)
et puis :
$_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
=>
n'existe pas, $_SESSION['panier']['qteProduit'] n'est pas un tableau
if (creationPanier()) // Si mon panier existe => il faudrait voir ta fonction creationPanier(), mais je doute qu'elle ait bien sa place ici. Selon le contexte il est peut être plus simple de créer le panier systématiquement, même si l'utilisateur ne s'en sert pas.
Pourquoi ne pas avoir un panier sous cette forme plutôt :
$_SESSION['panier']['numProduit'] = array('libelleProduit'=>'', 'qteProduit'=>0, 'prixProduit'=>0);
Ainsi tu fais un array_key_exists et tout devient plus simple, parce que là je ne vois pas comment tu peux retrouver, par exemple, à quel produit appartient qteproduit.
Ca donnerait un truc du genre :
function ajouterArticle($numProduit,$libelleProduit,$qteProduit,$prixProduit)
{
if (creationPanier()) // a voir
{
$positionProduit = array_key_exists($numProduit, $_SESSION['panier']);
Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 20091 22 mars 2009 à 14:34
Merci de ta réponse !
Voici ma fonction de création de panier :
function creationPanier()
{
$ret=false;
// On vérifie si le panier existe
if (isset( $_SESSION['panier']))
{
$ret = true;
}
else // Sinon on le crée
{
// Initialisation du panier
$_SESSION['panier']=array();
// Subdivision du panier
$_SESSION['panier']['numProduit'] = array();
$_SESSION['panier']['libelleProduit'] = array();
$_SESSION['panier']['qteProduit'] = array();
$_SESSION['panier']['prixProduit'] = array();
$ret=true;
}
// ret vaut true lorsque le panier existe sinon false
return $ret;
}