Bonjour,
Tout d'abord je précise que je suis débutant donc j'appelle à une certaine indulgence envers mon soucis...
J'ai essayé, dans le cadre de la création d'un outil de gestion de bon de commandes, de réaliser un 'panier'.
Après quelques heures de galère j'ai décidé de me servir d'un script assez facile à mettre en place sur mon projet.
J'ai donc réussi à l'incorporer, mais maintenant je n'arrive pas à réaliser l'insertion des produits et de leur quantité dans ma base de données.
Pour vous expliquer, mon insertion doit se faire premièrement dans une table commande puis dans une table commande_contenu.
Voci mon script d'insertion :
ajout_commande.php
La première partie fonctionne(insertion dans la table commande), mais pas la deuxième(insertion des données id_produits et quantite dans la table commande_contenu. A la ligne 26, j'ai l'erreur suivante :
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 <?php $id_produits = !empty($_POST['id_produit']) ? $_POST['id_produit'] : NULL; $quantites= !empty($_POST['quantite']) ? $_POST['quantite'] : NULL; // Requêtes d'ajout d'ouvrages à la commande if(isset($_POST['commander'])){ // Création de la commande $commander = mysqli_real_escape_string($con, htmlspecialchars($_POST['commander'])); $commande1="INSERT INTO commande(`id_client`,`etat_commande`) VALUES (1, 'en attente')"; //exécution de la requete if(!mysqli_query($con, $commande1) ){ echo("Erreur dans la requete : " . $commande1 . ' <br>Erreur :' . mysqli_error($con)); } // récupération de l'id nouvellement inséré en BDD $id_commande = mysqli_insert_id($con); $_SESSION['id_commande'] = $id_commande; // Puis boucle sur le/les produit(s) pour les ajouter dans la commande foreach($quantites as $id_produits => $qte ){ if(!empty( $qte) && !empty($id_produits) ) { $commande2="INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`) VALUES ('".$id_commande."', '".$id_produits."', '".$qte."')"; //exécution de la requete 2 avec le même id_commande. if(!mysqli_query($con, $commande2) ){ echo("Erreur dans la requete : " . $commande2 . ' <br>Erreur :' . mysqli_error($con)); } } } header('Location:recap_commande.php'); }
Warning: Invalid argument supplied for foreach() in C:\wamp64\www\semaine5\ajout_commande.php
Puis, même ligne :
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp64\www\semaine5\ajout_commande.php:26) in C:\wamp64\www\semaine5\ajout_commande.php on line 40
Je vous mets aussi mon script de panier pour que vous puissiez mieux comprendre :
commande.php
Merci pour votre attention, bonne journée
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 <?php // Création de la commande si n'existe pas dans la session de l'utilisateur if (! isset($_SESSION['commande'])) $_SESSION['commande'] = array(); // Voici les données externes utilisées par la commande $id_produit = isset($_GET['id_produit']) ? $_GET['id_produit'] : null; $nom_produit = isset($_GET['nomProduit']) ? $_GET['nomProduit'] : null; $prix_produit = isset($_GET['prixProduit']) ? $_GET['prixProduit'] : '?'; $qte_produit = isset($_GET['qte_produit']) ? $_GET['qte_produit'] : 1; // Voici les traitements de la commande if ($id_produit == null) echo 'Veuillez sélectionner un produit pour le mettre dans la commande!'; // Message si pas d'acticle sélectionné else if (isset($_GET['ajouter'])){ // Ajouter un nouvel produit $_SESSION['commande'][$id_produit]['nom'] = $nom_produit; $_SESSION['commande'][$id_produit]['prix'] = $prix_produit; $_SESSION['commande'][$id_produit]['qte'] = $qte_produit; } else if (isset($_GET['modifier'])) $_SESSION['commande'][$id_produit]['qte'] = $qte_produit; // Modifier la quantité achetée else if (isset($_GET['supprimer'])) unset($_SESSION['commande'][$id_produit]); // Supprimer un produit de la commande // Voici l'affichage de la commande echo '<h2>Contenu de votre commande</h2><ul>'; if (isset($_SESSION['commande']) && count($_SESSION['commande'])>0){ $total_commande = 0; foreach($_SESSION['commande'] as $id_produit=>$produit_acheté){ // On affiche chaque ligne de la commande : nom, prix et quantité modifiable + 2 boutons : modifier la qté et supprimer l'produit if (isset($produit_acheté['nom']) && isset($produit_acheté['prix']) && isset($produit_acheté['qte'])){ echo '<li><form>', $produit_acheté['nom'], ' (', number_format($produit_acheté['prix'], 2, ',', ' '), ' ) ', '<input type="hidden" name="id_produit" value="', $id_produit , '" /> <br />Qté: <input type="text" name="qte_produit" value="', $produit_acheté['qte'] , '" /> <input type="submit" name="modifier" value="Nouvelle Qté" /> <input type="submit" name="supprimer" value="Supprimer" /> </form> </li>'; // Calcule le prix total de la commande $total_commande += $produit_acheté['prix'] * $produit_acheté['qte']; } } echo '<hr><h3>Total: ', number_format($total_commande, 2, ',', ' '), ' '; // Affiche le total de la commande } else { echo 'Votre commande est vide'; } // Message si la commande est vide echo "</ul>"; ?>
Partager