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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Ajout panier écrase le précédent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Ajout panier écrase le précédent

n°1118399
Onesque
Derelict Otter
Posté le 13-06-2005 à 15:19:28  profilanswer
 

Bonjour,  
 
c'est probablement pas grand chose, mais je cogite là-dessus depuis un moment et je parviens plus à y voir clair, donc je demande un peu d'aide :D
 
J'essaie de construire un panier virtuel pour un site de vente en ligne via les sessions.
 
Sur la fiche de chaque article, on a un lien "ajouter au panier", qui appelle la page ajout.php en passant l'id de l'article et la quantité par l'URL.
 
J'ai donc un lien du type "...ajout.php?id=xxxx&qtte=x"
 
Pas de problème pour récupérer ses variables et les inclure dans le panier. Le problème est que si je tente d'ajouter un second article, il écrase le premier.
 
 
Code de la page ajout.php :  
 

Code :
  1. <?php
  2. session_start();
  3. $id = $_GET['id'];
  4. $qtte = $_GET['qtte'];
  5.    
  6. if(session_is_registered('panier') && is_array($panier))
  7.      {
  8.         //première méthode testée :  
  9.         array_push($panier,array("id" => $_GET['id'],"qtte" => $_GET['qtte']));
  10. header("Location: panier.php" );
  11.    
  12. //seconde méthode testée, trouvée ici ds un topic sur panier  
  13.                 $ajout = array(); // Chaque element du tableau est lui-même un tableau
  14.  $ajout['id'] =  $id;
  15.  $ajout['qtte'] = $qtte;
  16.  $_SESSION['panier'][] = $ajout;
  17.  }
  18. else
  19. {
  20. session_register('panier');
  21.          // on le crée...
  22.          $panier = array ();
  23.          // on rajoute le produit et la quantité...
  24.          array_push($panier,array("id" => $_GET['id'],"qtte" => $_GET['qtte']));
  25.          // le panier a été crée...
  26.          header("Location: panier.php" );
  27.          // on renvoie vers le panier, qui liste les produits sélectionnés...
  28.         }
  29. $_SESSION['panier'] = $panier;
  30. $nbprod = count($panier);
  31. $_SESSION['nbprod'] = $nbprod;
  32. ?>


 
 
Sur ma page panier.php (vers laquelle renvoie ajout.php), je fais afficher le nombre d'items contenu ds le panier : toujours égal à 1.
Si je fais un print_r sur le $panier, j'obtiens :  

Code :
  1. Array ( [0] => Array ( [id] => 33 [qtte] => 1 ) )


 
 
Voyez-vous svp ce qui pourrait déconner?

mood
Publicité
Posté le 13-06-2005 à 15:19:28  profilanswer
 

n°1118425
flo850
moi je
Posté le 13-06-2005 à 15:30:37  profilanswer
 

essaye :  
$panier = array_push($panier,array(....));


---------------

n°1118437
ratibus
Posté le 13-06-2005 à 15:34:57  profilanswer
 

Beaucoup plus rapide ;)
 

Code :
  1. <?php
  2. session_start();
  3. $id = $_GET['id'];
  4. $qtte = $_GET['qtte'];
  5. if( isset($_SESSION['panier'][$id]) ) {
  6.    $_SESSION['panier'][$id] += $qtte;
  7. } else {
  8.    $_SESSION['panier'][$id] = $qtte;
  9. }
  10. $_SESSION['nbprod'] = count($_SESSION['panier']);
  11. header('Location: panier.php');
  12. exit;
  13. ?>


 
PS : les fonctions session_is_registered, session_register ne sont plus utilisées depuis longtemps ;)

n°1118440
Onesque
Derelict Otter
Posté le 13-06-2005 à 15:35:37  profilanswer
 

Je viens de tester avec cette ligne de code :  
 
 

Code :
  1. $panier = array_push($panier,array("id" => $id,"qtte" => $qtte));


 
Ca écrase toujours l'ancienne entrée et le panier n'indique qu'un élément.

n°1118452
Onesque
Derelict Otter
Posté le 13-06-2005 à 15:42:09  profilanswer
 

Gasp! Ratibus, ca tourne avec ton code :jap: et c'est effectivement un peu plus simple. Je retourne de suite l'étudier histoire de piger les subtilités :D
 
Niveau syntaxe, je ne comprends pas le += de la ligne 7 par contre?
 
 
 

n°1118467
Onesque
Derelict Otter
Posté le 13-06-2005 à 15:49:13  profilanswer
 

