Enregistrement de tableau avec Id input dans MySQL
Résolu/Fermé
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
-
5 juil. 2017 à 13:35
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 7 juil. 2017 à 21:28
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 7 juil. 2017 à 21:28
A voir également:
- Enregistrement de tableau avec Id input dans MySQL
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Https //id.sonyentertainmentnetwork.com/id/management/ ✓ - Forum PS4
4 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
6 juil. 2017 à 15:11
6 juil. 2017 à 15:11
Du côté de ton tableau
et du côté de ton php, commence par regarder ce que donne :
Tu devrais voir tous les données remplies ....
while ($data = $Stat->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td align="left" valign="middle"><div style="display:none;"><?php echo $data["Libelle"] . " " . $data["Contenance"];?></div> <input type="text" name="Fr_Libelle[]" class="span2" id="Fr_Libelle_<?php echo $i;?>" style="width:100%; text-align:left; margin:0;" readonly value="<?php echo $data["Libelle"] . " " . $data["Contenance"];?>" > </td> <td align="center" valign="middle"> <input type="text" name="Fr_Quantite[<?php echo $i;?>]" class="span2" id="Fr_Quantite_<?php echo $i;?>" style="width:100%; text-align:center; margin:0;" maxlength="2" value="0" oninput="calcul('<?php echo $i;?>')"> </td> <td align="right" valign="middle"> <input type="text" name="Fr_Prix[<?php echo $i;?>]" class="span2" id="Fr_Prix_<?php echo $i;?>" style="width:100%; text-align:right; margin:0;" maxlength="2" readonly value="<?php echo $data["Prix"];?>" oninput="calcul('<?php echo $i;?>')"> </td> <td align="right" valign="middle"> <input type="text" class="span2" id="Fr_Total_<?php echo $i;?>" style="width:100%; text-align:right; margin:0;" maxlength="2" readonly value="0"> </td> </tr> <?php $i++; } ?>
et du côté de ton php, commence par regarder ce que donne :
print_r($_POST);
Tu devrais voir tous les données remplies ....
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
5 juil. 2017 à 14:40
5 juil. 2017 à 14:40
Bonjour,
Déjà.. commence par appliquer ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Puis reviens nous poster ton code modifié.
On verra ensuite pour le reste...
Sachant que pour le "reste" il faudra simplement mettre des attributs NAME à tes inputs sous forme d'array
par exemple :
Côté php .. tu n'auras plus qu'à boucler sur l'array pour les insérer en bdd...
Déjà.. commence par appliquer ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Puis reviens nous poster ton code modifié.
On verra ensuite pour le reste...
Sachant que pour le "reste" il faudra simplement mettre des attributs NAME à tes inputs sous forme d'array
par exemple :
<input type="text" name = "Fr_Total[<?php echo $i;?>]" class="span2" id="Fr_Total_<?php echo $i;?>" style="width:100%; text-align:right; margin:0;" maxlength="2" readonly value="0">
Côté php .. tu n'auras plus qu'à boucler sur l'array pour les insérer en bdd...
$array_total = !empty($_POST['Fr_Total']) ? $_POST['Fr_Total'] : NULL; foreach($array_total as $T){ //..... //le temps des tests pour que tu vois ce que ça donne : // echo "<br>"; $T; }
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
Modifié le 5 juil. 2017 à 15:02
Modifié le 5 juil. 2017 à 15:02
J'ai ajouté l'attribut NAME aux inputs,
Pour la gestion des erreurs, c'est dans mon fichier config,
J'ai mis les lignes d'array comme ceci :
Pour la gestion des erreurs, c'est dans mon fichier config,
J'ai mis les lignes d'array comme ceci :
<?php $Fr_Nom = trim(strip_tags($_POST["Fr_Nom"])); $Fr_Carte = trim(strip_tags($_POST["Fr_Carte"])); $Fr_Bon = trim(strip_tags($_POST["Fr_Bon"])); $Fr_Date = trim(strip_tags($_POST["Fr_Date"])); $Fr_Total = trim(strip_tags($_POST["Fr_Total"])); $Fr_Pourcentage = trim(strip_tags($_POST["Fr_Pourcentage"])); $Fr_Nom = !empty($Fr_Nom) ? "$Fr_Nom" : NULL; $Fr_Carte = !empty($Fr_Carte) ? "$Fr_Carte" : NULL; $Fr_Bon = !empty($Fr_Bon) ? "$Fr_Bon" : NULL; $Fr_Date = !empty($Fr_Date) ? "$Fr_Date" : NULL; $Fr_Total = !empty($Fr_Total) ? "$Fr_Total" : NULL; $Fr_Pourcentage = !empty($Fr_Pourcentage) ? "$Fr_Pourcentage" : NULL; $array_libelle = !empty($_POST['Fr_Libelle']) ? $_POST['Fr_Libelle'] : NULL; $array_quantite = !empty($_POST['Fr_Quantite']) ? $_POST['Fr_Quantite'] : NULL; $array_unit = !empty($_POST['Fr_PrixUnit']) ? $_POST['Fr_PrixUnit'] : NULL; $array_total = !empty($_POST['Fr_PrixTotal']) ? $_POST['Fr_PrixTotal'] : NULL; $FR_PDO = $pdo->prepare("INSERT INTO tb_user_voucher (Nom, Carte, Bon, Date, Total, Pourcentage, Libelle, Quantite, PrixUnit, PrixTotal) VALUES (:Fr_Nom, :Fr_Carte, :Fr_Bon, :Fr_Date, :Fr_Total, :Fr_Pourcentage, :Fr_Libelle, :Fr_Quantite, :Fr_PrixUnit, :Fr_PrixTotal)"); $FR_PDO->execute(array( "Fr_Nom" => $Fr_Nom, "Fr_Carte" => $Fr_Carte, "Fr_Bon" => $Fr_Bon, "Fr_Date" => $Fr_Date, "Fr_Total" => $Fr_Total, "Fr_Pourcentage" => $Fr_Pourcentage, "Fr_Libelle" => $Fr_Libelle, "Fr_Quantite" => $Fr_Quantite, "Fr_PrixUnit" => $Fr_PrixUnit, "Fr_PrixTotal" => $Fr_PrixTotal ));Et là je suis bloqué :D
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
>
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
5 juil. 2017 à 16:17
5 juil. 2017 à 16:17
Pour la gestion des erreurs, c'est dans mon fichier config,
Pas que .....
Si tu avais bien lu la doc que je t'ai donné... tu verrais qu'il te manque un bloc TRY/CATCH au niveau de l’exécution de ta requête...
Pour ce qui est de ton souci...
Fais donc un
print_r($Fr_Total);et regarde ce que ça te donne.....
Au passage... tu me confirmes que tu sais ce qu'est un ARRAY et comment boucler dessus ??
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
5 juil. 2017 à 16:29
5 juil. 2017 à 16:29
Try et catch comme ce qui est dans mon fichier config ?
Ou je dois quand même l'ajouter à la fin de ma requête comme sur le lien que tu m'as donné ?
Le
Il enregistre une ligne dans ma table bien entendu, mais tout ce qui fait parti du tableau est soit NULL soit 0
try{$pdo = new PDO('mysql:host='.MYSQL_HOST.';dbname='.MYSQL_BASE, MYSQL_USER, MYSQL_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("SET CHARACTER SET utf8");} catch(PDOException $e) {echo "Erreur: ".$e->getMessage();} error_reporting(E_ALL); ini_set('display_errors', true);
Ou je dois quand même l'ajouter à la fin de ma requête comme sur le lien que tu m'as donné ?
Le
print_r($Fr_Total);me donnera une valeur unique comme le pseudo. Je fais un
print_r($Fr_PrixTotal);et voici le résultat : 0
Il enregistre une ligne dans ma table bien entendu, mais tout ce qui fait parti du tableau est soit NULL soit 0
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
>
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
5 juil. 2017 à 16:32
5 juil. 2017 à 16:32
A ton avis ..... Si c'est dans le lien que je t'ai donné.....
comme sur le lien que tu m'as donné ?
Concernant ton souci...
Peux tu faire un
print_r($_POST);
et nous montrer ce que ça donne ??
Faudrait aussi que nous nous montres le code de ton formulaire (celui que tu as désormais avec les "name" pour tes inputs )
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
>
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
5 juil. 2017 à 16:34
5 juil. 2017 à 16:34
Pour être sûr de bien comprendre ...
Tu veux, lorsque tu cliques sur le bouton submit :
- Enregistrer les premiers input que tu as dans ton formulaire ... mais aussi tous ceux que tu génères avec ta boucle ???
Ne serait pas plutôt :
- Enregistrement des premiers input
- Mise à jour, dans la bdd, des inputs générés par ta boucle php
???
Tu veux, lorsque tu cliques sur le bouton submit :
- Enregistrer les premiers input que tu as dans ton formulaire ... mais aussi tous ceux que tu génères avec ta boucle ???
Ne serait pas plutôt :
- Enregistrement des premiers input
- Mise à jour, dans la bdd, des inputs générés par ta boucle php
???
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
7 juil. 2017 à 11:53
7 juil. 2017 à 11:53
Ca y est ! j'ai enfin réussi grâce à toi !
Je rencontre tout de même un dernier petit soucis, Undefined offset: 8 sur les lignes :
Pourtant je penses avoir définit la valeur 0 !
Afin de me faciliter l'injection de ma requête de mes 800 articles, y aurait-il moyen de limiter l'injection selon si les quantité sont 0 alors il n'ajoute pas la ligne ?
Par exemple, j'ai :
Il n'ajoutera que Libellé 1 et Libellé 3 ?
$FR_PDO = $pdo->prepare("INSERT INTO tb_user_voucher (Nom, Carte, Pseudo, Email, Code, Date, NetPayer, Pourcentage, Libelle, Quantite, PrixUnit, PrixTotal) VALUES (:Fr_Nom, :Fr_Carte, :Fr_Pseudo, :Fr_Email, :Fr_Code, :Fr_Date, :Fr_NetPayer, :Fr_Pourcentage, :array_lib, :array_qte, :array_unt, :array_tot)"); foreach($array_lib as $key => $value) { $FR_PDO->execute(array( ":Fr_Nom" => $Fr_Nom, ":Fr_Carte" => $Fr_Carte, ":Fr_Pseudo" => $Fr_Pseudo, ":Fr_Email" => $Fr_Email, ":Fr_Code" => $Fr_Code, ":Fr_Date" => $Fr_Date, ":Fr_NetPayer" => $Fr_NetPayer, ":Fr_Pourcentage" => $Fr_Pourcentage, ":array_lib" => $value, ":array_qte" => $array_qte[$key], ":array_unt" => $array_unt[$key], ":array_tot" => $array_tot[$key] )); }
Je rencontre tout de même un dernier petit soucis, Undefined offset: 8 sur les lignes :
":array_qte" => $array_qte[$key], ":array_unt" => $array_unt[$key], ":array_tot" => $array_tot[$key]
Pourtant je penses avoir définit la valeur 0 !
$array_qte = !empty($_POST['Fr_Quantite']) ? $_POST['Fr_Quantite'] : 0; $array_unt = !empty($_POST['Fr_PrixUnit']) ? $_POST['Fr_PrixUnit'] : 0; $array_tot = !empty($_POST['Fr_PrixTotal']) ? $_POST['Fr_PrixTotal'] : 0;
Afin de me faciliter l'injection de ma requête de mes 800 articles, y aurait-il moyen de limiter l'injection selon si les quantité sont 0 alors il n'ajoute pas la ligne ?
Par exemple, j'ai :
Libellé | Quantité | Prix Unit. |Prix Total |
------------------------------------------------
Libellé 1 | 2 | 200 | 400 |
Libellé 2 | 0 | 300 | 0 |
Libellé 3 | 1 | 100 | 100 |
Il n'ajoutera que Libellé 1 et Libellé 3 ?
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
7 juil. 2017 à 11:56
7 juil. 2017 à 11:56
foreach($array_lib as $key => $value) { $FR_PDO->execute(array( ":Fr_Nom" => $Fr_Nom, ":Fr_Carte" => $Fr_Carte, ":Fr_Pseudo" => $Fr_Pseudo, ":Fr_Email" => $Fr_Email, ":Fr_Code" => $Fr_Code, ":Fr_Date" => $Fr_Date, ":Fr_NetPayer" => $Fr_NetPayer, ":Fr_Pourcentage" => $Fr_Pourcentage, ":array_lib" => $value, ":array_qte" => !empty($array_qte[$key]) ? $array_qte[$key] : 0, ":array_unt" => !empty($array_unt[$key]) ? $array_unt[$key] : 0, ":array_tot" => !empty($array_tot[$key]) ? $array_tot[$key] : 0 )); }
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
7 juil. 2017 à 11:57
7 juil. 2017 à 11:57
Afin de me faciliter l'injection de ma requête de mes 800 articles, y aurait-il moyen de limiter l'injection selon si les quantité sont 0 alors il n'ajoute pas la ligne ?
Tu n'a qu'à faire un IF avant de faire (ou non..) la requête...
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
7 juil. 2017 à 21:28
7 juil. 2017 à 21:28
Je considère le sujet résolu grâce à ton aide. Merci Jordan encore une fois !
6 juil. 2017 à 15:17
Et ma table enregistre une ligne dont le libellé, quantité, prixunit et prixtotal sont vides.
J'ai remplis 2 lignes dans mon tableau, je dois normalement avoir 2 lignes dans ma table pour chaque quantité renseignée.
6 juil. 2017 à 16:41
Tu ne devrais pas avoir :
Fr_Quantite_225 ....;
Mais plutôt Fr_Quantite[225]
Modifié le 6 juil. 2017 à 16:57
et voilà le print_r
Attends, c'est quoi cette embrouille ? Pourquoi là c'est différent ? le cache tu penses ?
Modifié le 6 juil. 2017 à 17:59
là ... tu y vois DEUX attributs NAME ????
6 juil. 2017 à 18:04
Voici a ligne : Je crois qu'il n'y a pas de différences.
J'ai dû t'envoyer un truc non rafraîchis je ne sais pas comment.
Tu veux tout mon code ? le voilà :