Class sessions

Fermé
PHPerreur - Modifié par PHPerreur le 1/08/2014 à 15:33
Soufiane974 Messages postés 14 Date d'inscription mercredi 6 août 2014 Statut Membre Dernière intervention 9 juillet 2021 - 14 août 2014 à 09:00
Bonjour,
Voilà des heures que je me casse la tête à vouloir créer un panier virtuelle pour un e-commerce.

J'ai une class "Panier" et une autre "Produit".

Un appel AJAX envoie une liste d'objet afin de les mettre dans le panier.
Seulement, le panier que je stock dans la variable $_SESSION n'est pas un array comme souhaité mais un "objet incomplet"... ce qui m'empêche d'y ajouter un produit.

Toute aide sera la bienvenue, merci !

Page qui traite la requête AJAX reçue:
<?php
require 'classes.php';
$panier=new Panier();

 if(isset($_POST['panier'])){
  foreach ($_POST['panier'] as $cmd){
   
   $product=new Product($cmd[name], $cmd[quantity], $cmd[cat], $cmd[heb], $cmd[meal]);
   $panier->add($product);

  }
 }
    else{
        echo "Failed";
    }
  
?>


Jusqu'ici, aucune erreur, la variable $product est exactement comme attendue.

Le fichier classes.php :
<?php
class Panier{
 public function __construct(){
  if(!isset($_SESSION)){
   session_start();
  }
  if(!isset($_SESSION['panier'])){
   $_SESSION['locked']=false;
   $_SESSION['panier']=array(); //ICI, le panier devrait être un array !
   var_dump($_SESSION['panier']);// Me renvoie : object(Panier)#1 (0) {} 
  }
 }
 public function add($product){
     if (!$this->isLocked())
     {
       array_push($_SESSION['panier'],'a');// Erreur :First argument should be an array in ....
       //array_push($_SESSION['panier'],$product);
     }
     else{echo "Un problème est survenu veuillez contacter l'administrateur du site.";}
 }
 private function isLocked(){
  if(!isset($_SESSION['panier'])){
   return true;
  }
  else{
   if ($_SESSION['locked']){
    return true;
   }
   else{
    return false;
   }
  }
 }
}

class Product{
 
 private $name;
 private $quantity;
 private $category;
 private $logement;
 private $meal;
 
 public function __construct($name=NULL, $quantity=NULL, $category=NULL, $logement=NULL, $meal=NULL){
  if($name!=NULL && $quantity!=NULL && $category!=NULL && $logement!=NULL && $meal!=NULL){
   $this->name=$name;
   $this->quantity=$quantity;
   $this->category=$category;
   $this->logement=$logement;
   $this->meal=$meal;
  }
  else{
   echo 'Veuillez contacter l\'administrateur du site';
  }
 }
}


Erreur PHP :
Warning: array_push() First argument should be an array in [...] on line 16

1 réponse

Soufiane974 Messages postés 14 Date d'inscription mercredi 6 août 2014 Statut Membre Dernière intervention 9 juillet 2021 1
Modifié par Soufiane974 le 14/08/2014 à 09:00
Bonjour,

Essai de démarrer la session au début du code après
require 'classes.php';
ligne 2 et déclare un attribut "panier" sur lequel tu feras tes manipulations et que tu ajouteras en variable de session uniquement à la fin de la fonction.
0