oki pour += : http://fr.php.net/manual/fr/langua [...] gnment.php
 
Ben me reste plus qu'à dire merci et à retourner me torturer l'esprit! :D
 
Donc merci à vs deux :jap:

n°1118469
ratibus
Posté le 13-06-2005 à 15:50:21  profilanswer
 

Code :
  1. $_SESSION['panier'][$id] += $qtte;


C'est pareil que ça :

Code :
  1. $_SESSION['panier'][$id] = $_SESSION['panier'][$id] + $qtte;


 
C'est plus simple à écrire ;)
 
Liste des opérateurs : http://www.php.net/manual/en/language.operators.php

n°1118482
Onesque
Derelict Otter
Posté le 13-06-2005 à 15:56:46  profilanswer
 

C'est là que je me dis que la route est encore longue, très longue... :D

n°1118484
ratibus
Posté le 13-06-2005 à 15:57:41  profilanswer
 

Bonne route à toi :)

n°1118552
Onesque
Derelict Otter
Posté le 13-06-2005 à 16:54:03  profilanswer
 

bon en fait, ca ne fonctionne peut-être pas si bien que ça, ou je suis passé à côté d'un truc - ce qui est fort possible...
 
Maintenant, j'ai un array sous la forme  
 

Code :
  1. array : [id]=> qtte


 
alors qu'avant j'avais un array sous la forme
 

Code :
  1. array : 0 => [id] => [qtte]


 
 
Du coup je bloque pour faire une boucle qui parcourt le contenu de mon panier. Alors que dans m première version, certes je n'avais qu'un produit dans mon panier, mais je pouvais l'appeler en faisant un :  
 

Code :
  1. for($i=0;$i<$nbprod;$i++)
  2. {
  3. $id = $_SESSION['panier'][$i]['id'];
  4. $qtte = $_SESSION['panier'][$i]['qtte'];
  5. }


 
puis faire afficher l'id et la qtte respective de chaque article.  
 
Je suppose qu'il y a une modification à faire ds l'ajout, mais je vois pas trop ou.
 
Sinon merci pour l'incrémentation des quantités, j'aurais jamais réussi à faire ca de facon si concise!

mood
Publicité
Posté le 13-06-2005 à 16:54:03  profilanswer
 

n°1118558
flo850
moi je
Posté le 13-06-2005 à 16:58:31  profilanswer
 

Code :
  1. foreach($_SESSION['panier'] as $id=> $qtt ){
  2. echo " mon panier contient $qtt examplaires de l'article $id<br>";
  3. }


 
foreach( $tab as $cle => $valeur ) est tres pratique


Message édité par flo850 le 13-06-2005 à 16:59:08

---------------

n°1118585
Onesque
Derelict Otter
Posté le 13-06-2005 à 17:10:12  profilanswer
 

Ouais effectivement! :jap:  
 
En fait j'étais parti sur un for parce qu'au moins, cette fonction là, je pensais réussir à l'utiliser proprement. Finalement, c'était pas une bonne idée on dirait!
 
J'ai le cerveau en ébullition mais au moins j'ai le sentiment de progresser. Me vient des envies de siffloter des "1km à pied, ca use, ca use..."
 
Merci donc. Maintenant je vais m'atteler à la suppression et à la modif de qtté. Normalement, j'ai toutes les clés en main pour réussir maintenant :D

n°1118598
flo850
moi je
Posté le 13-06-2005 à 17:15:25  profilanswer
 

bonne continuation  
 
regarde du cote de unset($_SESSION['panier']['id']) pour supprimer un element et du cote de -= pour en dimuner la quantité


---------------

n°1118600
Onesque
Derelict Otter
Posté le 13-06-2005 à 17:16:56  profilanswer
 

thanx :)

n°1118629
Onesque
Derelict Otter
Posté le 13-06-2005 à 17:37:40  profilanswer
 

Le unset, c'est de la bombe :D !!! Je m'étais engagé du côté d'un array-splice, je regrette pas de l'avoir abandonné!
 
Bon, plus de batterie et marre de l'odeur du graillon du Mac dal, alors je vais aller continuer ca @home. Vu le nombre de sujetsque j'ai vu sur les paniers, celui-ci devrait rendre service à pas mal de monde, du moins j'espère!

n°1118655
ratibus
Posté le 13-06-2005 à 18:16:39  profilanswer
 

Onesque a écrit :

Ouais effectivement! :jap:  
 
