Bonjour,
Je suis en train de réaliser une boutique web avec des tutos pour un ami où j’apprends sur le tas et je rencontre un problème au niveau de l'ajout d'un article à mon panier venant de tables différentes.
Voici ce qui marche:
Mon panier =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <?php $ids = array_keys($_SESSION['panier']); if(empty($ids)) { $products = array(); } else { $products = $DB->query('SELECT * FROM products WHERE id IN ('.implode(',',$ids).')'); } foreach ($products as $product): ?> <div class="produitpanier"> <span class="nom"><p> <?= $product->lien_article; ?> </p></span> <span class="prix"><p> <?= number_format($product->prix,2,',',' '); ?> €</p></span> <span class="quantity"><input class="barqte" type="text" name="panier[quantity][<?= $product->id; ?>]" value="<?= $_SESSION['panier'][$product->id]; ?>" ></span> <span class="supp"><p> <a href="panier.php?delPanier=<?= $product->id; ?>"> <img src="images/cb_prod.png" /></a> </p></span> </div> <?php endforeach; ?> <input class="recalculer" type="submit" value="Recalculer" > <div id="produittotal" > <p> Total :</p> <span class="total"><strong> <?= number_format($panier->total(),2,',',' '); ?> € </strong></span> </div>
ajout au panier =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?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"; } $panier->add($product[0]->id); $json['error'] = false; $json['total'] = $panier->total(); $json['count'] = $panier->count(); $json['message'] = "Le produit a bien ete ajoute a votre panier "; } else { $json['message'] = "Vous n'avez pas selectionné de produit à ajouter au panier"; } echo json_encode($json);
Fonction de mon panier =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <?php class panier { private $DB; public function __construct($DB) { if(!isset($_SESSION)) { session_start(); // initialise la session } 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 * FROM products WHERE id IN ('.implode(',',$ids).')'); } foreach($products as $product) { $total += $product->prix * $_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]); } }
connexion DB =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php class DB{ private $host = 'localhost'; private $username = 'root'; private $password = ''; private $database = 'panier'; private $db; // Pour connection a une autre bdd 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; } // if ($host != null){ try { // Gerer une erreur $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 )); } //try {} catch(PDOException $e){ die('<h2>Impossible de se connecter a la base de donnee</h2>'); } // catch() } // public function __construct() public function query($sql, $data = array()){ $req =$this->db->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_OBJ); } } //class DB{} ?>
La page de mon livre =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php $products = $DB->query('SELECT * FROM products'); ?> <?php foreach ($products as $product): ?> <div id="descriplivre" > <p> Book Artistique <p> <p> Format: A5 - 40 pages <p> <p> Style: Matt <p> </br ></br > <p> Prix: 28 <p> <div class="panier" > <a class="addPanier" href="addpanier.php?id=<?= $product->id=1; ?>" >Ajouter au panier</a> </div> </div> <?php endforeach ?>
et ma page carte_postale =
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php $products_cp_carre = $DB->query('SELECT * FROM products_cp_carre'); ?> <?php foreach ($products_cp_carre as $product): ?> <div id="descripcp" > <p> Lot de 5 cartes postales <p> <p> Format: 16x16 cm <p> <p> Style: Matt <p> </br ></br > <p> Prix: 9 <p> <div class="panier" > <a class="addPanier" href="addpanier.php?id=<?= $product->id=20; ?>" > Ajouter au panier</a> </div> </div> <?php endforeach ?>
et la structure de ma bdd =
BDD = panier
table1 = products = livreA5 avec l'id 1
table2 = products_cp_carre = Cartes_Postales_carre avec l'id 20 (l'affichage de cette table n'est pas sur la page du livre).
Donc mon problème est que l'ajout de mon livre marche, mais quand je me rends sur la page carte postale et que je veux ajouter l'article avec l'id 20, j’obtiens l'erreur suivante :
Je fais des tests en changeant la variable $products avec $products_cp_carre dans les codes du panier, mais je ne trouve toujours pas comment résoudre ce problème.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 MySQL server version for the right syntax to use near ')' at line 1 in C:\wamp\www\Monsite\boutique\db.class.php on line 35
Voilà j'espère que vous trouverez une solution à mon problème.
Merci d'avance.
Partager