Erreur lorsque panier vide
Résolu
MatthieuMarty
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je débute en PHP je suis un cours en ligne pour apprendre à faire un site e-commerce basique.
Je code actuellement mon panier, cependant lorsqu'il est vide une erreur apparaît:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1 in C:\xampp\htdocs\ppe\classes\Db.php on line 40
Je ne parviens pas à comprendre pourquoi elle survient uniquement lorsque le panier est vide.
Code de la page Panier :
je débute en PHP je suis un cours en ligne pour apprendre à faire un site e-commerce basique.
Je code actuellement mon panier, cependant lorsqu'il est vide une erreur apparaît:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1 in C:\xampp\htdocs\ppe\classes\Db.php on line 40
Je ne parviens pas à comprendre pourquoi elle survient uniquement lorsque le panier est vide.
Code de la page Panier :
<?php
require 'includes/header.php';
$liste = $panier->getPanier();
$items = implode(',', $liste);
?>
<div class="title_label">Votre panier</div>
<?php
$produits = $DB->query('SELECT * FROM products WHERE id in ('.$items.') ');
?>
<div class="spliter"></div>
<!----------------------------------- TABLEAU RECAPITULATIF DU PANIER ----------------------->
<div class="panier_container">
<!-- Première ligne du tableau -->
<div class="panier_ligne">
<div class="panier_label_1">Produit(s)</div>
<div class="panier_label_2">Prix Unitaire</div>
<div class="panier_label_2">Quantité</div>
<div class="panier_label_2">Prix Total</div>
<div class="panier_label_2">Actions</div>
</div>
<!-- remplissage dynamique des lignes -->
<?php if(empty($_SESSION)): ?>
<div>Panier vide</div>
<?php endif ?>
<?php if(!empty($_SESSION)):?>
<?php foreach ($produits as $produit): ?>
<div class="panier_ligne">
<!-- NOM + IMAGE -->
<div class="panier_label_3">
<div class="lien_panier"><a id="panier" href="produit.php?id=<?php echo $produit->id ?> & qte=<?php echo $produit->qte ?>"><?php echo $produit->name ?></a></div>
<div class="panier_image"><img src="<?php echo $produit->photo ?>"></div>
</div>
<!-- PRIX UNITAIRE -->
<div class="panier_label_4"><?php echo number_format($produit->price,2,',',' '); ?>€</div>
<!-- QUANTITE -->
<div class="panier_label_4"><?php echo $panier->getQte($produit->id); ?></div>
<!-- PRIX TOTAL -->
<div class="panier_label_4"><?php echo number_format($produit->price * $panier->getQte($produit->id),2,',',' '); ?>€</div>
<!-- ==============================================================================================================================================================-->
<!-- ACTIONS -->
<div class="panier_label_4">
<!-- <a id="panier" href="<?php ?>">modifier (en cours)</a>-->
<a id="panier" href="panier.php?delPanier=<?php echo $produit->id; ?>">supprimer</a>
</div>
</div>
<!--===============================================================================================================================================================-->
<?php endforeach ?>
<?php endif?>
<?php var_dump($_SESSION); ?>
</div>
<!----------------------------------------- TOTAL COMMANDE ------------------------------>
<div class="commande_container">
<div class="commande_label">Total Commande :</div>
<div class="commande_total"><?php echo number_format($panier->total(),2,',',' ') ?>€</div>
<div class="valider_commande"><a id="commande"href="">Valider Commande</a></div>
</div>
<?php require 'includes/footer.php'; ?>
3 réponses
<?php
/**
class Panier
{
private $DB;
function __construct($db)
{
$this->DB = $db;
if (!isset($_SESSION))
{
session_start();
}
if (!isset($_SESSION['panier']))
{
$_SESSION['panier'] = array();
}
if(isset($_GET['delPanier']))
{
$this->del($_GET['delPanier']);
}
}
/* panier */
function getPanier()
{
return array_keys($_SESSION['panier']);
}
/* Quantité */
function getQte($key)
{
return $_SESSION['panier'][$key];
}
/* Calcul total commande */
function total()
{
$total = 0;
$liste = $this->getPanier();
if(empty($liste))
{
$produits= array();
}
else
{
$produits = $this->DB->query('SELECT id,price FROM products WHERE id IN('.implode(',',$liste).')');
}
foreach($produits as $produit)
{
$total += $produit->price * $_SESSION['panier'][$produit->id];
}
return $total;
}
function del($key)
{
if(isset($_SESSION['panier'][$key]))
{
unset($_SESSION['panier'][$key]);
}
}
}
/**
- Panier
- /
class Panier
{
private $DB;
function __construct($db)
{
$this->DB = $db;
if (!isset($_SESSION))
{
session_start();
}
if (!isset($_SESSION['panier']))
{
$_SESSION['panier'] = array();
}
if(isset($_GET['delPanier']))
{
$this->del($_GET['delPanier']);
}
}
/* panier */
function getPanier()
{
return array_keys($_SESSION['panier']);
}
/* Quantité */
function getQte($key)
{
return $_SESSION['panier'][$key];
}
/* Calcul total commande */
function total()
{
$total = 0;
$liste = $this->getPanier();
if(empty($liste))
{
$produits= array();
}
else
{
$produits = $this->DB->query('SELECT id,price FROM products WHERE id IN('.implode(',',$liste).')');
}
foreach($produits as $produit)
{
$total += $produit->price * $_SESSION['panier'][$produit->id];
}
return $total;
}
function del($key)
{
if(isset($_SESSION['panier'][$key]))
{
unset($_SESSION['panier'][$key]);
}
}
}
<?php
/**
class Db{
private $host ='localhost';
private $name='eshop';
private $user="root";
private $pass='';
private $connexion;
function __construct($host=null,$name=null,$user=null,$pass=null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
$this->user,$this->pass,array(
PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la base de données !';die();
}
}
/* requête */
public function query($sql , $data=array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
public function insert($sql , $data=array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}
/**
- Gestion de la base de données
- /
class Db{
private $host ='localhost';
private $name='eshop';
private $user="root";
private $pass='';
private $connexion;
function __construct($host=null,$name=null,$user=null,$pass=null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
$this->user,$this->pass,array(
PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la base de données !';die();
}
}
/* requête */
public function query($sql , $data=array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
public function insert($sql , $data=array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}