INSERT en db de Variables
Fermé
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
-
Modifié le 11 janv. 2021 à 11:45
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 12 janv. 2021 à 12:06
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 12 janv. 2021 à 12:06
A voir également:
- INSERT en db de Variables
- Touche insert - Guide
- Db designer - Télécharger - Bases de données
- Db viewer - Télécharger - Gestion de données
- Disk boot failure insert system disk and press enter - Guide
6 réponses
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
Modifié le 11 janv. 2021 à 12:12
Modifié le 11 janv. 2021 à 12:12
Bonjour,
Déjà, merci de poster correctement ton code sur le forum en précisant dans les balises de code, le Langage (ici php )
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite :
Donc aux lignes
Ce qui semble normal... puisque tu n'a aucun champ portant ces "noms" dans ton formulaire...
D'ailleurs;. d'où vient ce "name" que tu essais de mettre
.. non !! le name.. c'est
( à mon avis, tu as inversé avec l'attribut value ..
et pour avoir l'id du produit, il faudrait ajouter, dans ton form, un input hidden avec la valeur correspondante
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,
devient
Si c'est le cas, tu pourras récupérer l'id nouvellement créé via l'instruction : mysqli_insert_id
Voila ... avec tout ça.. tu devrais pouvoir t'en sortir...
Reste à écrire le code proprement et correctement..
Je t'invite à lire ceci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
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..
Déjà, merci de poster correctement ton code sur le forum en précisant dans les balises de code, le Langage (ici php )
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite :
avec ce code, ça me dit : undefined index aux lignes de $quantite et $produit)
Donc aux lignes
$quantite=$_POST['quantite']; $produit=$_POST['id_produit'];
Ce qui semble normal... puisque tu n'a aucun champ portant ces "noms" dans ton formulaire...
D'ailleurs;. d'où vient ce "name" que tu essais de mettre
name="<?php echo $quantite; ?>"
.. non !! le name.. c'est
name="quantite">tout simplement !!
( à mon avis, tu as inversé avec l'attribut value ..
value="qte"
et pour avoir l'id du produit, il faudrait ajouter, dans ton form, un input hidden avec la valeur correspondante
<form method ='POST' action = 'recherche_produits.php'> <input type="hidden" name="id_produit" value="<?php echo $ligne['id_produit']; ?>" />
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...
Reste à écrire le code proprement et correctement..
Je t'invite à lire ceci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
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..
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
Modifié le 11 janv. 2021 à 14:24
Modifié le 11 janv. 2021 à 14:24
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 ...
Pour rappel voici mon formulaire :
Merci pour ton temps jordane45 !
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 ...
Pour rappel voici mon formulaire :
<?php while($ligne = $resultat->fetch_assoc()){ ?> <tr> <td><?php echo $ligne['id_produit']; ?></td> <td><?php echo $ligne['nomProduit']; ?></td> <td><?php echo $ligne['nom']; ?></td> <td><?php echo $ligne['prixProduit']; ?>€</td> <td> <form method ='POST' action = 'recherche_produits.php'> <center> <input type="number" step="1" value="qte" name="quantite" min="0" max="20"> <input type="submit" value="Commander" name="commander" class="btn btn-sm btn-primary"> <input type="hidden" name="id_produit" value="<?php echo $ligne['id_produit']; ?>" /> </center> </form> </td> </tr> <?php } ?>
Merci pour ton temps jordane45 !
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
11 janv. 2021 à 14:36
11 janv. 2021 à 14:36
Déplace tes balises FORM en dehors de ton while
et modifie le name de tes input en "array"
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
<form method ='POST' action = 'recherche_produits.php'> <?php while($ligne = $resultat->fetch_assoc()){ ?> ... le reste de ton code <?php } ?> </form>
et modifie le name de tes input en "array"
<input type="hidden" name="id_produit[]" value="<?php echo $ligne['id_produit']; ?>" /> <input type="number" step="1" value="qte" name="quantite[<?php echo $ligne['id_produit']; ?>]" min="0" max="20"> <input type="submit" value="Commander" name="commander" class="btn btn-sm btn-primary">
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 // ... } } ?>
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
11 janv. 2021 à 16:19
11 janv. 2021 à 16:19
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 :
Ce qui m'occasionne une nouvelle erreur ;
Erreur :Incorrect integer value: '' for column 'quantite' at row 1
Bonne journée et merci.
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
Bonne journée et merci.
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
11 janv. 2021 à 16:24
11 janv. 2021 à 16:24
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...
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...
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
Modifié le 11 janv. 2021 à 16:49
Modifié le 11 janv. 2021 à 16:49
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.
Bonne soirée.
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.
Bonne soirée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
11 janv. 2021 à 17:27
11 janv. 2021 à 17:27
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.
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 } } }
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
11 janv. 2021 à 17:42
11 janv. 2021 à 17:42
// 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)); } } } }
nono72i
Messages postés
6
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
12 janvier 2021
12 janv. 2021 à 09:15
12 janv. 2021 à 09:15
Je sais pas trop comment te remercier...
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
Merci beaucoup !
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
Merci beaucoup !
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
12 janv. 2021 à 12:06
12 janv. 2021 à 12:06
Il faut corriger dans la boucle for
// 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)); } } }