En fait j'étais parti sur un for parce qu'au moins, cette fonction là, je pensais réussir à l'utiliser proprement. Finalement, c'était pas une bonne idée on dirait!
 
J'ai le cerveau en ébullition mais au moins j'ai le sentiment de progresser. Me vient des envies de siffloter des "1km à pied, ca use, ca use..."
 
Merci donc. Maintenant je vais m'atteler à la suppression et à la modif de qtté. Normalement, j'ai toutes les clés en main pour réussir maintenant :D

Pour la modif des quantités avec mon code c'est géré ;)

n°1120894
Onesque
Derelict Otter
Posté le 15-06-2005 à 15:19:43  profilanswer
 

Yep ;)
 
Mais en fait pour le moment, je vais pas bosser sur les quantités, les produits proposés à la vente seraient uniques à chaque fois en fait :D Par contre, je tiens à me laisser la possibilité d'inclure des modifs de qtté par la suite.
 
Sinon à part ça, j'ai encore une ou deux questions qui me taraudent l'esprit:
 
Mon site dispose donc d'un catalogue, ds lequel les internautes peuvent choisir des articles et les inclure dans leur panier. Ensuite, ils peuvent, en se rendant sur la page  panier.php, avoir un bilan de leur visite : liste des articles sélectionnés et prix global.
 
Là, ils peuvent choisir d'effectuer leur commande. Pour cela, il faut qu'ils sidentifient (via un login/mot de passe) ou qu'ils se créent un compte. Et est-ce qu'il ne rique pas d'y avoir des problèmes si je bosse sur deux types de session à la fois?
 
Je me demandais s'il valait mieux forcer l'authentification dès le début de l'utilisation du panier, ou attendre que le visiteur ait envie de valider une commande?
 
Seconde question : j'aimerais qu'une fois une commande validée, les articles correspondants ne soient plus visibles sur le site (éviter que plusieurs personnes commandent la même chose) mais qu'ils restent dans la base de données.
 
Avant de me lancer là-dedans, j'aimerais être sûr que ma façon de procéder est bonne. Je compte créer un champ ds la table qui contient les articles, avec deux valeurs possibles : "dispo" et "commandé". A la validation d'une commande, je crée une requête qui passe la valeur de dispo à commandé, et dans mon catalogue, je ne fais afficher que ceux qui ont la valeur dispo.
 
Ca me parait logique, mais j'aimerais qd meme en avoir confirmation avant de me lancer dans des opérations de codage fastidieuses ;)
 
Merci :hello:


Message édité par Onesque le 15-06-2005 à 15:20:34
n°1120903
flo850
moi je
Posté le 15-06-2005 à 15:27:50  profilanswer
 

tu n'as qu'un seul tableua session  
 
perso j'utilise
$_SESSION['panier'] qui est un array et qui contient le panier
$_SESSION['perso'] qui contient le login et ls infos qui vont avec  
 
pour le champ dans la BDD ca me semble une bonne idée


---------------

n°1120957
Onesque
Derelict Otter
Posté le 15-06-2005 à 15:47:47  profilanswer
 

oki, thanx.
 
Pour l'identification par contre, et la sécurité, il vaut mieux forcer l'uilisateur à s'identifier pour utiliser le panier ou attendre la validation d'une commande?

n°1120998
flo850
moi je
Posté le 15-06-2005 à 16:06:54  profilanswer
 

la c'est toi qui voit
 
il te suffit juste de faore un test pour voir si $_SESSION['perso'] existe avant de valider la commander


---------------

n°1121071
Onesque
Derelict Otter
Posté le 15-06-2005 à 16:56:52  profilanswer
 

ok
 
je placerai l'identification juste avant la commande alors je pense, afin de pas décourager les internautes qui voudraient juste faire une estimation.

mood
Publicité
Posté le   profilanswer
 


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

  [PHP] Ajout panier écrase le précédent

 

Sujets relatifs
Cours de base PHP et MYSQLMySQL ou Php ?
[PHP] Warning: copy() failed to open stream: Permission denied[PHP - MySQL] Insertion nouvel item ds menu déroulant
[ Réglé] Champ select et PHPProgrammation site PHP
[PHP] Tester si une valeur existe dans un tableau [RESOLU]conversion de PDF en JPEG en PHP
CGI avec Perl ou PHP[PHP] Aide pour tri de tableau multi-dimensionnel
Plus de sujets relatifs à : [PHP] Ajout panier écrase le précédent


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