Bonjour,
Voilà je suis en train de faire un site de vente en ligne, je suis en train de mettre en place le panier, pour ça j'utilise un cookie.
Chaque produit est représenté par un formulaire, quand on clique sur "ajouter un panier" ça envoie les valeurs de mon formulaire à un script contenu dans mon sous-dossier /scripts/ à la racine.
Ce script se charge de mettre en place le cookie/le récupérer s'il existe (sans problème) et d'ajouter le nouveau produit au panier etc. bref jusque là aucun problème.
Mon problème apparaît lorsque je veux par exemple, sur la page d'accueil de mon site (qui se trouve au-dessus de mon script dans l'arborescence) récupérer ce cookie, en effet impossible de le récupérer, un isset ne le trouve même pas, alors que mon cookie existe bel et bien !
Je créer le cookie avec un script se situant à la racine maintenant, donc je n'ai plus ce problème.
Par contre j'en ai un autre, en fait ce que je mets dans le cookie est le panier du visiteur (que je serialize) comme ceci :
Code :
- // Créer et ajouter l'objet dans le panier
- //
- $panier_objet = new Panier_Objet($_POST['reference'], $_POST['quantite']);
- $panier->add($panier_objet);
- // Créer/modifier le cookie, durée de 7 jours
- //
- setcookie('panier', serialize($panier), time() + 7*24*3600, null, null, false, true);
|
Ce panier (instance de la classe panier) contient une "liste d'objets" (attribut) qui est un array d'instances de panier_objet (une autre classe).
Pour récupérer mon panier je fais :
Code :
- require_once("classes/Panier.php" );
- if (isset($_COOKIE['panier']))
- {
- $panier = unserialize($_COOKIE['panier']);
- $quantite = $panier->quantite();
- echo'<p>Nombre d\'articles : '. $quantite .'</p>';
- }
|
quantite() additionne la valeur de l'attribut quantite de chaque instance de ma classe panier_objet contenues dans ma "liste d'objets" de mon panier.
Maintenant ça m'affiche l'erreur suivante :
Fatal error: Panier::quantite() [panier.quantite]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Panier_Objet" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\wamp\www\mon_projet\classes\Panier.php on line 121
Détail de la méthode quantité (pour montrer où se situe la ligne 121 de ma classe Panier) :
Code :
- public function quantite()
- {
- // Initialiser la variable de comptage
- //
- $quantite = 0;
- // Obtenir la liste des objets du panier
- //
- $liste = $this->getListePanierObjets();
- // Parcourir la liste et y ajouter les quantités
- //
- if ($liste != '')
- {
- foreach ($liste as $objet)
- $quantite += $objet->getQuantite(); // ici c'est la ligne 121
- }
- return $quantite;
- }
|
Need help
Merci d'avance
EDIT : en fait j'ai l'impression que serialize a été effectué de façon récursive mais pas le unserialize
EDIT2 : en fait je pourrais résumer mon problème à "comment sérializer une instance d'une classe qui contient un array d'instances d'une autre classe ?".
EDIT3 : OK, j'suis revenu de ma pause, j'ai rallumé le pc (je travail en local), maintenant ça marche, ne me demandez pas pourquoi...
Bon, bah problème résolu, si jamais je comprends ce qu'il s'est passé j'éditerais.
Message édité par Ch0bits le 10-01-2012 à 15:00:05