Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Besoin d'aide pour programmer un panier virtuel


Messages recommandés

Invité Wormageddon
Posté(e)

Bonjour à tous,

 

Voilou mon problème: pour mon stage de fin d'année, je dois faire un panier virtuel pour une entreprise.

J'ai été voir des exemples sur différents sites et forums qui en parlaient.

J'ai même été jusqu'à faire un copier /coller d'un code de panier :S

Mais y'a rien qui fonctionne.

 

Mes problèmes sont principalement au niveau de l'ajout d'articles au panier: le panier apparait vide. Il n'y a que les deux boutons "augmenter la quantité du même article" et "supprimer l'article" qui apparaissent.

Par contre, le bouton "augmenter la quantité d'article" me créait un nouvel article au lieu de l'incrémenter (depuis, sans toucher à rien dans le programme, cette fonction n'agit plu du tout :'S) ; et le bouton "Supprimer" n'a aucun effet non plu.

Aussi, les variables à afficher (le nom de l'article, son prix et sa quantité) restent à leurs valeurs d'origines.

 

D'après ça, vous auriez une idée pour me dépanner, sivouplé? ^^

Vous voulez peut-être voir les codes que j'ai tapé?

 

Merci d'avance pour vos réponses.

Posté(e)
Vous voulez peut-être voir les codes que j'ai tapé?
"copié-collé", tu veux dire ?

Ca pourrait servir, oui...

 

Cela dit, je pourrais a priori dire que tu devrais peut-être commencer par faire une analyse complète de ce que tu veux faire, lister TOUTES les fonctionnalités, définir tous les éléments qui apparaîtront dans ton application (comment ils s'appellent, quelle fonction ils remplissent, quel comportement ils ont, ...) et seulement à ce moment-là commencer à coder (et pas à copier-coller sans réfléchir, et peut-être même sans comprendre !!) chacune des fonctionnalités et chacun des "comportements"...

La base, quoi....

Invité Wormageddon
Posté(e)

Merci d'avoir répondu aussi vite ^^

Ne t'inquiète pas, j'ai d'abord fait mon propre programme avant de penser à en copier un.

J'avais aussi pensé à faire la liste des fonctions à utiliser avant de commencer à les créer.

Je suis pas aussi boulet que ce que tu as l'air de croire (du moins, je l'espère ^^).

 

Voilou mes deux pages de code:

Premièrement, la page de fonctions.

<?php
 include($_SERVER["DOCUMENT_ROOT"].'/httpdocs/Catalogue/ConnexionBDD.php');

 function CreationPanier()
 {
   $retour= false;

   if(isset($_SESSION['panier']))   // On vérifie que le Panier existe.
     $retour= true;
   else   // Sinon, on en fait un.
   {
     $_SESSION['panier']= array();
     $_SESSION['panier']['nom']= array();
     $_SESSION['panier']['quantiteArticle']= array();
     $_SESSION['panier']['reference']= array();
     $_SESSION['panier']['photo']= array();
     $_SESSION['panier']['prix']= array();
     $retour= true;
   }
   return $retour;
 }


 function AjouterArticle($Designation)
 {
   if(CreationPanier())   // On vérifie que le Panier est créé avant de continuer.
   {
     $indice= array_push($Designation, $_SESSION['panier']['nom']);
     if($indice != false)   // On regarde si l'objet est déjà présent dans le Panier.
       $_SESSION['panier']['quantiteArticle'][$indice] ++;   // Si oui, on l'incrémente.
     else   // S'il n'y en a pas, on le créé (ajout du premier article de cette sorte).
     {
       array_push($_SESSION['panier']['nom'], $Designation);
       /* array_push($_SESSION['panier']['quantiteArticle'], $quantiteArticle);
       array_push($_SESSION['panier']['reference'], $reference);
       array_push($_SESSION['panier']['photo'], $photoSlash);
       array_push($_SESSION['panier']['prix'], $prix); */
     }
   }
   else   // Si ça marche pas (Panier introuvable), on demande à prévenir l'Admin.
     echo "Un problème est survenu.\nVeuillez contacter l'administrateur du site.";
 }


 function SupprimerArticle($Designation)
 {
   if(CreationPanier())   // On vérifie que le Panier est créé avant de continuer.
   {
     $tmp= array();
     $tmp['nom']= array();
     $tmp['quantiteArticle']= array();
     $tmp['reference']= array();
     $tmp['photo']= array();
     $tmp['prix']= array();
     for($indice= 0; $indice< count($_SESSION['panier']['nom']); $indice ++)   // On créé un Panier-tampon (Panier sans les éléments à supprimer).
     {
       if($_SESSION['panier']['nom'][$indice] != $Designation)   // On remplit le Panier-tampon avec les éléments supprimables (ceux ajoutés par le client).
       {
         array_push($tmp['nom'],$_SESSION['panier']['nom'][$indice]);
         array_push($tmp['quantiteArticle'],$_SESSION['panier']['quantiteArticle'][$indice]);
         array_push($tmp['reference'], $_SESSION['panier']['reference'][$indice]);
         array_push($tmp['photo'], $_SESSION['panier']['photo'][$indice]);
         array_push($tmp['prix'],$_SESSION['panier']['prix'][$indice]);
       }
     }
     $_SESSION['panier']= $tmp;   // On donne les données du Panier-tampon au Panier (a pour effet de supprimer les éléments à enlever).
     unset($tmp);
   }
   else   // Si ça marche pas (Panier introuvable), on demande à prévenir l'Admin.
     echo "Un problème est survenu.\nVeuillez contacter l'administrateur du site.";
 }


 function ModifierQuantiteArticle()   // $Designation, $quantiteArticle, $quantite)
 {
   if(CreationPanier())   // On vérifie que le Panier est créé avant de continuer.
   {
     if($quantiteArticle> 0)  // Si la quantité de l'article est supérieure à zéro, on modifie.
     {
       if($quantiteArticle <= $quantite)   // On regarde si on a assez de stocks.
       {
         $indice= array_search($Designation, $_SESSION['panier']['nom']);
         if($indice != false)
           $_SESSION['panier']['quantiteArticle'][$indice]= $quantiteArticle;
       }
       else
         echo "<script>alert(\"Impossible d'acheter plus que le stock disponible!\")</script>";
     }
     else   // Sinon, ça équivaut à dire que l'article est supprimé.
       echo "<script>alert(\"L'article a été supprimé\")</script>";
       SupprimerArticle($Designation);
   }
   else   // Si ça marche pas (Panier introuvable), on demande à prévenir l'Admin.
     echo "Un problème est survenu.\nVeuillez contacter l'administrateur du site.";
 }


 function MontantGlobal()   // On calcule le montant total du Panier.
 {
   $total= 0;
   for($indice= 0; $indice< count($_SESSION['panier']['nom']); $indice ++)
     $total += $quantiteArticle *$prix;
   echo "$total";
 }


 function NombreDArticles()   // Calcul du nombre d'articles présents dans le Panier (ajoute les quantités de tous les articles présents).
 {
   $nbArticles= 0;
   for($indice= 0; $indice< count($_SESSION['panier']['quantiteArticle']); $indice ++)
     $nbArticles += $_SESSION['panier']['quantiteArticle'][$indice];
   if($nbArticles == 0)
     $nbArticles= "Aucun";   // Embellit la présentation dans le cas où il n'y a pas d'article dans le panier.
   echo "$nbArticles";
 }


 function ViderPanier()
 {
   $_SESSION['panier']= array();   // La session (donc le panier) est alors vidée.
 }
?>

 

Puis le panier en lui-même:

<?php
 session_start();
 include_once("FonctionsDuPanier.php");
 include ($_SERVER["DOCUMENT_ROOT"].'/httpdocs/Catalogue/ConnexionBDD.php');

 // On initialise les variables à la valeur par défaut.
 $nbArticles= 0;
 $quantiteArticle= 0;
 $prix= 0;
 $indice= 0;
 $Designation= "...";
 $total= 0;

 if(isset($_GET['action']))
 {
   $erreur= false;
   if(in_array($_GET['action'], array('Ajouter', 'Suppression', 'Modifier', 'Acheter', 'Vider')))
     $action= $_GET['action'];
   else
     $erreur= true;
   /* $n= preg_replace('#\v#', '', $_GET['n']);
   $ref= intval($_GET['ref']);
   $p= floatval($_GET['p']); */
 }
 else
   if(isset($_POST['action']))
   {
     unset($_GET);
     $erreur= false;
     if(in_array($_POST['action'], array('Ajouter', 'Suppression', 'Modifier', 'Acheter', 'Vider')))
       $action= $_POST['action'];
     else
       $erreur= true;
     /* $n= preg_replace('#\v#', '', $_POST['n']);
     $ref= intval($_GET['ref'];
     $p= floatval($_POST['p']); */
     $quantiteArticle= array();
     $indice= 0;
     /* foreach($_POST['quantiteArticle'] as $nbArticles)
       $quantiteArticle[$indice ++]= $nbArticles; */
   }
 if($erreur == false)
 {
   switch($action)
   {
     Case "Ajouter":
       AjouterArticle($Designation);
       break;
     Case "Suppression":
       SupprimerArticle($Designation);
       break;
     Case "Modifier":
          for($indice= 0; $indice< count($quantiteArticle); $indice ++)
         ModifierQuantiteArticle($Designation, $quantiteArticle, $quantite);   // $_SESSION['panier']['nom'][$indice], round($quantiteArticle[$indice]));
       break;
     Case "Acheter":
       {
         if($nbArticles != 0)
           echo "<a href=\"Facture_v2.php\"></a>";
         else
           echo "<script>alert(\"Votre panier est vide.\\nVous devez y ajouter au moins un article.\")</script>";
       }
       break;
     Case "Vider":
       ViderPanier();
       break;
     Default:
       break;
   }
 }
 echo '<? xml version= "1.0" encoding= "iso-8859-1" ?>';
?>

<!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 ::: Im@gin'Micro :::
   </title>
   <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

   <!-- CSS -->
   <link href="/httpdocs/css/home.css" rel="stylesheet" type="text/css">

   <!-- JAVASCRIPT -->
   <?php include ($_SERVER["DOCUMENT_ROOT"].'/httpdocs/Javascript/home.php');?>
 </head>
 <body BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0 onLoad="FP_preloadImgs(/*url*/'/httpdocs/images/button19.jpg', /*url*/'/httpdocs/images/button1A.jpg', /*url*/'/httpdocs/images/button1C.jpg', /*url*/'/httpdocs/images/button1D.jpg', /*url*/'/httpdocs/images/button1F.jpg', /*url*/'/httpdocs/images/button20.jpg', /*url*/'/httpdocs/images/button22.jpg', /*url*/'/httpdocs/images/button23.jpg', /*url*/'/httpdocs/images/buttonB.jpg', /*url*/'/httpdocs/images/buttonC.jpg')">
   <table width="815" border=0 align="center" CELLPADDING=0 CELLSPACING=0>
     <tr>
       <!-- TOP -->
       <td width="23" height="28">
         <img SRC="/httpdocs/images/login_01.gif" WIDTH=23 HEIGHT=30 ALT="">
       </td>
       <td width="771" background="/httpdocs/images/login_02.gif">
       </td>
       <td width="21">
         <img SRC="/httpdocs/images/login_03.gif" WIDTH=21 HEIGHT=30 ALT="">
       </td>
     </tr>
     <tr> 
       <!-- LEFT -->
       <td background="/httpdocs/images/login_04.gif">
       </td>

       <!-- MIDDLE -->
       <td valign="top">

       <!-- Bannière -->
       <p align="center">
         <object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" id="obj1" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" border="0" width="771" height="152">
           <param name="movie" value="/httpdocs/images/BANDACCUEIL.swf">
           <param name="quality" value="High">
           <embed src="/httpdocs/images/BANDACCUEIL.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj1" width="771" height="152">
         </object>
       </p>

       <!-- Menu du haut --> 
       <?php include ($_SERVER["DOCUMENT_ROOT"].'/httpdocs/MenuHaut.php');?>

       <!-- Centre -->
       <form method= "post" action= "Panier3.php">
         <table border= "0" width= "100px" id= "table4">
           <tr bgcolor= #2f9cdd height= "25px">
             <td width= "70px"><b><font color= #ffffff>Nom</font></b></td>
             <td width= "20px"><b><font color= #ffffff>Quantité</font></b></td>
             <td width= "20px"><b><font color= #ffffff>Prix Unitaire</font></b></td>
             <td width= "20px"><b><font color= #ffffff>Prix Total</font></b></td>
             <td width= "20px"><b><font color= #ffffff>Action</font></b></td>
             <td><input type="submit" name="action" value="Acheter"/></td>
             <td><input type="submit" name="action" value="Vider"/></td>
             <td><input type="submit" name="action" value="Modifier"/></td>
             </tr>

           <?php
             if(CreationPanier())
             {
               $nbArticles= count($_SESSION['panier']);
               if($nbArticles <= 0)   // Si le Panier est vide.
                 echo "<tr><td colspan=\"8\" height=\"100px\">Votre panier est vide</td></tr>";
               else
               {
                 for($indice= 0; $indice< $nbArticles; $indice ++)   // Affiche les articles présents dans le panier.
                 {
                   if($action != 'Acheter')   // Si on achète, on est censé connaître le montant total ...
                     $total= $prix *$quantiteArticle;   // Le montant de chaque sorte d'article.
                   echo "<tr><td>";   // $photoSlash[$indice], 
                   echo $Designation."</td>";
                   echo "<td align=\"center\"><input type=\"text\" name=\"quantiteArticle\" value=\"1\" size=\"2px\"></td>";
                   echo "<td align=\"center\">".$prix."</td>";
                   echo "<td align=\"center\">".$total." €</td>";
                   echo "<td align=\"center\"><a href=\"panier3.php?action=Supprimer\">x</a></td>";
                   echo "</tr>";
                 }
               }
               echo "<tr bgcolor= #2f9cdd height= \"25px\">";
               echo "<td width= \"10%\"><b><font color= #ffffff>";
               echo NombreDArticles($quantiteArticle);
               if(($nbArticles != 0) && ($nbArticles != 1))   // Embellit la présentation en fonction du nombre d'articles dans le panier.
                 echo " articles dans le panier";
               else
                 echo  " article dans le panier";
               echo "</b></font></td>";
               echo "<td colspan=\"2\"></td>";
               echo "<td width= \"10%\"><b><font color= #ffffff>";
               echo MontantGlobal();
               echo " €</b></font></td>";
               echo "<td></td>";
               echo "<td><input type=\"submit\" name=\"action\" value=\"Acheter\"/></td>";
               echo "<td><input type=\"submit\" name=\"action\" value=\"Vider\"/></td>";
               echo "<td colspan=\"4\">";
               echo "<input type=\"submit\"  name=\"action\" value=\"Modifier\"/>";
               /* echo "<input type=\"hidden\" name=\"action\" value=\"Modifier\"/>"; */
               echo "</td>";
               echo "</tr>";
             }
           ?>

         </table>
       </form>
     </tr>
   </table>
 </body>
</html>

 

Voilou, merci d'essayer de m'aider :P

Posté(e)

Désolé d'avoir mal interprété tes propos, j'ai croisé tellement d'applications contenant du copier-coller "brut de décoffrage" (parfois avec toujours le développeur, à côté, qui se plaint "j'comprends pas, ça marche pas... pourtant j'ai mis exactement tout pareil"... argh) que j'ai eu peur quand j'ai lu la séquence décrite : "lire les forums / tutos, copier-coller, marche pas" ! ;-)

 

J'ai regardé vite fait le code, il semblerait que ModifierQuantiteArticle ne prenne plus de paramètres, est-ce bien là la version "fonctionnelle" de tes fichiers ? (et la plus récente, tant qu'à faire)

Egalement, il semblerait que tu tentes d'utiliser toutes les variables comme si elles étaient globales, est-ce bien prudent ? Je conseille plutôt de les passer par référence - par opposition à "par valeur" - à tes fonctions, de telle sorte qu'on ne puisse pas jouer aux devinettes concernant les valeurs traitées dans ces fonctions...

 

Je regarderai le code un peu plus en détail quand j'aurai plus de temps...

Invité Wormageddon
Posté(e)

T'inquiète pas, je me suis pas vexé paske tu m'as traité de boulet, j'ai l'habitude :P

 

Je vais essayer de faire comme ce que tu viens de me conseiller.

D'après tes explications de mon travail, j'avoue que mon programme fait un peu "devinettes" ^^'

Je vais essayer d'arranger ça :P

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...