IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Tutoriel sur la création d'un panier en PHP [Tutoriel]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #21
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    Quand on modifie plusieur quantitées d'article du panier dont une a zéro.

    Ce message s'affiche :

    Notice: Undefined offset: 1 in /.../panier.php on line 49

    la ligne 49 pour moi est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    46       Case "refresh" :
    47       for ($i = 0 ; $i < count($QteArticle) ; $i++)
    48       {
    49         modifierQTeArticle($_SESSION['panier']['libelleProduit']   [$i],round($QteArticle[$i]));
    50       }
    51       break;
    Comment résoudre se problème ?

    Merci

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    suite au bug dont je fais mention plus haut j'ai changer ceci :

    1) pour corriger le bug sur le rafraîchissement avec une quantité a zéro
    modifier dans panier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Case "refresh" :
          	$a = 0;
             for ($i = 0 ; $i < count($QteArticle) ; $i++)
             {
                if($QteArticle[$i] != 0) 
                {
                	modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i]));
                	$a++;
                }
                else
                {
                	modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i]));
                }
             }
             break;
    explication : la valeur de $i est celle de l'ancien panier mais celui-ci est modifier lors de la suppression d'un article. $a prend donc la valeur du nouveau panier.

    2) pour éviter les erreurs avec les nombres négatif (en effet un client peu modifier la quantiter par -10 par ex.)
    modifier dans panier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //On traite $q qui peut etre un entier simple ou un tableau d'entier
     
       if (is_array($q)){
          $QteArticle = array();
          $i=0;
          foreach ($q as $contenu){
          	$valeur = intval($contenu);
          	if($valeur <= 0) { $QteArticle[$i++] = 0 ; }
          	else { $QteArticle[$i++] = $valeur ; }
     
          }
       }
    Voilà

    Il ma fallu du temp pour résoudre ses bug.
    J'espère que sa pourra aidé

  3. #23
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Bonjour et merci de ton intérêt pour la panier !

    En effet il y'a un bug concernant la quantité des articles à 0.
    Comme tu l'as dis le panier change puisque ça supprime l'article donc l'index du produit n'est plus bon.

    Pour le 2eme "bug", il y'à déjà un cas prévu pour ça dans la fonction de modification de l'article :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Si la quantité est positive on modifie sinon on supprime l'article
          if ($qteProduit > 0)
          {
             //Recharche du produit dans le panier
             $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
     
             if ($positionProduit !== false)
             {
                $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
             }
          }
          else
          supprimerArticle($libelleProduit);
    Merci à toi
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  4. #24
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    en effet cela vient de mon code de bug concernant la quantité des articles à 0.

    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($QteArticle[$i] != 0)
    alors qu'il faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if($QteArticle[$i] <= 0)
    Merci

    édit : Ce srais bien de mettre le tuto a jour

  5. #25
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour, juste un message pour vous remercier de ce tuto très bien réalisé.

  6. #26
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut un petit oubli ? ou une grosse paire de lunettes pour moi ?
    Citation Envoyé par paul01 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Case "refresh" :
          	$a = 0;
             for ($i = 0 ; $i < count($QteArticle) ; $i++)
             {
                if($QteArticle[$i] != 0) 
                {
                	modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i]));
                	$a++;
                }
                else
                {
                	modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i]));
                }
             }
             break;
    explication : la valeur de $i est celle de l'ancien panier mais celui-ci est modifier lors de la suppression d'un article. $a prend donc la valeur du nouveau panier.
    Salut paul01, à quel moment tu précise quel libellé doit se voir ajouter une quantité ? Avec ce code, dans le cas d'un panier avec plusieurs articles, il m'est impossible d'ajouter une quantité dans le formulaire du panier, comment se fait-il ?

    ---> en fait, la quantité ne va pas dans le bon article ... comment se fais-ce ?

  7. #27
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Besoin d'aide
    Bonjour,

    Débutante en php, je me suis lancée dans la programmation d'un site e-commerce. J'avance bien mais bloque sur le panier. Incapable d'en créer un moi même j'ai (j'avoue c'est pas beau ) copié le script de jc Rozier.
    Problème : une fois la sélection faite par le client du produit, quantité et prix sur mon site (listes déroulantes), le panier n'affiche que la première lettre/chiffre de la sélection. Pourriez vous m'indiquer la modification à apporter à votre script ?
    Merci beaucoup...

    P.S : je galère vraiment et ne sais pas quoi faire du tout

  8. #28
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Bonjour,
    j'aurais quelques remarques sur ce tutorial.

    Je trouve la structure du panier très mauvaise.
    Pourquoi ne pas utiliser directement $_SESSION['panier'][$libelleProduit], ce qui éviterait les array_search(), $positionProduit, etc.
    Cela éviterait aussi de passer par un panier temporaire pour supprimer un élément ce qui me semble aberrant.

    Pourquoi également utiliser array_push() pour ajouter un seul élément à un tableau ? On a un appel de fonction pour rien car on peut faire ceci :

    Au final, je trouve le code de ce tutorial extrêmement lourd pour pas grand-chose, en partie à cause d'un mauvais choix de structure à la base, il me semble.
    Vive les roues en pierre

  9. #29
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut
    Je deterre ....

    Je tente d'utiliser ce code, il marche dans l'ensemble, j'aimerai y ajouter des modifications :

    - Afficher les prix comme ça 15,00 ou 26,20 au lieu de 15 et 26,2
    - Ajouter un lien vers paypal avec le montant total pour que l'acheteur puisse payer directement

    Merci d'avance pour vos réponses !!! Et desolé pour ce deterrage, je n'ai rien trouver sur google.

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Octobre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Octobre 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    bonjour,

    tu cherches mal
    - http://www.php.net/round

  11. #31
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par fwebconcept Voir le message
    bonjour,

    tu cherches mal
    - http://www.php.net/round
    Merci pour la reponse, j'ai pourtant pas mal cherché
    Par ailleurs, je ne sais pas vraiment comment integrer la fonction au code de ce tuto.
    Au niveau de l'affichage sur la page panier.php ou alors en amont sur le lien qui ajoute l'objet. D'experience j'aurai tendance a dire plutot à l'affichage panier.php mais alors par exemple dans ce code comment inclure la commande ? A moins que ce ne soit dans fonction_panier.php ....
    Desolé pour mon ignorance !!!!

  12. #32
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Integration paypal resolue, en ajoutant ce code au panier pour payer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="https://www.paypal.com/xclick/business=ton adresse@paypal.fr&amp;item_name=test&amp;amount=<? echo MontantGlobal(); ?>&amp;return=http://valid&eacute;&amp;cancel_return=http://annul&amp;no_shipping=1&amp;currency_code=EUR"><img src="ton image.gif" alt="Payer" border="no" /></a>
    Par contre je n'arrive toujours pas afficher les 2 décimales sur le panier ...

    Une petite aide ?

  13. #33
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bon ben j'ai trouvé les solutions a mes problèmes .... merci a moi meme !!!

    J'ai un autre problème sur ce panier, lorsque le nom d'un produit contient un "V", celui ci disparait, c'est a dire que dans le panier je vais avoir "oiture" au lieu de "voiture" ... ce n'est pas mortel mais c'est un peu agaçant !!

    Une solution a ce problème ?

  14. #34
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Prb Précédent, Suivant et Actualiser
    Bonjour et merci pour se tutoriel qui ma servi de base pour mon panier.
    J’ai ajouté des fonctions avec des boutons plus et moins pour modifier la quantité du produit.
    Mais je ne sais pas comment faire pour gérer les fonctions du navigateur Précédent, Suivant et Actualiser. En effet j’ajout un produit par l’URL suivante /mon_panier.php?action=ajout&l=L01&q=1&p=12 si je fais Actualiser (ou F5) alors j’ajout une nouvelle fois le produit. Ou bien, j’ajout un produit, je le supprime et je fais précédent comme si l’utilisateur voulais revenir à la liste des produits alors en faite je ré actualise l’Url avec l’action = ajout et du coup cela remet le produit !!
    J’imagine que c’est un problème classique.
    Merci de votre aide .

  15. #35
    Nouveau Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Afficher décimales prix
    Bonjour à tous

    Pour afficher les prix avec les deux décimales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function MontantGlobal(){
       $total=0;
       for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
       {
          $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
       }
       return $total=number_format($total, 2, '.', '');;
     
    }

  16. #36
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    J'aimerais beaucoup tester ce tutoriel mais est ce que quelqu'un pourrait mettre une capture des différents affichage ou mettre un lien vers un site l'utilisant ? et sinon quelqu'un en a fait une classe ?

  17. #37
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Et sinon, aura t'on un jour la gestion des produits via une bdd ?

  18. #38
    Membre à l'essai
    Homme Profil pro
    Ouvrier
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bonjour

    J'ai testé ce code mais rien ne s'affiche à part un tableau vide
    Votre panier
    Libellé Quantité Prix Unitaire Action
    Votre panier est vide
    Pouvez vous me dire ou l'on configure les produits ? ou si quelqu'un aurait un code fonctionne avec ,
    Merci d'avance

  19. #39
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Petite erreur dans la page "panier.php" lorsqu'on rédige le html pour le tableau :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (creationPanier())
    	{
    		$nbArticles=count($_SESSION['panier']['libelleProduit']);
    		if ($nbArticles <= 0)
    		echo "<tr><td>Votre panier est vide </ td></tr>";
    Il manque juste les accolades {} apres le if

  20. #40
    Membre à l'essai
    Homme Profil pro
    Ouvrier
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bonjour

    Merci pour ce tuto très bien fait

    Est il compliqué d'ajouter un nouveau choix pour les articles ? genre un select pour choisir une couleur

    Car la pour ajouter un produit on passe par un lien Href , alors que si on met des choix il faut un form pour chaque article non ? pour récupérer en $_GET les valeurs

    J'aimerai me faire un catalogue interne pour ajouter des produits qui ont une taille et une couleur, au final avoir un panier que j'envoi par mail

    Merci d'avance

    PS : si quelqu'un à un peu de temps et les connaissances pour modifier les ajouts dans le script je suis preneur et je suis prêt à faire un don, car tout travail mérite salaire, (je posterai d'ailleurs le contenu si besoin pour d'autres)

    Edit

    Je vous met mes avancées dans les modifications, pour le moment on peu donc choisir une taille pour l'article, le refresh fonctionne, reste à voir pour supprimer un article qui ne fonctionne pas encore

    Le plus compliqué reste à venir, ajouter encore un select pour une couleur, j'essaye de m'y mettre mais c'est pas facile,

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans nom</title>
    </head>
    <body>
    <form name="myform" action="panier.php?action=ajout" method="post" >
      <br>
      <input type="hidden" name="l" value="REFERENCE1" />
      <br>
      Quantit&eacute;<br>
      <select name="q" id="q">
        <option value="1">1</option>
        <option value="2">2</option>
      </select><br>
      Taille<br>
      <select name="t" id="t">
        <option value="39/40">39/40</option>
        <option value="40/41">40/41</option>
    	<option value="42/43">42/43</option>
      </select>
      <br>
      Prix 12€<br />
      <input type="hidden" name="p" value="12" />
      <br>
      <input type="submit" value="envoi">
      <br>
    </form>
    <br />
    <form name="myform2" action="panier.php?action=ajout" method="post" >
      <br>
      <input type="hidden" name="l" value="REFERENCE2" />
      <br>
      Quantit&eacute;<br>
      <select name="q" id="q">
        <option value="1">1</option>
        <option value="2">2</option>
      </select><br>
      Taille<br>
      <select name="t" id="t">
        <option value="39/40">39/40</option>
        <option value="40/41">40/41</option>
    	<option value="42/43">42/43</option>
      </select>
      <br>
      Prix 14€<br />
      <input type="hidden" name="p" value="14" />
      <br>
      <input type="submit" value="envoi">
      <br>
    </form>
    <br />
    </body>
    </html>
    panier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    <?php
    session_start();
    include_once("fonctions-panier.php");
     
    $erreur = false;
     
    $action = (isset($_POST['action'])? $_POST['action']:  (isset($_GET['action'])? $_GET['action']:null )) ;
    if($action !== null)
    {
       if(!in_array($action,array('ajout', 'suppression', 'refresh')))
       $erreur=true;
     
       //récuperation des variables en POST ou GET
       $l = (isset($_POST['l'])? $_POST['l']:  (isset($_GET['l'])? $_GET['l']:null )) ;
       $t = (isset($_POST['t'])? $_POST['t']:  (isset($_GET['t'])? $_GET['t']:null )) ;
       $p = (isset($_POST['p'])? $_POST['p']:  (isset($_GET['p'])? $_GET['p']:null )) ;
       $q = (isset($_POST['q'])? $_POST['q']:  (isset($_GET['q'])? $_GET['q']:null )) ;
     
       //Suppression des espaces verticaux
       $l = preg_replace('#\v#', '',$l);
       //On verifie que $p soit un float
       $p = floatval($p);
     
       //On traite $q qui peut etre un entier simple ou un tableau d'entier
     
       if (is_array($q)){
          $QteArticle = array();
          $i=0;
          foreach ($q as $contenu){
             $QteArticle[$i++] = intval($contenu);
          }
       }
       else
       $q = intval($q);
     
    }
     
    if (!$erreur){
       switch($action){
          Case "ajout":
             ajouterArticle($l,$t,$q,$p);
             break;
     
          Case "suppression":
             supprimerArticle($l,$t);
             break;
     
          Case "refresh" :
     
             for ($i = 0 ; $i < count($QteArticle) ; $i++)
             {
                modifierQTeArticle($_SESSION['panier']['libelleProduit'][$i],$_SESSION['panier']['taille'][$i],round($QteArticle[$i]));
     
             }
     
             break;
     
          Default:
             break;
       }
    }
     
    echo '<?xml version="1.0" encoding="utf-8"?>';?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <title>Votre panier</title>
    </head>
    <body>
     
    <form method="post" action="panier.php">
    <table style="width: 400px">
    	<tr>
    		<td colspan="4">Votre panier</td>
    	</tr>
    	<tr>
    		<td>Libellé</td>
    		<td>Taille</td>
    		<td>Quantité</td>
    		<td>Prix Unitaire</td>
    		<td>Action</td>
    	</tr>
     
     
    	<?php
    	if (creationPanier())
    	{
    	   $nbArticles=count($_SESSION['panier']['libelleProduit']);
    	   if ($nbArticles <= 0)
    	   echo "<tr><td>Votre panier est vide </ td></tr>";
    	   else
    	   {
    	      for ($i=0 ;$i < $nbArticles ; $i++)
    	      {
    	         echo "<tr>";
    	         echo "<td>".htmlspecialchars($_SESSION['panier']['libelleProduit'][$i])."</ td>";
    			 echo "<td>".htmlspecialchars($_SESSION['panier']['taille'][$i])."</ td>";
    	         echo "<td><input type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['qteProduit'][$i])."\"/></td>";
    	         echo "<td>".htmlspecialchars($_SESSION['panier']['prixProduit'][$i])."</td>";
    	         echo "<td><a href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['libelleProduit'][$i])."&t=".rawurlencode($_SESSION['panier']['taille'][$i]))."\">XX</a></td>";
    	         echo "</tr>";
    	      }
     
    	      echo "<tr><td colspan=\"2\"> </td>";
    	      echo "<td colspan=\"2\">";
    	      echo "Total : ".MontantGlobal();
    	      echo "</td></tr>";
     
    	      echo "<tr><td colspan=\"4\">";
    	      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
    	      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
     
    	      echo "</td></tr>";
    	   }
    	}
    	?>
    </table>
    </form>
    <br />
    <br />
    <a href="index.php">Retour</a>
    </body>
    </html>
    fonctions-panier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
     
    <?php
     
    /**
     * Verifie si le panier existe, le créé sinon
     * @return booleen
     */
    function creationPanier(){
       if (!isset($_SESSION['panier'])){
          $_SESSION['panier']=array();
          $_SESSION['panier']['libelleProduit'] = array();
    	  $_SESSION['panier']['taille'] = array();
          $_SESSION['panier']['qteProduit'] = array();
          $_SESSION['panier']['prixProduit'] = array();
          $_SESSION['panier']['verrou'] = false;
       }
       return true;
    }
     
     
    /**
     * Ajoute un article dans le panier
     * @param string $libelleProduit
     * @param int $qteProduit
     * @param float $prixProduit
     * @return void
     */
     
    function ajouterArticle($libelleProduit,$taille,$qteProduit,$prixProduit){
     
       //Si le panier existe
       if (creationPanier() && !isVerrouille())
       		{
          //Si le produit existe déjà on ajoute seulement la quantité
          $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
    	   $positionTaille = array_search($taille,  $_SESSION['panier']['taille']);
     
       	 		if ($positionProduit !== false && $positionTaille !== false)
    	  			{
    					if ($positionTaille !== true)
    					{
    					//echo "PRODUIT EXISTE DEJA";
    			 		$_SESSION['panier']['qteProduit'][$positionTaille] += $qteProduit ;
    					}
     
    				}
     
          else
          {
             //Sinon on ajoute le produit
    		 //echo "PREMIER AJOUT";
             array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
    		 array_push( $_SESSION['panier']['taille'],$taille);
             array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
             array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
          }
     
    }
       else
       echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
     
    /**
     * Modifie la quantité d'un article
     * @param $libelleProduit
     * @param $qteProduit
     * @return void
     */
    function modifierQTeArticle($libelleProduit,$taille,$qteProduit){
       //Si le panier éxiste
       if (creationPanier() && !isVerrouille())
       {
          //Si la quantité est positive on modifie sinon on supprime l'article
          if ($qteProduit > 0)
          {
             //Recharche du produit dans le panier
             $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
    		 $positionTaille = array_search($taille,  $_SESSION['panier']['taille']);
     
             if ($positionProduit !== false && $positionTaille == true)
             {
                $_SESSION['panier']['qteProduit'][$positionTaille] = $qteProduit ;
             }
          }
          else
          supprimerArticle($libelleProduit);
       }
       else
       echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
    /**
     * Supprime un article du panier
     * @param $libelleProduit
     * @return unknown_type
     */
    function supprimerArticle($libelleProduit){
       //Si le panier existe
       if (creationPanier() && !isVerrouille())
       {
          //Nous allons passer par un panier temporaire
          $tmp=array();
          $tmp['libelleProduit'] = array();
    	  $tmp['taille'] = array();
          $tmp['qteProduit'] = array();
          $tmp['prixProduit'] = array();
          $tmp['verrou'] = $_SESSION['panier']['verrou'];
     
          for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
          {
             if ($_SESSION['panier']['libelleProduit'][$i] !== $libelleProduit)
             {
                array_push( $tmp['libelleProduit'],$_SESSION['panier']['libelleProduit'][$i]);
    			array_push( $tmp['taille'],$_SESSION['panier']['taille'][$i]);
                array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]);
                array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
             }
     
          }
          //On remplace le panier en session par notre panier temporaire à jour
          $_SESSION['panier'] =  $tmp;
          //On efface notre panier temporaire
          unset($tmp);
       }
       else
       echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
     
    /**
     * Montant total du panier
     * @return int
     */
    /*function MontantGlobal(){
       $total=0;
       for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
       {
          $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
       }
       return $total;
    }
    */
    function MontantGlobal(){
       $total=0;
       for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
       {
          $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
       }
       return $total=number_format($total, 2, '.', '');;
     
    }
     
     
    /**
     * Fonction de suppression du panier
     * @return void
     */
    function supprimePanier(){
       unset($_SESSION['panier']);
    }
     
    /**
     * Permet de savoir si le panier est verrouillé
     * @return booleen
     */
    function isVerrouille(){
       if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
       return true;
       else
       return false;
    }
     
    /**
     * Compte le nombre d'articles différents dans le panier
     * @return int
     */
    function compterArticles()
    {
       if (isset($_SESSION['panier']))
       return count($_SESSION['panier']['libelleProduit']);
       else
       return 0;
     
    }
     
    ?>

Discussions similaires

  1. [Joomla!] [Joomla 1.6] Recherche bon tutoriel sur la création d'extension
    Par MtgCmg dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 30/06/2011, 14h00
  2. [eCommerce] Toujours à propos du tutoriel sur la création d'un panier en PHP
    Par patriciaprovence dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 03/09/2010, 20h12
  3. Question sur la création d'un panier en PHP
    Par hotinno dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2010, 14h45
  4. Réponses: 5
    Dernier message: 17/04/2009, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo