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 :

[eCommerce] Toujours à propos du tutoriel sur la création d'un panier en PHP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 66
    Points
    66
    Par défaut [eCommerce] Toujours à propos du tutoriel sur la création d'un panier en PHP
    Bonjour,
    Tout d'abord, ce que j'aurais dû faire dans mon premier post concernant ce tutoriel : un grand merci à son auteur... Les pauvres débutants en php comme moi apprécient l'aide que cela nous apporte pour apprendre et comprendre.

    Voici les autres raisons de ce post relatif aux scripts de ce tutorlel :

    Dans la page fonctions-panier.php, dans la partie concernant la modification du panier au niveau de la quantité, j'ai fait une modification...

    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
    function modifierQTeArticle($libelleProduit,$qteProduit){
    if (creationPanier())
    {
     
      if ($qteProduit > 0)
      {
       $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
     
       if ($positionProduit !== false)
       {
        $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
       }
      }
      else
       supprimerArticle($libelleProduit);
     
    }
    else
      echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
    Il y a, à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    supprimerArticle($libelleProduit);
    et cela supprime la ligne lorsqu'on change la quantité dans le panier au lieu "d'enregistrer" le changement de quantité. Je l'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    modifierQTeArticle($libelleProduit);
    ce qui me permet maintenant de changer la quantité tout en conservant la ligne de produit.
    J'y ai ensuite ajouté, sans problème, le traitement de deux données supplémentaires (le nom du fournisseur et un second montant) et fais les modifications dans la page panier.php...

    Mais je voudrais y faire deux autres modifications, et j'avoue que je sèche...

    La première concerne les prix : j'aimerais qu'ils s'affichent dans le panier avec deux décimales et non pas une seule lorsque la deuxième décimale est un zéro (par exemple : 1.80 au lieu de 1.8 actuellement)...

    et la seconde est l'ajout, dans le panier, d'une colonne comportant, ligne par ligne, le résultat de la multiplication du prix unitaire par la quantité. actuellement, je n'ai en bas du tableau que le total des différents achats, mais je n'ai pas ce résultat à chaque ligne (je ne sais pas si je m'explique bien...)
    Ajouter une colonne dans panier.php, je sais faire, mais je n'arrive pas à trouver la bonne formule à mettre dans fonctions-panier.php pour arriver à faire cette simple multiplication pour envoyer vers le panier (j'suis pas douée, hein !)

    Je remets ce script (avec mes ajouts) en entier :
    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
    <?php
     
    function creationPanier(){
    $ret=false;
     
    if (isset( $_SESSION['panier']))
     $ret = true;
    else
    {
     
      $_SESSION['panier']=array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['fournisseurProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();      
      $_SESSION['panier']['prixProduit'] = array();
      $_SESSION['panier']['gainProduit'] = array();
     
      $ret=true;
    }
    return $ret;
    }
     
    function ajouterArticle($libelleProduit,$fournisseurProduit,$qteProduit,$prixProduit,$gainProduit){
     
    if (creationPanier())
    {
    $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
     
      if ($positionProduit !== false)
      {
       $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
      }
      else
      {
       array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
       array_push( $_SESSION['panier']['fournisseurProduit'],$fournisseurProduit);
       array_push( $_SESSION['panier']['qteProduit'],$qteProduit); 
       array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
       array_push( $_SESSION['panier']['gainProduit'],$gainProduit);
     
      }
     
    }
     
    else
      echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
    function supprimerArticle($libelleProduit){
     
    if (creationPanier())
    {
      $tmp=array();
      $tmp['libelleProduit'] = array();
      $tmp['fournisseurProduit'] = array();
      $tmp['qteProduit'] = array();      
      $tmp['prixProduit'] = array();
      $tmp['gainProduit'] = array();
     
      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['fournisseurProduit'],$_SESSION['panier']['fournisseurProduit'][$i]);
        array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]); 
        array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
        array_push( $tmp['gainProduit'],$_SESSION['panier']['gainProduit'][$i]);
     
       }
     
      }
     
     
    $_SESSION['panier'] =  $tmp;
    unset($tmp);      
     
    }
    else
      echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
    function modifierQTeArticle($libelleProduit,$qteProduit){
    if (creationPanier())
    {
     
      if ($qteProduit > 0)
      {
       $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
     
       if ($positionProduit !== false)
       {
        $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
       }
      }
      else
       modifierQTeArticle($libelleProduit);
     
    }
    else
      echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
     
    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 MontantGain(){
     
    $total=0;
     
      for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++) 
      {            
       $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['gainProduit'][$i]; 
      }
     
    return $total;
    }
     
    ?>
    Merci par avance de votre aide.

  2. #2
    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 pour le 'merci '

    Concernant ta première modification , si il y a une fonction supprimerArticle dans le else c'est tout simplement pour gérer le cas ou une quantité est nulle (0) ou négative .

    Par défaut 0 en quantité revient a dire "Pas de produit" c'est pour ça que l'option de supprimer l'article dans ce cas a été faite.

    2) pour le formatage de la devise tu peux t'inspirer de la doc PHP (Chapitre : "Exemple #8 sprintf() : formatage de devises")

    3)

    tu peux procéder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Déclaration du tableau en question
    $_SESSION['panier']['totalProduit'] = array();
    //Mise a jour du total produit
    $_SESSION['panier']['totalProduit'][$i] = $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i] ;
    En espérant avoir répondu a tes attentes.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre du Club
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 66
    Points
    66
    Par défaut
    Re-bonjour et re-merci pour la réponse.

    C'est super, j'ai ma colonne supplémentaire avec mon total par ligne...

    Pour ce qui est de la modification que j'avais faite dans fonctions-panier, je l'ai supprimée et ai remis le "supprimerArticle" dans le else... j'avais mal compris son rôle.

    Bonne fin de journée.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai des soucis avec ce code :

    //Déclaration du tableau en question
    $_SESSION['panier']['totalProduit'] = array();
    //Mise a jour du total produit
    $_SESSION['panier']['totalProduit'][$i] = $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i] ;

    Quelqu'un peut il m'expliquer comment l'installer, car après moulte essai, ça ne fonctionne pas.

    Si je pouvais avoir, l'emplacement ou intégrer ces deux lignes de codes, cela serait super.

    Je sais je suis pas doué.

    Merci par avance pour votre aide.

    Marc

  5. #5
    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,
    As tu pensé à afficher la fameuse variable ?
    Est-ce que je peux voir le code de l'affichage du panier ?

    merci
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Ligne de code dans Panier.php rajouter pour l'affichage :
    echo "<td>".htmlspecialchars($_SESSION['panier']['totalProduit'][$i])."</ td>";


    J'ai rajouter une colonne avec la mention Sous Total dans le panier.

    Dans fonctions-paniers.php, j'ai modifié :

    function creationPanier(){
    if (!isset($_SESSION['panier'])){
    $_SESSION['panier']=array();
    $_SESSION['panier']['libelleProduit'] = array();
    $_SESSION['panier']['qteProduit'] = array();
    $_SESSION['panier']['prixProduit'] = array();
    $_SESSION['panier']['totalProduit'] = array();
    $_SESSION['panier']['totalProduit'][$i] = $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i] ;
    $_SESSION['panier']['verrou'] = false;
    }
    return true;
    }

    Bon, je dois avoir tout faux sur toute la ligne.

    Merci de votre aide, car je suis vraiement débutant de chez débutant.

    Marc

  7. #7
    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
    En fait la y' à vraiment un mélange,
    Tu as modifié la fonction de création du panier, pas celle de du calcul ...

    Le plus simple ça va être d'afficher directement le sous total dans le panier, et faire le calcul avant l'affichage, je reprends la ligne donc en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['panier']['totalProduit'][$i] = $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i] ;
    Je l'intègre dans le code d'affichage :

    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
     
    <?php
    session_start();
    include_once("fonctions-panier.php");
     
    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>Quantité</td>
    		<td>Prix Unitaire</td>
    		<td>Prix total article</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><input type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['qteProduit'][$i])."\"/></td>";
    				echo "<td>".htmlspecialchars($_SESSION['panier']['prixProduit'][$i])."</td>";
    				echo "<td>".htmlspecialchars($_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i])."</td>";
    				echo "<td><a href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['libelleProduit'][$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>
    </body>
    </html>
    J'ai pas testé mais devrait pas y avoir de soucis, tu peux prendre le code en l'état directement.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Un grand Merci à RideKick ça fonctionne nickel chrome.

    Reste à adapter à ma version, mais cela devrait pas être trop compliqué pour moi vue que j'ai déjà réussit.

    Encore un grand merci à l'auteur.

    Un membre très content

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour, une fois le panier opérationel, on en fait quoi ?

    Il y a t'il une suite au scipt pour passer une commande par exemple.

    C'est un super script, mais là s'arrêter en si bon chemin, je trouve ça domage.

    J'ai réussit à faire suivre les valeurs du panier dans une page que j'ai nommé commande, mais là, je suis pas plus avancé.

    L'idéal serait de reporter les valeurs du panier dans un formulaire pour passer la commande par la suite. Je bosse dessus, mais j'arrive à afficher le montantGlobal, mais il passe passe pas dans l'envoi lors de la validation de mon formulaire.

    Bref, c'est pas simple tout ça. Si quelqu'un avait un exemple de la mise en pratique du panier cela serait cool.

    Marc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tutoriel sur la création d'un panier en PHP
    Par RideKick dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 53
    Dernier message: 10/03/2020, 08h59
  2. Tutoriel sur la création d'un panier avec ZF / Mysql
    Par mgpdm dans le forum Zend Framework
    Réponses: 1
    Dernier message: 14/02/2017, 14h48
  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
  5. A propos du tutoriel sur le morpion
    Par FabaCoeur dans le forum SDL
    Réponses: 8
    Dernier message: 15/04/2007, 16h37

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