J'essaye donc via un formulaire, d'insérer les id_produit, et quantite dans commande_contenu
Je pense qu'il me faut plusieurs requête à la suite, mais c'est là que je bloque, notamment à cause de l'id_commande.
voici mes requêtes :
$quantite=$_POST['quantite']; $produit=$_POST['id_produit']; // Requêtes d'ajout d'ouvrages à la commande if(isset($_POST['commander'])){ $commander = mysqli_real_escape_string($con, htmlspecialchars($_POST['commander']));
$commande1="INSERT INTO commande('id_commande','id_client','etat_commande') VALUES ('".$_POST['id_commande']."' , 1, 'en attente')";
$commande2="INSERT INTO commande_contenu('id_commande','id_produit','quantite') VALUES ('".$_POST['id_commande']."', '".$_POST['id_produit']."', '".$_POST['quantite']."')"; }
(avec ce code, ça me dit : undefined index aux lignes de $quantite et $produit)
Je ne sais pas si je vais être très clair, mais comment faire pour récupérer un 'id_commande' dans ma deuxième requête alors que je n'ai pas besoin de l'insérer dans la première.
Je suis perdu ...
Une fois que ça sera corrigé ... on passe ensuite à tes requêtes....
Déjà, tu as une erreur dans la première .. ce n'est pas id_commande ... mais id (tout court !! )
J'espère, au passage, que ce champ est en auto-incrément ...
Si c'est le cas, tu ne dois pas le mettre dans la requête d'insert
donc,
$commande1="INSERT INTO commande('id_commande','id_client','etat_commande')
VALUES ('".$_POST['id_commande']."' , 1, 'en attente')";
devient
$commande1="INSERT INTO commande('id_client,etat_commande)
VALUES (1, 'en attente')";
Si c'est le cas, tu pourras récupérer l'id nouvellement créé via l'instruction : mysqli_insert_id
$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);
Voila ... avec tout ça.. tu devrais pouvoir t'en sortir...
N'hésites pas non plus à afficher le contenu de ta variable $_POST ( via un var_dump ou un print_r ) histoire de voir ce qu'elle contient lorsque tu "submit" ton formulaire..
Wow, merci pour cette réponse + que détaillée, et désolé pour les codes sans balises !
J'ai une petite dernière question...
Mon formulaire se présente sous cette forme :
Est-il possible que, si l'internaute saisit plusieurs quantités sur différents produits, cela insère tous les champs des produits voulus et pas seulement celui ou le clic est effectué ?
Je ne pense pas mais sait-on jamais ...
Dans ta variables $_POST tu va récupérer des ARRAY avec les différents champs remplis...
Il te suffit de faire une boucle dessus ( un FOREACH par exemple) pour tous les traiter..
Fais un print_r de $_POST pour voir ce que ça te retourne quand tu remplis un ... puis plusieurs produits..
Puis
<?php
// Pour voir ce que contient la variable $_POST
echo "<pre>";
print_r($_POST);
echo "</pre>";
// récupération PROPRE des variables AVANT de les utiliser
$id_produits = !empty($_POST['id_produit']) ? $_POST['id_produit'] : NULL;
$quantites= !empty($_POST['quantite']) ? $_POST['quantite'] : NULL;
// Si il y a des quantités renseignées ...
if($quantites ){
// Création de la commande
// .. je te laisse remettre le code qui sert à créer la commande
// Puis boucle sur le/les produit(s) pour les ajouter dans la commande
foreach($quantites as $id_p => $qte ){
echo "<br> ID : ". $id . " Quantité : " . $qte ;
// ... puis le reste du code pour ajouter le ou les produits à ta commande
// ...
}
}
?>
C'est donc possible super.
En revanche quand je modifie les input en array j'ai l'erreur suivante :
Notice: Array to string conversion in C:\wamp64\www\bon_commande\requetes_produits.php on line 49
J'ai donc essayé ça :
$i=1;
$commande2="INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`)
VALUES ('".$id_commande."', '".$_POST['id_produit'][$i]."', '".$_POST['quantite'][$i]."')";
Ce qui m'occasionne une nouvelle erreur ;
Erreur :Incorrect integer value: '' for column 'quantite' at row 1
Visiblement ... tu lis en diagonale les réponses que je te donne ...
As tu fais les print_r que je t'ai demandé ??
As tu vus, tel que je te l'ai indiqué, que désormais c'était des array contenant toutes les valeurs ?
As tu vu le bout de code que je t'ai donné avec la boucle ?
L'as tu pris en compte dans ton code ? (j'en doute)..
Donc relis bien ma réponse précédente .. applique ce que j'y ai écrit .. et reviens nous voir avec le code COMPLET une fois que ça sera fait si tes soucis persistent...
Désolé, pour t'expliquer ma situation je suis en stage de 1ère année de BTS sans aide informatique sur place et tout ça je n'ai encore jamais fait. Je ne comprends pas grand chose à ce qu'il faut mettre dans les boucles.
J'ai bien fait les print_r, mais où placer le if et le foreach je n'en sais rien..
Je vais essayer de me documenter et revenir ici si j'ai quelque chose à partager.
Bon... j'en suis arrivé là. C'est probablement très nul, désolé d'avance.
Je n'y arrive pas.
Les array fonctionnent et m'indiquent bien la quantité et l'id.
L'insertion ne se fait plus.
$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'])){
if($quantites>0){
// 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);
// Puis boucle sur le/les produit(s) pour les ajouter dans la commande
foreach($quantites as $id_produits => $qte ){
echo "<br> ID : ". $id_produits . " Quantité : " . $qte ;
$commande2="INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`)
VALUES ('".$id_commande."', '".$_POST['id_produit']."', '".$_POST['quantite']."')";
//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));
}
// ... puis le reste du code pour ajouter le ou les produits à ta commande
}
}
}
// Pour voir ce que contient la variable $_POST
echo "<pre>";
print_r($_POST);
echo "</pre>";
$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'])){
if($quantites>0){
// Création de la commande
// $commander = mysqli_real_escape_string($con, htmlspecialchars($_POST['commander'])); // ne sert à rien
$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);
// Puis boucle sur le/les produit(s) pour les ajouter dans la commande
foreach($quantites as $id_produits => $qte ){
echo "<br> ID : ". $id_produits . " Quantité : " . $qte ; // ça.. ça t'affiche quoi ??
$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));
}
}
}
}
echo "<br> ID : ". $id_produits . " Quantité : " . $qte ; // ça.. ça t'affiche quoi ??
Ca m'affiche ça :
ID : 3 Quantité : 2
ID : 1 Quantité : 1
Et il y'a aussi ça mais j'imagine que c'est la preuve que ça fonctionne mais que ces id n'ont pas été séléctionnés:
ID : 4 Quantité : Erreur dans la requete : INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`) VALUES ('44', '4', '')
Erreur :Incorrect integer value: '' for column 'quantite' at row 1
ID : 2 Quantité : Erreur dans la requete : INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`) VALUES ('44', '2', '')
Erreur :Incorrect integer value: '' for column 'quantite' at row 1
// Puis boucle sur le/les produit(s) pour les ajouter dans la commande
foreach($quantites as $id_produits => $qte ){
echo "<br> ID : ". $id_produits . " Quantité : " . $qte ; // ça.. ça t'affiche quoi ??
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));
}
}
}