Fatal error: Cannot use object of type panier as array in

Fermé
j3-1996 Messages postés 77 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 18 août 2014 - 1 mars 2014 à 14:00
j3-1996 Messages postés 77 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 18 août 2014 - 4 mars 2014 à 19:21
Bonjour,

Je suis entrain de créer un site en html et css et j'ai voulu ajouter un panier en PHP et étant débutant en PHP j'ai suivi un tuto sur Grafikart.fr en local avec mamp tout fonctionne très bien mais quand je le mets en ligne ça ne marche plus et j'ai le message d'erreur suivant:

Fatal error: Cannot use object of type panier as array in /home/www/web111/html/construction/fr/panier.class.php on line 50

Fatal error: Exception thrown without a stack frame in Unknown on line 0

Je ne comprend pas pourquoi en local ça marche et pas en ligne.

Voilà le code de panier.class.php


<?php
class panier{

private $DB;

public function __construct($DB){
if(!isset($_SESSION)){
session_start();
}
if(!isset($_SESSION['panier'])){
$_SESSION['panier'] = array();
}
$this->DB = $DB;

if(isset($_GET['delPanier'])){
$this->del($_GET['delPanier']);
}
if(isset($_POST['panier']['quantity'])){
$this->recalc();
}
}

public function recalc(){
foreach($_SESSION['panier'] as $product_id => $quantity){
if(isset($_POST['panier']['quantity'][$product_id])){
$_SESSION['panier'][$product_id] = $_POST['panier']['quantity'][$product_id];
}
}
}

public function count(){
return array_sum($_SESSION['panier']);
}

public function total(){
$total = 0;
$ids = array_keys($_SESSION['panier']);
if(empty($ids)){
$products = array();
}else{
$products = $this->DB->query('SELECT id, price FROM products WHERE id IN ('.implode(',',$ids).')');
}
foreach( $products as $product ) {
$total += $product->price * $_SESSION['panier'][$product->id];
}
return $total;
}

public function add($product_id){
if(isset($_SESSION['panier'][$product_id])){
$_SESSION['panier'][$product_id]++;
}else{
$_SESSION['panier'][$product_id] = 1;
}
}

public function del($product_id){
unset($_SESSION['panier'][$product_id]);
}

}

2 réponses

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mars 2014 à 14:00
Salut,

J'ai l'impression que ça vient de la manière dont tu appelles ta méthode 'add' sur la page qui exploite cette classe, et plus précisément du typage de l'argument que tu lui passes.

Ce qui correspond à $product_id ne serait pas un entier, mais un objet.

Si tu veux en avoir le coeur net, fais un var_dump de ce que tu passes en tant que $product_id juste avant d'invoquer ta méthode 'add'.
0
j3-1996 Messages postés 77 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 18 août 2014 2
4 mars 2014 à 17:23
Salut,

Je te remercie déjà de ta réponse mais je bloque un peu ^^ j'ai mis un var_dump juste après:
public function recalc(){
foreach($_SESSION['panier'] as $product_id => $quantity){
if(isset($_POST['panier']['quantity'][$product_id])){
$_SESSION['panier'][$product_id] = $_POST['panier']['quantity'][$product_id];
Mais ça n'affiche rien. Je ne sais pas si je l'ai mis à la bonne place. Ah oui et j'ai oublier de préciser que j'obtient ce message d'erreur quand je clique sur le bouton ajouter au panier qui me renvoie sur la page "addpanier.php" c'est donc sur la page addpanier.php que j'ai le message d'erreur pour panier.class.php

Voilà le code de addpanier.php qui peut peut-être être utile:
<?php
require '_header.php';
$json = array('error' => true);
if(isset($_GET['id'])){
$product = $DB->query('SELECT id FROM products WHERE id=:id', array('id' => $_GET['id']));
if(empty($product)){
$json['message'] = "Ce produit n'existe pas";
}else{
$panier->add($product[0]->id);
$json['error'] = false;
$json['total'] = number_format($panier->total(),2,',',' ');
$json['count'] = $panier->count();
$json['message'] = 'Le produit a bien été ajouté à votre panier';
}
}else{
$json['message'] = "Vous n'avez pas sélectionné de produit à ajouter au panier";
}
echo json_encode($json);

Ce que je ne comprend pas c'est pourquoi ça marche très bien en local...
Et désolé si je comprend peut être pas encore tout très bien je suis débutant
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
Modifié par flokocha le 4/03/2014 à 18:04
Ok alors ajoute un var_dump juste avant cette ligne : $panier->add($product[0]->id);

var_dump($product);

À mon avis ta requête a échoué, mais le résultat du var_dump nous en dira plus.
0
j3-1996 Messages postés 77 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 18 août 2014 2
4 mars 2014 à 18:09
Voilà j'ai le message suivant:
{"error":true,"message":"Vous n'avez pas s\u00e9lectionn\u00e9 de produit \u00e0 ajouter au panier"}
voilà apparemment c'est comme si je n'avais pas sélectionné de produit
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mars 2014 à 19:20
Donc tu es dans ton else, et tu n'appelles pas la méthode add. Ça n'a plus rien à voir avec ton premier post, du coup...
0
j3-1996 Messages postés 77 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 18 août 2014 2
4 mars 2014 à 19:21
Alors tu n'a d'idée d'où peux venir le problème ?
0