Panier : Pb ajout d'articles

Résolu
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 - 22 mars 2009 à 11:54
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Derniè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);
      }
    }
}

7 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
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)

Cordialement,

Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
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']);
       
      if (true === $positionProduit)
      {
         $_SESSION['panier'][$numProduit]['qteProduit']+= $qteProduit;
       } else {
          $_SESSION['panier'][$numProduit] = array();
          array_push($_SESSION['panier']['numProduit']['libelleProduit'], $libelleProduit);
          array_push($_SESSION['panier']['numProduit']['qteProduit'], $qteProduit);
          array_push($_SESSION['panier']['numProduit']['prixProduit'], $prixProduit);
      }
    }
}

Bien sur c'est largement incomplet, mais ça devrait fonctionner.

Cordialement,

Kohntark -
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
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;
}

Je vais tester comme tu fais.
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
22 mars 2009 à 14:39
Permet moi de te poser une question : Que signifie "      if (true === $positionProduit)" ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
22 mars 2009 à 15:39
Merci merci.

J'avais pas du tout penser à ça. Tu as été très clair, je vais de ce pas modifier ma condition.

Merci encore, ça fait des heures que je cherchais mon erreur.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 mars 2009 à 15:42
Pour répondre à ta dernière question :
Contrairement à array_search, array_key_exists return true si la clé existe, false sinon.

Kohntark -
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
22 mars 2009 à 15:52
Merci kofntark, pour ces explications.

Ca fonctionne impect.
0
Rejoignez-nous