Panier en PHP

Panier en PHP - PHP - Programmation

Marsh Posté le 31-03-2005 à 23:35:01    

Bonjour,
 
Je voudrai faire un systeme de panier en php. Malgré les differents tuto que j'ai pu trouver sur le net je n'y arrive pas.
Tout mon site est finis et il ne me reste que ca a faire :/
Donc voila ce que je me demande. Je compte utiliser (logique) les variables de SESSIONS. Je ne veux stocker que les id des produits et aucune quantitée (produit unique).  
LE truc c'est que j'ai du mal a utiliser les tableaux en PHP.
 
Donc voila mon idée :
Quand l'utilisateur se log je crée le tableau :
Deja rien que ca j'en suis pas sur...
 

Code :
  1. $_SESSION['panier'] = array();


 
Ensuite quand l'utilisateur clic sur ajouter au panier je fais ceci :
 

Code :
  1. $nbElem=count($_SESSION['panier']);
  2. $_SESSION['panier'][$nbElem] = $idProduit;


 
Voila deja je pense que c'est n'importe quoi mais je nage désolé :(
Si vous pouviez m'aider ca serai vraiment sympas :jap:  
 
PS : J'ai deja vu ceci http://developpeur.journaldunet.co [...] ie1a.shtml mais ca ne m'a pas aidé... Bien au contraire :/


Message édité par Loizo le 31-03-2005 à 23:41:42
Reply

Marsh Posté le 31-03-2005 à 23:35:01   

Reply

Marsh Posté le 31-03-2005 à 23:37:23    

$_SESSION['panier'][$nbElem] = $idProduit;
 
c'est plutot le contraire...
$_SESSION['panier'][$idProduit] = $nbElem;


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 31-03-2005 à 23:42:38    

Nan en fait j'ai un produit X, je l'ajoute dans mon panier donc dans la 1ere case libre de mon tableau.  
Donc je compte le nb d'element de mon tableau, au début 0 donc je met dans la case 0 puis 1 etc etc
 
Mais a priori ce code ne fonctionne pas :(

Reply

Marsh Posté le 31-03-2005 à 23:46:58    

au fait je te proposait de mettre la quantitée achetée a la nieme place (id du produit -> unique)


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 31-03-2005 à 23:47:26    

En fait a priori en faisant ceci mon tableau de SESSION ne sauvegarde pas les idProduit dans le tableau car si dans une autre page ou je veux afficher le panier je fais :
 

Code :
  1. $nbAnnonce = count($_SESSION[panier]);
  2. echo $nbAnnonce;


 
Ca m'affiche 0 et donc a priori mon tableau est vide

Reply

Marsh Posté le 01-04-2005 à 00:20:21    

je penses que dans ta session tu devrais sauvegardé ton tableau sérialisé, ce qui est plus simple :)

Reply

Marsh Posté le 01-04-2005 à 00:23:43    

Tu veut dire quoi par sauvegarder mon tableau sérialisé ?

Reply

Marsh Posté le 01-04-2005 à 00:24:46    

va voir du coté de  
 
serialize()
et  
unserialize()  
 
ca permet de linéariser un tableau/objet

Reply

Marsh Posté le 01-04-2005 à 08:03:16    

Pour metre un element dans un tableau, a la prochaine "case vide", il suffit de faire comme ca :

Code :
  1. var $tab = array();
  2. $tab[]="Un premier element";
  3. $tab[]="Un deuxieme element";


 
Donc ce que tu peux faire :

Code :
  1. session_start();
  2. if (!isset($_SESSION['panier']) { // le panier n'existe pas encore
  3.   $_SESSION ['panier']= array();  // creation d'un panier vide
  4. }
  5. // ...
  6. // ajout d'un article au panier
  7. $articleid = getArticleId(); // ici je te laisse recuperer l'id de ton article
  8. $panier = &$_SESSION['panier']; // ici panier pointe vers le panier  
  9.                                 // qui se trouve dans la session
  10. $panier[] = $articleid;         // on mets notre article dans le panier
  11. // ...


Plusieurs remarques  
1) Ne pas oublier que quand tu fais ton session start tu recuperes la session d'avant, il faut donc, avant de creer un panier vide, verifier s'il n'existe pas deja, histoire de pas l'ecraser ...
 
2) je me rappelle plus si PHP copie les objets ou utilise un pointeur par defaut. C'est pour cela que j'ai prefere definir que $panier pointais vers $_SESSION['panier']. De cette facon tous les changements faits sur $panier sont en realite faits sur $_SESSION['panier']. Comme ca ton panier sera sauve d'une page a l'autre.

Reply

Marsh Posté le 01-04-2005 à 09:01:09    

Cool, merci pour ton aide, je test ca en rentrant de cours a midi ! Et je vous dis si ca marche, merci :)

Reply

Marsh Posté le 01-04-2005 à 09:01:09   

Reply

Marsh Posté le 01-04-2005 à 10:42:21    

cerel a écrit :

Pour metre un element dans un tableau, a la prochaine "case vide", il suffit de faire comme ca :  
2) je me rappelle plus si PHP copie les objets ou utilise un pointeur par defaut. C'est pour cela que j'ai prefere definir que $panier pointais vers $_SESSION['panier']. De cette facon tous les changements faits sur $panier sont en realite faits sur $_SESSION['panier']. Comme ca ton panier sera sauve d'une page a l'autre.


Pour la version 4 il fait une copie par défaut. pour la version 5 je ne sais pas mais je ne crois pas que cela ait changé.

Reply

Marsh Posté le 01-04-2005 à 10:53:59    

benamoubeach a écrit :

je penses que dans ta session tu devrais sauvegardé ton tableau sérialisé, ce qui est plus simple :)


