Problème avec un caddie (ajouter un article déjà dedans) [Résolu]

Problème avec un caddie (ajouter un article déjà dedans) [Résolu] - PHP - Programmation

Marsh Posté le 08-05-2005 à 21:21:32    

Bonjour à tous! Je me bats avec le caddie d'un site de commerce.
Voici à quoi le caddie ressemble une fois remplit:
 
http://projetcap.free.fr/screens/1.jpg
 
Le problème que j'ai est que lorsque je choisis de rajouter un article qui est déjà dans ma liste de caddie, c'est pas la bonne quantité qui s'incrémente. C'est la quantité d'un autre objet qui s'incrémente.
J'ai remarqué que çà marche de la façon suivante:
 
/* C'est un classement par ordre alphabétique */
* je mets l'article 'B' dans le caddie.
Si je choisis de remettre l'article 'B', l'article s'incrémente sans problème.
 
* je mets l'article 'A' dans le caddie. Et vu que les articles se classent dans l'ordre alphabétique, l'article 'A' prend la première place (la place de 'B'), et l'article 'B' prend la seconde place dans le caddie.
 
Jusque là ok. Mais si je choisis à nouveau de mettre l'article 'B' dans le caddie, ce n'est pas ce dernier qui s'incrémente, mais l'article 'A'. Il incrémente l'article qui est en haut de la liste des produits comme l'article 'B' l'était tout à l'heure...
 
Je me suis donc dit, que je vais classer les articles par ordre de l'heure où ils ont été rajoutés, du plus anciens au plus récent. Du coup, le caddie incrémentera les bons articles. Mais je n'arrive pas à classer par date correctement.
$sql = "SELECT nom, prix FROM produits where id IN ($chaine) order By date('H:i:s')";
 
Bon le mieux c'est pas de corriger de cette manière, mais je ne trouve pas la vrai erreur.
 
Bon voici les codes sources... si qq1 a une idée...
 

Code :
  1. /* AjouterAuPanier.php */
  2. <?php
  3. session_start();
  4. include("../admin/sessions.inc.php" );
  5. $paramID = $_GET['id'];
  6. if (isset($_SESSION['tab']))
  7. {
  8.   $test = false;
  9.   for($i=0; $i<count($_SESSION['tab']); $i++ )
  10.   {
  11.     if (($_SESSION['tab'][$i][0]) == $paramID)
  12.     {
  13.       $test = true;
  14.       $_SESSION['tab'][$i][1]++;
  15.     }
  16.   }
  17.   if (!$test)
  18.   {
  19.     $_SESSION['tab'][] = array($paramID,1);
  20.   }
  21. }
  22. else
  23. {
  24.   $_SESSION['tab'] = array(array($paramID,1));
  25. }
  26. header("Location: panier.php" );
  27. ?>


 
 
 
 

Code :
  1. /* panier.php */
  2. <?php
  3. session_start();
  4. include("../admin/sessions.inc.php" );
  5. if (isset($_GET['supp'])) {
  6.    require ( 'conf/suppLignePanier.inc.php' );
  7.   }
  8. if (isset($_GET['suppAll'])) {
  9.    require ( 'conf/suppPanier.inc.php' );
  10.   }
  11. ?>
  12. /*************/
  13. etc... code inutile...
  14. /*************/
  15. <div id="content">
  16.   <div class="story"> 
  17.     <h1>Votre panier</h1><br />
  18.     <p class="hometext"> 
  19.     <?
  20.     if (count($_SESSION['tab']) > 0)
  21.     {
  22.       ?>
  23.       <table class="tabPanier">
  24.       <tr><td class="tdProd">Produit</td><td class="tdQte">Quantit&eacute;</td><td class="tdPrix">Prix</td><td></td></tr>
  25.       <tr><td class="tdProd">&nbsp;</td><td class="tdQte"></td><td class="tdPrix"></td><td></td></tr>
  26.       <?
  27.       $chaine = '';
  28.    
  29.       for($i=0; $i<count($_SESSION['tab']); $i++ )
  30.       {
  31.         $chaine = $chaine.$_SESSION['tab'][$i][0].",";
  32.       }
  33.    
  34.       $chaine = substr($chaine,0,(strlen($chaine)-1));
  35.    
  36.   require '../admin/config.inc.php';
  37.       $connect=mysql_connect("$mysqlserveur" , "$mysqlloggin" , "$mysqlpassword" ) or die("connection impossible" );
  38.       mysql_select_db("$mysqlmaindb",$connect);
  39.   //$sql = "SELECT nom, prix FROM produits where id IN ($chaine) order By date('H:i:s')";
  40.   $sql = "SELECT nom, prix FROM produits where id IN ($chaine) order By nom";
  41.     $result = mysql_query($sql);
  42.     $i = 0;
  43.     $total = 0;
  44.     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  45.      $prix = $row['prix']*$_SESSION['tab'][$i][1];
  46.          echo( "<tr><td class=\"tdProd\"><a href=\"produits.php?id=".$_SESSION['tab'][$i][0]."\">".$row['nom']."</a></td><td class=\"tdQte\">".$_SESSION['tab'][$i][1]."</td><td class=\"tdPrix\">".$prix." &euro;</td><td><a href=\"panier.php?supp=$i\">Supp</a></td></tr>" );
  47.         $i++;
  48.         $total = $total+$prix;
  49.         $prix = 0;
  50.    } 
  51.     ?>
  52.     </table>
  53.     <br /><br />
  54.     <p>Prix total de votre panier : <strong><? echo($total); ?>&euro;</strong></p>
  55.     <br /><br />
  56.     <p><a href="panier.php?suppAll"><strong>Vider votre panier</strong></a> - <a href="commande.php"><strong>Commander</strong></a></p>
  57.     <?
  58.     }
  59.     else
  60.     {
  61.     echo( "<p>Votre panier est vide</p>" );
  62.     }
  63.     ?>
  64.     </p>
  65.   </div>
  66. </div>
  67. <!-- Fermeture du cadre -->


