panier et session - PHP - Programmation
Marsh Posté le 22-01-2008 à 10:11:38
C'est pas facile de lire du code à travers une boule de crytal, tu sais...
Marsh Posté le 22-01-2008 à 10:14:10
oups, désolée.
page catalogue (index.php) :
Code :
|
et page panier (cart.php) :
Code :
|
Marsh Posté le 22-01-2008 à 10:18:52
ligne 2 du premier fichier :
if ($_SESSION['pannier'])
=> Y'a une faute d'orthographe, et à mon avis, ça va avoir des effets de bords pas bien sympa, genre écrasement de la session systématiquement.
Et je ne connais pas PHP, mais les Session_Start un peu partout, ça me fait un peu peur, pour moi ça redémarre la session à chaque fois...
Marsh Posté le 22-01-2008 à 10:24:32
bien vu pour la faute d'orthographe!!
je ne sais pas comment faire pour garder ma session en revenant sur ma page catalogue...
Marsh Posté le 22-01-2008 à 10:27:03
à mon avis, tu dois virer tous tes session_start() de tout ton code entier.
et ajouter ce test dans toutes les pages :
Code :
|
Et rien d'autre.
Je pense.
Après je ne connais pas assez PHP pour jurer que ça marche.
Marsh Posté le 22-01-2008 à 10:28:25
ok, j'essaye et te tiens au courant. merci
code testé et toujours pareil : juste le dernier article ajouter. pffff!!!
Marsh Posté le 22-01-2008 à 10:28:36
ah, et...
y'a une couille dans le potage quand même...
c'est quoi tes sessions "prix", "qte", et autres ?
c'est pas censés être des membres de ta session panier ?
logiquement, un panier, c'est un array de structs, et tu ajoutes un élément à chaque fois que t'ajoute un produit non... ?
Marsh Posté le 22-01-2008 à 10:33:11
en fait je veux ajouter toutes les données correspondant à l'article dans le panier. je ne sais pas trop comment faire pour touit enregister dans ma session...
Marsh Posté le 22-01-2008 à 10:34:28
En fait, un panier ça ressemble plutôt à ça :
Code :
|
Avec :
- EVE : Point d'entrée du panier
- EVP : Ligne du panier
- PRO : Produit
- TIE : Client
- ADR : Adresse
Bon, là c'est du C# et c'est spécifique à un site que j'ai écrit pour un client, mais disons que ça donne une base de modèle...
Ensuite, ça c'est le test effectué partout là où j'ai besoin de mon panier :
Code :
|
Marsh Posté le 22-01-2008 à 10:43:34
je ne connais pas du tout le C#, je vais essayer de comprendre.
Marsh Posté le 22-01-2008 à 11:38:35
C'est surtout que faut sécuriser ça parce que sinon ça risque d'être assez surprenant
En effet y'a une belle couille dans les session_start(), doit y en avoir un et un seul, en début de script, avant toute sortie vers le navigateur.
Y'a pas de paramètre à passer, il récupère celle qu'il trouve via l'identifiant de session récupéré par GET, POST ou COOKIE
Si tu veux faire des vérifs et regénérer un identifiant ou tuer la session t'as session_regenerate_id() et session_destroy()
Marsh Posté le 22-01-2008 à 13:01:33
ok pour les session_start, merci.
mais ce que je veux, c'est conservé mon panier lorsque je reviens sur ma page cataloge pour prendre un autre article. et c'est là que ça bloque...
Marsh Posté le 22-01-2008 à 13:30:35
Commence peut-être par réduire la portée du problème en créant deux ou trois pages réduites à leur plus simple expression pour tester ton panier, en vérifiant à chaque fois ce qui est dedans et ce qui ne l'est pas.
Marsh Posté le 22-01-2008 à 15:10:06
ReplyMarsh Posté le 22-01-2008 à 15:25:40
jereln a écrit : je tourne en rond et ne vois plus mon code, quelqu'un peut-il m'aider? |
Je ne vois pas comment.
Tu ne comprends manifestement pas comment sont censées fonctionner les sessions.
Commence par lire la doc du site php.net sur les sessions, ainsi que les exemples, quitte à te faire quelques petits scripts de test pour bien assimiler comment ça fonctionne.
Ensuite tu pourras adapter à ton problème.
Là on dirait que tu te lances au hasard là-dedans sans savoir à l'avance ce qui va se passer...
Marsh Posté le 22-01-2008 à 15:28:13
jereln > En php, la structure classique de stockage d'un panier c'est :
Citation : |
A noter que si tu veux les stocker dans la session alors c'est le tableau principal (le array extérieur) qu'il faut stocker directement dans la session et pas chaque élément séparé.
De ton côté, dans ton code, tu stockes chaque caractéristique du produit directement dans une case de la session. Ensuite quand tu repasses pour mettre un autre produit, tu écrases ce que t'avais avant et tu mets les caractéristiques du nouveau produit à la place. C'est normal que tu n'ai pas le résultat voulut.
Marsh Posté le 22-01-2008 à 15:33:30
Bon j'ai lu le topic en diagonal...
Mais de ce que j'ai vu dans ton code, je dirais qu'il n'est pas très surprenant que tu perdre ton panier puisqu'a chaque fois que tu ajoute quelque chose tu écrase ce qu'il y avait déjà... Utilise des tableaux!
Logiquement quant tu ajoute un produit dans ton panier ça devrait se passer ainsi :
Vérifier si le produit est déjà dans le panier, auquel cas il faut augmenter la quantité sinon ajouter simplement le produit.
Edit :
Marsh Posté le 22-01-2008 à 15:56:37
ok dwogsi, mais comment faire pour vérifier si l'article existe déjà?
Marsh Posté le 22-01-2008 à 16:06:18
bon, je reprends au début.
je garde ma page index.php
et sur ma page cart.php, je mets :
Code :
|
J'obtiens ça :
Array
(
[panier] =>
)
donc j'ai un soucis dès ma page index, non? si c'est ça, je ne vois pas.
Marsh Posté le 22-01-2008 à 16:08:23
Si ta page index.php est celle postée plus haut sans modifications, c'est n'importe-quoi donc il ne faut pas t'attendre à avoir quoi que ce soit de normal là. Si ce n'est pas celle postée plus haut, montre-la nous.
Marsh Posté le 22-01-2008 à 16:13:32
je ne sais plus si j'ai fait des changement ou non, donc je te remets ma page index.php
Code :
|
et ma page cart.php :
Code :
|
cette fois-ci, j'obtiens :
Array
(
[panier] =>
[code] => ART001
[article] => canard
)
le problème, c'est que ma session panier est écrasée à chaque fois, et du coup, je ne peux pas ajouter de nouveaux articles.
Marsh Posté le 22-01-2008 à 16:17:26
Je veux pas te donner l'impression de répéter systématiquement la même chose, mais lis la doc et les exemples sur les sessions...tu t'en sers comme si c'était magique...
Marsh Posté le 22-01-2008 à 16:18:57
Je me quote moi même vu ton dernier message.
omega2 a écrit : jereln > En php, la structure classique de stockage d'un panier c'est :
A noter que si tu veux les stocker dans la session alors c'est le tableau principal (le array extérieur) qu'il faut stocker directement dans la session et pas chaque élément séparé. |
En plus clair $_SESSION['machin'] (machin à remplacer par ce que tu veux) doit contenir un tableau de tableau.
Marsh Posté le 22-01-2008 à 16:21:19
NazzTazz > donc au début de ma page index.php (c'est ça?), je dois mettre :
Code :
|
si c'est ça comment je lui dit de continuer sur le panier existant?
Marsh Posté le 22-01-2008 à 16:24:47
jereln a écrit : NazzTazz > donc au début de ma page index.php (c'est ça?), je dois mettre :
|
Traduction de ton code : si le panier n'existe pas en dehors de la session (ce qui est toujours le cas, soit dit en passant, sauf réglage antisécuritaire du serveur ), je détruits ce que j'avais mis dans la session.
T'es sur de comprendre comment ça marche?
Marsh Posté le 22-01-2008 à 16:24:55
jereln a écrit : NazzTazz > donc au début de ma page index.php (c'est ça?), je dois mettre :
|
Mais comment tu veux qu'il y ait quelque chose dans ta variable $panier si tu n'y as rien mis avant?
Marsh Posté le 22-01-2008 à 16:26:32
Bon, je passe mon tour, moi. Il te manque des bases en php, et tu sembles refuser d'apprendre par toi-même en lisant la doc et les exemples.
Marsh Posté le 22-01-2008 à 10:07:24
Bonjour,
je suis en train de créer un panier en utilisant les sessions.
J'ai une première page catalogue ou sont listés les objets. Chaque objet à son propre bouton ajouter. Celui ci nous amène sur la page suivante que récapitule le panier. Mon problème est que sur cette nouvelle page, j'ai un retour possible au catalogue. Voici le code :
Mais lorsque je veux revalider un autre article, le panier est effacé et n'apparait que le dernier article choisi.
Comment résoudre mon problème?
Merci de m'aider.