Pas besoin :o ça se fait automatiquement, et tu peux même modifier la méthode pour linéariser/délinéariser avec session.serialize_handler

Reply

Marsh Posté le 01-04-2005 à 11:40:28    

Bon j'ai toujours le meme probleme, c'est a dire que quand je veux afficher mes annonces ca foire :
 
Script AjoutPanier

Code :
  1. $panier = &$_SESSION['favoris'];
  2. $panier[] = $_GET['id'];
  3. echo $_SESSION['favoris'][0]; //Affiche bien le numero de l'annonce


 
AffichagePanier

Code :
  1. $nbAnnonce = count($_SESSION['favoris']);
  2. echo $nbAnnonce; //Affiche 0


 
Je ne comprend vraiment pas, on dirait que ma session ne stocke rien du tout c'est tres bizzare...


Message édité par Loizo le 01-04-2005 à 11:40:51
Reply

Marsh Posté le 01-04-2005 à 11:43:48    

utilise print_r($_SESSION) tu verras ce qu'il y a dans ta session.

Reply

Marsh Posté le 01-04-2005 à 11:47:39    

Ca m'affiche ca :
 
Dans AjoutPanier
1er ajout

Code :
  1. Array ( [favoris] => Array ( [0] => 1 ) )


2eme ajout

Code :
  1. Array ( [favoris] => Array ( [0] => 7 ) )


 
Dans AffichePanier

Code :
  1. Array ( [login] => Nesta [pwd] => f60acd6991c212d2881fc542bab5fd10 [id] => 2 [type] => Membre [favoris] => Array ( ) )


 
Je ne connaissais pas cette fonction. C'est pratique :)
Donc a priori c'est bien ca, quand j'ajoute ca marche mais apres quand je change de page je perd ce qu'il y a dans mon tableau, c'est bizzare. (Ca ajoute toujours dans la 1ere case aussi mais bon ca c'est pas le plus grave encore)

Reply

Marsh Posté le 01-04-2005 à 11:50:50    

tu es sur que tu as placer un session_start() lors de l'ajout ?

Reply

Marsh Posté le 01-04-2005 à 11:52:18    

Tain cte honte :(
C'etait ca, en fait je ne le met jamais dans mes pages parce que j'en ai pas besoin vu que je l'ai juste mis a l'accueil et apres tout est géré par des includes. Or ici je suis dan sun script donc la session n'existe pas ! C'etait juste ca, donc maintenant ca marche !!
 
Merci bcp pour votre aide :)

Reply

Marsh Posté le 01-04-2005 à 11:52:55    

no soucy

Reply

Marsh Posté le 01-04-2005 à 11:56:57    

Juste pour info, on a pas le droit de faire ca :
 

Code :
  1. for ($i=0; $i<$nbAnnonce; $i++)
  2. {
  3.     $resultat=mysql_query("SELECT * From Annonce Where Ref=".$_SESSION['favoris'][$i])
  4.     or die ("erreur requete fav" );
  5.     ...
  6. }


 
La premiere fois ca marche ca me met l'annonce mais apres j'ai ca : (ligne 12 c'est celle de la requete)
 
Warning: mysql_query(): Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON) in c:\program files\easyphp1-7\www\phpfachome\listeAnnonceFav.php on line 12
 
Warning: mysql_query(): A link to the server could not be established in c:\program files\easyphp1-7\www\phpfachome\listeAnnonceFav.php on line 12
erreur requete fav

Reply

Marsh Posté le 01-04-2005 à 12:00:53    

Tu as fais une connexion mysql dans un include présent sur toute tes pages?

Reply

Marsh Posté le 01-04-2005 à 12:03:25    

Oui je me connecte bien a ma base de donnée, d'ailleur la premiere annonce s'affiche comme il faut c'est ca qui est bizzare mais on dirait qu'on ne peut pas faire plusieurs mysql_query a la suite.

Reply

Marsh Posté le 01-04-2005 à 12:04:31    

Loizo a écrit :

Oui je me connecte bien a ma base de donnée, d'ailleur la premiere annonce s'affiche comme il faut c'est ca qui est bizzare mais on dirait qu'on ne peut pas faire plusieurs mysql_query a la suite.


si tu peux le faire.
Fait un echo mysql_error(); juste apres le query


Message édité par Berceker United le 01-04-2005 à 12:04:54
Reply

Marsh Posté le 01-04-2005 à 12:08:00    

Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON)
 
Toujours la meme chose, a priori l'erreur c'est qu'il ne trouve plus ma base de donnée, bizzare alors que la 1ere annonce s'affiche parfaitement...

Reply

Marsh Posté le 01-04-2005 à 12:10:23    

Loizo a écrit :

Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON)
 
Toujours la meme chose, a priori l'erreur c'est qu'il ne trouve plus ma base de donnée, bizzare alors que la 1ere annonce s'affiche parfaitement...


Donc il y a bien une connexion qui n'est pas faite.
Regarde si tu ne fait pas une mysql_close quelque part et si tu as bien un include de ta connexion.

Reply

Marsh Posté le 01-04-2005 à 12:10:24    

apparemment tu perds ta connex en route et il essaye de se reconnecter avec les params par défaut (cad rien), c'est peut être dû au timeout de ton serveur mysql.
essaye de faire un mysql_ping avant ta requete

Reply

Marsh Posté le 01-04-2005 à 12:13:46    

Bah encore une connerie de ma part et un mysqlk_close mal placé, le pire c'est que j'avais deja eu cette erreur et j'avais finis par trouver comment l'evitant avec une grosse bidouille au bout d'une heure. C'est chiant ce genre d'erreur si on nous met pas la tete dedans on passe tjs a coté :D
Merci en tout cas tout marche maintenant, mon site est donc finis cool :) Thx !!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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