Message édité par denis_de_strasbourg le 17-05-2005 à 11:41:47
Reply

Marsh Posté le 08-05-2005 à 21:21:32   

Reply

Marsh Posté le 08-05-2005 à 21:53:27    

A mon avi c'est ta base de donnée qui est mal conçue... outre a un php aussi clair que de l'eau du gange (tm).
 
Juste... rassure moi ... c'est pas a des fins commerciaux ton truc j'espere?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-05-2005 à 22:43:48    

Non, c'est pour un projet pour les cours... (et je n'ai jamais fait de php en cours donc j'ai chopé des idées par si et par là...).
 
Mais pourquoi tu me demandes si c'est à but commercial? Si jamais ce serait le cas, çà ferait quoi?
 
PS: je ne vendrais pas un truc où j'ai cherché des idées à droite et à gauche...  :non:

Reply

Marsh Posté le 08-05-2005 à 22:46:16    

Ca ferais qu'il faudrait que tu me passes l'adresse :D , parceque si tout le code est ecrit comme ça ca sera pas trop trop dur d'entrer en douce et de s'acheter pas mal de trucs pas cher du tout :D.
 
Cependant mon idée reste qu'a mon avi c'est ta base de donnée qui est mal foutue .. et donc que c'est pas le top de recuperer tout ca comme ça..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-05-2005 à 23:17:26    

Citation :

parceque si tout le code est ecrit comme ça ca sera pas trop trop dur d'entrer en douce et de s'acheter pas mal de trucs pas cher du tout :D.


 
Pourquoi? Il y a quoi de travers? -> Je débute!!!  :??:

Reply

Marsh Posté le 08-05-2005 à 23:30:52    

Bon pour un debutant il est pas mal franchement, il y a quelques trucs maladroits (genre on prefere separer l'html du php (=> templates,parseur xml,...), on fait quelques magouilles sur les sessions pour mieux les securiser, on met plus de commentaires,..) et quelques trucs qui risquent d'exploser (genre le mysql_fetch_array qui risque de planter s'il n'y a aucun resultat..)
 
Mais a part ça il est bien mieux que la pluspart des sites de debutants qu'on voit. Parcontre #3, remodelise ta base de donnée, je suis sur que tu peux regler ton probleme en mettant mieux les tables


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-05-2005 à 23:44:33    

Attention, j'ai dit que j'ai chopé des idées, où plutôt des bout de codes par ci et par là...
Donc je ne mérite pas de félicitation.
Le code AjouterUnProduit n'est pas du tout de moi.  :sweat:  
Mais bon je comprends ce qu'il y a dans le code (encore heureux, si je demande de l'aide).
Mais je ne vois pas ce que je dois changer dans ma base de données...

Reply

Marsh Posté le 08-05-2005 à 23:53:00    

Voici ma table produits:
 
CREATE TABLE `produits` (
  `ID` tinyint(4) NOT NULL auto_increment,
  `prix` decimal(10,2) NOT NULL default '0.00',
  `nom` varchar(255) NOT NULL default '',
  `description` text NOT NULL,
  `caracteristique` text NOT NULL,
  `cat` int(4) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
)

Reply

Marsh Posté le 09-05-2005 à 00:02:05    

Ok non en fait ca a l'air d'aller alors ça doit plutot etre dans le php... corrige moi si je me trompe (ton code me flingue un peu les yeux), quand qqn achete un produit, tu créé une variable de session avec l'id du produit, ou si elle existe , tu l'incremente?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-05-2005 à 02:31:48    

