Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1136 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1075729
denis_de_s​trasbourg
Posté le 08-05-2005 à 21:21:32  profilanswer
 

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
mood
Publicité
Posté le 08-05-2005 à 21:21:32  profilanswer
 

n°1075766
esox_ch
Posté le 08-05-2005 à 21:53:27  profilanswer
 

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
n°1075793
denis_de_s​trasbourg
Posté le 08-05-2005 à 22:43:48  profilanswer
 

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:

n°1075794
esox_ch
Posté le 08-05-2005 à 22:46:16  profilanswer
 

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
n°1075801
denis_de_s​trasbourg
Posté le 08-05-2005 à 23:17:26  profilanswer
 

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!!!  :??:

n°1075807
esox_ch
Posté le 08-05-2005 à 23:30:52  profilanswer
 

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
n°1075812
denis_de_s​trasbourg
Posté le 08-05-2005 à 23:44:33  profilanswer
 

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...

n°1075813
denis_de_s​trasbourg
Posté le 08-05-2005 à 23:53:00  profilanswer
 

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`)
)

n°1075815
esox_ch
Posté le 09-05-2005 à 00:02:05  profilanswer
 

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
n°1075846
TsunaQuake
A good yak is a shaven yak
Posté le 09-05-2005 à 02:31:48  profilanswer
 

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
mood
Publicité
Posté le 09-05-2005 à 02:31:48  profilanswer
 

n°1076753
denis_de_s​trasbourg
Posté le 09-05-2005 à 18:39:01  profilanswer
 

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"

n°1076775
denis_de_s​trasbourg
Posté le 09-05-2005 à 19:02:26  profilanswer
 

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?

n°1076818
Hermes le ​Messager
Breton Quiétiste
Posté le 09-05-2005 à 19:47:40  profilanswer
 

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
n°1076864
esox_ch
Posté le 09-05-2005 à 20:29:42  profilanswer
 

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
n°1076869
denis_de_s​trasbourg
Posté le 09-05-2005 à 20:36:41  profilanswer
 

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:

n°1077173
esox_ch
Posté le 10-05-2005 à 00:30:29  profilanswer
 

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
n°1083229
denis_de_s​trasbourg
Posté le 14-05-2005 à 15:36:40  profilanswer
 

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

n°1083254
denis_de_s​trasbourg
Posté le 14-05-2005 à 15:58:14  profilanswer
 

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é.

n°1083274
denis_de_s​trasbourg
Posté le 14-05-2005 à 16:16:33  profilanswer
 

: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
n°1083596
denis_de_s​trasbourg
Posté le 14-05-2005 à 22:06:39  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[résolu] [PHP5] Redefinir une classeProbleme de blocage d'appli avec IDFTP
Problème de positionnement de graphiqueProbleme avec l'interface MouseListener
Problème avec requète sur 2 champs ...[RESOLU][C# .NET] Créer des objets Windows Form par le code source
[HTML] Obfuscation d'emails - éviter le spam [résolu][Jcreator] problème bizarre ....
Probleme de fichier jar avec jmfInterdir accès dossier, mais pas au fichiers [Résolu]
Plus de sujets relatifs à : Problème avec un caddie (ajouter un article déjà dedans) [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR