Fatal error: Cannot use object of type panier as array in
j3-1996
Messages postés
90
Statut
Membre
-
j3-1996 Messages postés 90 Statut Membre -
j3-1996 Messages postés 90 Statut Membre -
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
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]);
}
}
A voir également:
- Cannot use object of type mysqli_result as array
- Fan error lenovo - Forum Refroidissement
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Error 1962 ✓ - Forum PC fixe
- Bad request error 403 paiement ✓ - Forum Réseaux sociaux
- Whea error occt - Forum Processeur
2 réponses
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'.
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'.
Salut,
Je te remercie déjà de ta réponse mais je bloque un peu ^^ j'ai mis un var_dump juste après:
Voilà le code de addpanier.php qui peut peut-être être utile:
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
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