-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcart.php
More file actions
134 lines (110 loc) · 5.75 KB
/
cart.php
File metadata and controls
134 lines (110 loc) · 5.75 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
// --------------------------------- PARTIE AJOUT DES PRODUITS DE LA CARTE ----------------------------------------------//
// Si l'utilisateur a cliqué sur le bouton Ajouter au panier , on vérifie les données du formulaire avec "isset"
if (
isset(
$_POST['product_id'],
$_POST['quantity']
) && is_numeric(
$_POST['product_id']
) && is_numeric(
$_POST['quantity']
)
) {
// les variables de publication afin de les identifier facilement, int .
$product_id = (int) $_POST['product_id'];
$quantity = (int) $_POST['quantity'];
// preparation de l'instruction SQL, on vérifie essentiellement si le produit existe dans notre base de données
$stmt = $pdo->prepare('SELECT * FROM products WHERE id = ?');
$stmt->execute([$_POST['product_id']]);
// on recupere le produit de la base de données et renvoie le résultat sous forme de tableau
$product = $stmt->fetch(PDO::FETCH_ASSOC);
// Vérifie si le produit existe (le tableau n'est pas vide)
if ($product && $quantity > 0) {
// Le produit existe dans la base de données, maintenant nous pouvons créer/mettre à jour la variable de session pour le panier
if (isset($_SESSION['cart']) && is_array($_SESSION['cart'])) {
if (array_key_exists($product_id, $_SESSION['cart'])) $_SESSION['cart'][$product_id] += $quantity; // Le produit existe dans le panier, il suffit donc de mettre à jour la quantité
else $_SESSION['cart'][$product_id] = $quantity; // Le produit n'est pas dans le panier alors on l'ajoute
} else $_SESSION['cart'] = array($product_id => $quantity); // Il n'y a pas de produits dans le panier, ceci ajoutera le premier produit au panier
}
// Empêcher la resoumission du formulaire...
exit(header('location: index.php?page=cart'));
}
// ----- PARTIE SUPRRESSION DES PRODUITS DE LA CARTE -----
// on supprime le produit du panier, on vérifie le paramètre d'URL "remove", c'est l'identifiant du produit, on vérifie qu'il s'agit d'un nombre et il est dans le panier
if (
isset($_GET['remove'])
&& is_numeric($_GET['remove'])
&& isset($_SESSION['cart'])
&& isset($_SESSION['cart'][$_GET['remove']])
) unset($_SESSION['cart'][$_GET['remove']]); // Supprimer le produit du panier
// ----- Obtenir des produits dans le panier et sélectionner dans la base de données -----
// Vérifier la variable de session pour les produits dans le panier
$products_in_cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
$products = array();
$subtotal = 0.00;
// S'il y a des produits dans le panier
if ($products_in_cart) {
// Il y a des produits dans le panier, nous devons donc sélectionner ces produits dans la base de données
// Produits dans le tableau du panier vers le tableau de chaînes de points d'interrogation, nous avons besoin de l'instruction SQL pour inclure IN (?,?,?,...etc)
$array_to_question_marks = implode(',', array_fill(0, count($products_in_cart), '?'));
$stmt = $pdo->prepare('SELECT * FROM products WHERE id IN (' . $array_to_question_marks . ')');
// Nous n'avons besoin que des clés du tableau, pas des valeurs, les clés sont les identifiants des produits
$stmt->execute(array_keys($products_in_cart));
// Récupère les produits de la base de données et renvoie le résultat sous forme de tableau
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Calcule le prix total
foreach ($products as $product) {
$subtotal += (float) $product['price'] * (int) $products_in_cart[$product['id']];
}
}
?>
<!------------------------------------------------- LA PARTIE HTML DE LA CARTE ------------------------------------------------------------->
<?= template_header('Cart') ?>
<div class="cart content-wrapper">
<h1>Shopping Cart</h1>
<form action="index.php?page=cart" method="post">
<table>
<thead>
<tr>
<td colspan="2">Product</td>
<td>Price</td>
<td>Quantity</td>
<td>Total</td>
</tr>
</thead>
<tbody>
<?php if (empty($products)): ?>
<tr>
<td colspan="5" style="text-align:center;">You have no products added in your Shopping Cart</td>
</tr>
<?php else: ?>
<?php foreach ($products as $product): ?>
<tr>
<td class="img">
<a href="index.php?page=product&id=<?=$product['id']?>">
<img src="imgs/<?=$product['img']?>" width="50" height="50" alt="<?=$product['name']?>">
</a>
</td>
<td>
<a href="index.php?page=product&id=<?=$product['id']?>"><?=$product['name']?></a>
<br>
<a href="index.php?page=cart&remove=<?=$product['id']?>" class="remove">Remove</a>
</td>
<td class="price">$<?=$product['price']?></td>
<td class="quantity">
<?=$products_in_cart[$product['id']]?>
</td>
<td class="price">$<?=$product['price'] * $products_in_cart[$product['id']]?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<div class="subtotal">
<span class="text">total price</span>
<span class="price">$<?=$subtotal?></span>
</div>
</form>
</div>
<?=template_footer()?>