essaye de var_dump($paramID) quand tu ajoute un truc au caddie, jpense que c'est $paramID qui a la mauvaise valeur


---------------
Member of the Yak Shaving Staff | Feedback | www.tsunanet.net
Reply

Marsh Posté le 09-05-2005 à 02:31:48   

Reply

Marsh Posté le 09-05-2005 à 18:39:01    

Cà parait correct.
Si je mets un var_dump($paramID) à AjouterUnArticle.php et si l'ID de l'article est 22 celà me renvoit:
string(2) "22"

Reply

Marsh Posté le 09-05-2005 à 19:02:26    

Je viens de faire un var_dump($_SESSION['tab']);
Et je vois que l'erreur est présente:
 
Quand je rajoute un article (id=22) position 1 du caddie (nom=lampe) celà me retourne çà:
array(1) { [0]=>  array(2) { [0]=>  string(2) "22" [1]=>  int(1) } }
 
Je rajoute un 2ème article (id=24) et cette article prend la position 1 car nom=bougie (et vu que çà se classe par ordre alphabétique... donc çà me renvoit çà:
array(2) { [0]=>  array(2) { [0]=>  string(2) "22" [1]=>  int(1) } [1]=>  array(2) { [0]=>  string(2) "24" [1]=>  int(1) } }
 
quand je rajoute à nouveau l'article avec id=22:
array(2) { [0]=>  array(2) { [0]=>  string(2) "22" [1]=>  int(2) } [1]=>  array(2) { [0]=>  string(2) "24" [1]=>  int(1) } }
 
Voilà il a incrémenté le array(2) au lieu du array(1)...
Quand je mets 2 fois l'article id=22:
 
Je mets une première fois dans le caddie:
array(1) { [0]=>  array(2) { [0]=>  string(2) "22" [1]=>  int(1) } }
 
Puis une 2ème fois:
array(1) { [0]=>  array(2) { [0]=>  string(2) "22" [1]=>  int(2) } }
 
Quelqu'un peut m'aider à corriger ce problème?

Reply

Marsh Posté le 09-05-2005 à 19:47:40    

esox_ch a écrit :

A mon avi c'est ta base de donnée qui est mal conçue... outre a un php aussi clair que de l'eau du gange (tm).
 
Juste... rassure moi ... c'est pas a des fins commerciaux ton truc j'espere?


 
Le (tm) c'est pour moi.  :o  
 
 


---------------
Expert en expertises
Reply

Marsh Posté le 09-05-2005 à 20:29:42    

C'est bien pour ça que je l'ai spécifié :D


Message édité par esox_ch le 09-05-2005 à 20:29:59

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-05-2005 à 20:36:41    

PS: pour le code, j'y peux rien, c'est le forum  :kaola:  étant donné que la taille est limité en largeur...
 
Mais sinon, personne n'a une solurtion pour moi?  :cry:

Reply

Marsh Posté le 10-05-2005 à 00:30:29    

denis_de_strasbourg a écrit :

PS: pour le code, j'y peux rien, c'est le forum  :kaola:  étant donné que la taille est limité en largeur...
 
Mais sinon, personne n'a une solurtion pour moi?  :cry:


 
C'est pour ça qu'en general quand on code on s'arrenge pour avoir au maximum 80 caracteres sur la meme ligne ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 14-05-2005 à 15:36:40    

up
J'ai toujours pas réussi à régler ce problème...  :cry:

Reply

Marsh Posté le 14-05-2005 à 15:58:14    

Bon ben là je viens d'avancer!!!
Il ne me mélange plus les quantitées, çà marche nikel, sauf que pour l'instant il ne m'affiche plus la quantitée... :??:  
 
Pour que çelà marche j'ai réjouter dans le code du panier ces 2 lignes:
 
$_SESSION['tab'][$paramID][0] == $paramID;
$_SESSION['tab'][$paramID][1] == $paramQ;
 
$paramID correspondant à l'ID du produit et $paramQ à la quantitée sélectionné.

Reply

Marsh Posté le 14-05-2005 à 16:16:33    

:cry:  :cry:  :cry:  :cry:  
Finalement çà marche pas...  :cry:
 
Mince, on peut pas supprimer un de ces messages... je viens de m'appercevoir que les 2 lignes que j'ai rajouté tout à l'heure c'était des test d'égalités (je me suis même pas rendu compte que j'avais mis 2 =  :pfff:  )


Message édité par denis_de_strasbourg le 14-05-2005 à 17:35:05
Reply

Marsh Posté le 14-05-2005 à 22:06:39    

C'est bon problème réglé!  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed