Problème de fonctions dans un panier utilisant les sessions!

djgje
Invité n'ayant pas de compte PHPfrance

14 janv. 2011, 16:07

Bonjour à tous!
Je suis débutant en php et je fais un site d'e-commerce ou j'utilise un panier.
Mon panier fonctionne avec les sessions, mais je n'arrive pas à ajouter mes produits dedans!
Voici donc pour commencer l'appel de la fonction d'ajout:
ajouterArticle($id,$q);
Je ne pense pas avoir de problème à ce niveau (en même temps si je poste ici c'est parce que je ne trouve vraiment pas!).
Voici maintenant la fonction ajouter proprement dite:
function ajouterArticle($id,$qte){

   //Si le panier existe
   if (creationPanier() && !isVerrouille())
   {
      //Si le produit existe déjà on ajoute seulement la quantité
      $positionProduit = array_search($id,  $_SESSION['panier']['id']);

      if ($positionProduit !== false)
      {
         $_SESSION['panier']['qteProduit'][$positionProduit] += $qte ;
      }
      else
      {
      	 $infosproduit_query = sqlquery("SELECT produit_id, produit_marque, produit_modele, produit_prix FROM produits WHERE produit_id='".$id."' ",1);
         $nom = $infosproduit_query['produit_marque']." - ".$infosproduit_query['produit_modele'];
         $prix = $infosproduit_query['produit_prix'];
         //Sinon on ajoute le produit
         array_push( $_SESSION['panier']['id'],$id);
         array_push( $_SESSION['panier']['libelleProduit'],$nom);
         array_push( $_SESSION['panier']['qteProduit'],$qte);
         array_push( $_SESSION['panier']['prixProduit'],$prix);
         $informations = Array(false,
								'Produit ajouté au panier!',
								'Le produit '.$nom.' a été correctement ajouté au panier!</span>.',
								'',
								ROOTPATH.'/produits/produitbyid.php?id='.$id.'',
								2
								);
		 require_once('information.php');
		 exit();
      }
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
Et maintenant les fonctions qui peuvent être appelées par ajouterArticle():
function creationPanier(){
   if (!isset($_SESSION['panier'])){
      $_SESSION['panier']=array();
      $_SESSION['panier']['id'] = array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();
      $_SESSION['panier']['prixProduit'] = array();
      $_SESSION['panier']['verrou'] = false;
   }
   return true;
function isVerrouille(){
   if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
   return true;
   else
   return false;
}
Il reste sqlquery() mais cette fonction fonctionne sans problème, elle sert autre part!
Voilà, j'espère avoir été assez complet!
J'espère que quelqu'un ici pourra m'aider! Merci d'avance!

Jérôme

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 janv. 2011, 16:49

salut,

qu'entend tu pas je n'arrive pas a ajouter les produits ?
- Est ce que la fonction retourne une erreur ?
- Est ce que les tableaux existent bien en session
- Est ce que l'un des tests échoue ?

pourquoi avoir fait si compliqué alors que tu pouvais tous indexer par rapport à $id qui devrait être unique ?
par exemple
<?php
$_SESSION['panier'][ $id ]= array('prix' => 412,'libellé' => 'ça c est le produit qui déchire tout !','quantité'=>28,'verrou'=>false);
// etc
?>
@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2011, 16:50

As-tu un session_start() au début de ta page ?
Les erreurs sont-elles activées pour les requêtes ? (afin de voir si c'est pas l'insertion en base qui pose problème)

djgje
Invité n'ayant pas de compte PHPfrance

14 janv. 2011, 17:05

Merci pour vos réponses!
Et bien jusqu'à tout à l'heure, la fonction ne retournait aucune erreur, la page d'infos s'affichait puis ca revenait sur le produit comme je voulais!
Mais quand je voulais afficher le panier il était toujours vide...
Maintenant j'ai bidouiller, c'est le code que vous avez vu. Celui la il ne fait rien, quand je clique sur le lien qui appelle la fonction, page blanche...
J'ai bien un session_start() sur chaque page de mon site. Je ne pense pas que cela vienne de la requete sql car j'arrivais a afficher des infos de celles-ci dans ma page informations.php...
Pour ce qui est du coté compliqué, c'est ma première création en php et j'utilise ce que je découvre! J'adapte du code de temps en temps aussi!
A bientôt pour une solution j'espère!
++

Jérôme

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2011, 17:10

Que donne :
echo"<pre>";
var_dump($_SESSION);
echo"</pre>";
En le mettant à la fin du script et un autre après un changement de page. :)

djgje
Invité n'ayant pas de compte PHPfrance

14 janv. 2011, 17:22

Merci mais tu pourrais me préciser à la fin de quel script? Que je ne fasse pas d'erreurs!
Et aussi je ne vois pas top où après un changement de page? Désolé de mon incompréhension!
Merci!

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2011, 18:26

Tu as une page php englobant tous tes systèmes non ? (include, require, ect)
Tu mets le script d'affichage tout en bas en dernière instruction.

Quand au changement de page c'était pour savoir si lorsque tu changeais de page la session était perdue ou non.
Donc si tu as un fichier index.php qui inclut tous les systèmes (reconnaissance de la page via une variable dans l'url) dans ce cas tu n'as pas besoin vu que le premier ajout sera valide en cas de changement de page.