Bonjour à toutes et à tous,

Merci pour le tutorial concernant le panier en php, j'ai pris le code en premium mais j'ai des problèmes :
J'ai essayé d'ajouté la fonction de Thomas et j'ai cette erreur :
'erreur Parse error: syntax error, unexpected 'public' (T_PUBLIC) in /home/xxx/public_html/xxx/panier.class.php on line 32'

J'ai également le message d'erreur suivant : 'Warning: PDOStatement::execute(): SQLSTATE[42S22]: Column not found: 1054 Champ 'libelleProduit' inconnu dans where clause in ..\db.class.php on line 32'

Je fais mon site et j'ai vraiment besoin du panier, je galère et par la suite je vais plus me former mais en attendant si quelqu'un peut m'aider sur ça, ce serait super !
Merci d'avance pour votre aide !

9 réponses


seb606
Auteur
Réponse acceptée

Merci PallMallShow pour ton aide, en fait j'ai re-crée la bdd manuellement et ça fonctionne ;p

Hello,

Et bien les erreurs parlent d'elles-même ...

Column not found: 1054 Champ 'libelleProduit' inconnu

En gros tu n'as pas de colonne 'libelleProduit' dans ta base.

Ensuite donnes nous le bout de code a ~partir de la ligne 32.

seb606
Auteur

Merci pour la réponse, voici le code à partir de la ligne 32 :
' public function query($sql, $data = array()){
$req =$this->db->prepare($sql);
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
}'
J'ai utilisé le code source du tuto et il n'y a effectivement pas de champ "libelleProduit" dans ma base et je n'ai pas vu celui-ci dans les pages "sources".

Hello,

Tu peux formater ton code en utilisateur le markdown, ce sera plus clair a lire (ou alors en cliquant sur l'icone </> ton l'éditeur).
Exemple :

public function query($sql, $data = array()){
        $req =$this->db->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }

Et puis j'ai l'impression que tu as un } de trop non ?

seb606
Auteur

J'utilise Notepad++ ^^
le } est pour fermé la class "Panier".
A priori une autre personne avait le problème dans le sujet du tuto, j'ai juste utilisé tous les fichiers sources du tuto et hop erreur.

Peut importe l'éditeur, je te parle de celui du site pour avoir un bel aspect du code.
Nous avions aussi compris que tu avais DL les sources.

Montre nous ta fonction avant query (donc avant la ligne 32)

seb606
Auteur

Merci pour ta réponse, voici le code avant la ligne 32 :
'<?php
class DB{

private $host = 'localhost';
private $username = 'xxxx';
private $password = 'xxxx';
private $database = 'xxxx';
private $db;

public function __construct($host = null, $username = null, $password = null, $database = null){
    if($host != null){
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }

    try{
        $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
            ));
    }catch(PDOException $e){
        die('<h1>Impossible de se connecter a la base de donnee</h1>');
    }
} '

Je viens d'essayer tout ton code, et ne j'ai aucune erreur de mon côté.
Tu nous as aussi donné la classe DB, alors qu'on voudrait la 'Panier' :)

seb606
Auteur

Oki, c'est la class Panier 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]);
}

}'