Voici un résumé de ma page et de sont fonctionnement pour bien comprendre mon probleme.
Ma page ajoutercommande.php cette page sert à afficher tous les produits qui sont dans la base de donné ainsi de commander un ou des produits pour un client.
1: le vendeur qui utilise cette interface devra sélectionner un client déjà enregistré dans la BDD a l'aide d'un SELECT pour récupérer le ID client ainsi que tous les informations associer à cette ID .
2: le vendeur devra commander(bouton) et confirmer(oui ou non) la commande et un récapitulatif de cette commande sera affiché a l’écran avec le montant avant et après Taxe.
2.1: si le vendeur clique sur bouton non la commande est rollback(cancel) et si il clique sur oui les information sur la commande et le client seront dans une fonction pour enregistrer la commande.
Donc voila je suis coincé une fois que je sélectionne le client et je clique sur le bouton Commandez il m'affiche une erreur : Erreur de requête : 1054 – Champ 'lient_info' inconnu dans where clause
j'ai fais un CTRL + F pour chercher dans ma page l'erreur : lient_info , et j'ai rien trouvé.
Voici mon code de la page ajoutercommande.php, j'ai documenté un peu le code pour mieux si retrouver.
Ma fonction enregistrer commande j'envois 3 variable en paramètre donc le tableau commande, l'id client et l'adresse_client.
Code : 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
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207 <?php <?php require_once("../../inc/connectDB.php"); require_once("../../inc/sql.php"); unset($_SESSION["message"]); // Catalogue client $recherche = isset($_GET['recherche']) ? trim($_GET['recherche']) : ""; // liste tous les produits lié a une categorie $liste = afficherProduits($conn, $recherche); // liste tous les clients enrigistré $afficherclient = afficherclients($conn); //recupere la valeur ID du SELECT name:client_id if (isset($_POST["client_id"])){ $_POST["client_id"]; //fonction qui recupere les informations client par son ID $_SESSION['client_info'] = lireClient($conn, $_POST["client_id"]); //vérification des valeurs recupéré var_dump($_SESSION['client_info']['client_id']); var_dump($_SESSION['client_info']['client_adresse']); } // retour des formulaires de confirmation // ------------------------------------ $confirme = isset($_POST['confirme']) ? $_POST['confirme'] : ""; $confirmation = isset($_POST['confirmation']) ? $_POST['confirmation'] : ""; if ($confirmation == "OK") { header('Location: authentification.php'); }?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <title>Catalogue produits</title> <link rel="stylesheet" href="assets/css/style.css"> </head> <header> <p class="menu"> <a href="../afficher/affichercommande.php">Afficher Commande</a> </p> </header> <body> <h1>Catalogue des produits</h1> <?php if (isset($_SESSION["identifiant_utilisateur"])) : ?> <h2>Utilisateur : <?= $_SESSION["identifiant_utilisateur"] ?><br> <?php endif; ?> <p class="menu"> <a href="deconnexion.php"><?= isset($_SESSION["identifiant_utilisateur"]) ? "Déconnexion" : "Connexion" ?></a> </p> <!-- moteur de rechercher --> <form id="recherche" action="" method="get"> <label>Produit</label> <input type="text" name="recherche" value="<?= $recherche ?>" placeholder="nom du produit contient ces caractères"> <input type="submit" value="Recherchez"> </form> <form id="commande" action="" method="POST"> <!-- affiche la liste de tous les clients enrigistré dans la base de donné --> <table> <?php if (count($afficherclient) > 0) : ?> <label>Client</label> <select name="client_id" > <?php foreach ($afficherclient as $row) : ?> <option value="<?= $row["client_id"] ?>"><?= $row["client_prenom"] . ' ' . $row["client_nom"] . ' ' . $row["client_adresse"] ?></option> <?php endforeach; ?> </select> </table> <?php else : ?> <p>Aucun Type Utilisateur trouvé.</p> <?php endif; ?> <!-- affiche la liste des produit en vente --> <table> <tr> <th>Catégorie</th> <th>Nom</th> <th>Descriprion</th> <th>Prix</th> <th>Commander</th> </tr> <!-- <form id="commande" action="" method="POST"> --> <?php foreach ($liste as $row) : ?> <tr> <td style="text-align: center"><?= $row["categorie_nom"] ?></td> <td style="text-align: center"><?= $row["produit_nom"] ?></td> <td style="text-align: center"><?= $row["produit_description"] ?></td> <td style="text-align: center"> <?= $row["produit_prix"] . " $" ?></td> <td style="text-align: center"> <input type="number" min="0" max="<?= $row["produit_quantite"] ?>" name="q<?= $row["produit_id"] ?>" placeholder="quantité"> </td> </tr> <?php endforeach; ?> </form> </table> <!-- bouton qui recupere tous les informations form commande --> <button form="commande" type="submit" name="envoi">Commandez !</button> <?php if (isset($_POST["envoi"])) : ?> <?php $i = 1; $_SESSION["commande"] = []; ?> <?php foreach ($_POST as $p => $q) { if ($q != "" && $q != 0) { $_SESSION["commande"][] = ["produit" => substr($p, 1), "quantité" => $q]; } ++$i; } ?> Tableau récapitulatif de la commande <?php if (count($_SESSION["commande"]) > 0) : ?> <section class="tableau-commande"> <p>Confirmez la commande :</p> <table> <tr> <th>Produit</th> <th>Quantité</th> <th>Prix</th> </tr> <?php $i = 0; foreach ($_SESSION["commande"] as $c) : $produit = lireProduit($conn, $c["produit"]); ?> <tr> <td><?= $produit["produit_nom"] ?></td> <td><?= $c["quantité"] ?></td> <?php $prix[] = $c["quantité"] * $produit["produit_prix"]; ?> <td><?= $prix[$i] ?> $</td> </tr> <?php $i++; endforeach; ?> </table> <p class="total">Total = <?php $total = 0; $taxt = 0; for ($i = 0; $i < count($prix); ++$i) { $total += $prix[$i]; $taxt = $total * 1.15; } echo $total . " $" ?> <br> <?php echo "taxt inclus : " . ROUND($taxt,2). " $"; ?> </p> </section> <section> <form class="form-suppression" action="" method="post"> <input type="submit" name="confirme" value="OUI"> <input type="submit" name="confirme" value="NON"> </form> </section> <?php else : unset($_SESSION["commande"]); ?> <p class="erreur">Vous devez selectionner une quantité pour au moins un produit pour passer une commande.</p> <?php endif; endif; ?> <!-- function SQL enrigistrerCommande envoie la commande sous forme de tableau et l'ID ainsi que l'adresse. --> <?php if ($confirme !== "") { if ($confirme === "OUI") { if (isset($_SESSION["identifiant_utilisateur"])) { enregistrerCommande($conn, $_SESSION["commande"], $_SESSION["client_info"]["client_id"], $_SESSION["client_info"]["client_adresse"]); $_SESSION["message"] = "<p class=\"succes\">Commande effectuée.</p>"; unset($_SESSION["commande"]); } else { echo "<p>Vous devez vous connecter ou créer un compte.</p>"; ?> <form class="form-suppression" action="" method="post"> <input type="submit" name="confirmation" value="OK"> </form> <?php } } else if ($confirme === "NON") { $_SESSION["message"] = "<p class=\"erreur\">Commande non effectuée.</p>"; unset($_SESSION['commande']); } } ?> <?php echo isset($_SESSION["message"]) ? $_SESSION["message"] : " " ?> </body> </html>
Section commandes de ma BDD
Code : 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 <?php /** * Fonction enregistrerCommande * Auteur : Samuel * Date : 2020-01-27 * But : ajout de ligne dans les tables commande et produit_commande * Arguments en entrée : $conn = contexte de connexion * $commande = tableau contenant les id et les quantités des produits commandés * Valeurs de retour : aucune */ function enregistrerCommande($conn, array $commande, $client_id, $client_adresse) { mysqli_begin_transaction($conn); // Début de la transaction // Création de la commande $req = "INSERT INTO commandes (commande_client_id, commande_adresse) VALUES ($client_id, $client_adresse);"; // die($req); if ($result = mysqli_query($conn, $req)) { $row = mysqli_affected_rows($conn); } else { errSQL($conn); mysqli_rollback($conn); exit; } $commande_id = mysqli_insert_id($conn); foreach($commande as $c) { // Pour chaque produit commandé // Récupération de la quantité actuelle des produits commandés $req = "SELECT produit_quantite FROM produits WHERE produit_id = ". $c["produit"]; if ($result = mysqli_query($conn, $req)) { $row = mysqli_fetch_row($result); $quantite = $row[0]; } else { errSQL($conn); mysqli_rollback($conn); exit; } $nouvelleQuantite = $quantite - $c["quantité"]; // Insert les produits commandés dans la table produit_commande $req = "INSERT INTO produits_commandes (produits_fk_id, commandes_fk_id, produit_commande_quantite) VALUES (" . $c["produit"] . ", $commande_id," . $c["quantité"] . ");"; if ($result = mysqli_query($conn, $req)) { $row = mysqli_affected_rows($conn); } else { errSQL($conn); mysqli_rollback($conn); exit; } // Si il y a suffisament de stock, mise à jours de la quantité des produits commandés if ($c["quantité"] <= $quantite) { $req = "UPDATE produits SET produit_quantite = $nouvelleQuantite WHERE produit_id = " . $c["produit"]; if ($result = mysqli_query($conn, $req)) { $row = mysqli_affected_rows($conn); } else { errSQL($conn); mysqli_rollback($conn); exit; } } else { mysqli_rollback($conn); ?> <p class="erreur">Erreure : Plus assez de stock pour le produit numéro <?= $c["produit"] ?>.</p> <?php exit; } } mysqli_commit($conn); }
Code : 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 -- ----------------------------------------------------- -- Table `i-vend`.`commandes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `i-vend`.`commandes` ( `commande_id` INT NOT NULL AUTO_INCREMENT, `commande_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `commande_etat` VARCHAR(255) DEFAULT 'Procedure' not null, `commande_commentaire` VARCHAR(255) NULL, `commande_adresse` VARCHAR(255) NOT NULL, `commande_client_id` INT NOT NULL, PRIMARY KEY (`commande_id`), INDEX `fk_commandes_Clients_idx` (`commande_client_id` ASC), CONSTRAINT `fk_commandes_Clients` FOREIGN KEY (`commande_client_id`) REFERENCES `i-vend`.`Clients` (`client_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
Partager