Insérer les données d'un tableau dans une base de données mysql
ach32
Messages postés
56
Statut
Membre
-
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
J'ai une base de données dans laquelle je récupère chaque ligne dans dans un tableau comme l'indique mon code suivant:
Je voudrais prendre les données de chaque <tr></tr> que je vien de modifier et les insérer à nouveau dans la base de données comme un nouvel enregistrement.
Mon problème c'est que quand je valide le bouton enregistrer, je n'ai que une seule ligne qui s'enregistre dans la base de données. Je crois que pour récuperer et inserer toutes les lignes du tableau je dois utiliser une boucle mais je ne sais comment.
Si quelqu'un a une idée elle sera la bienvenue. Cordialement...
J'ai une base de données dans laquelle je récupère chaque ligne dans dans un tableau comme l'indique mon code suivant:
$retour_messages=mysql_query(" SELECT * FROM table_tampon ORDER BY noms ");
//while($donnees_messages=mysql_fetch_assoc($retour_messages))
while( $result = mysql_fetch_object($retour_messages))
{
echo ("
<tbody>
<tr class=\"success\">
<td><input type=\"text\" name=\"noms\" value = ".$result->noms." /></td>
<td><input type=\"text\" name=\"mat_int\" value = ".$result->matricule_int." /></td>
<td><input type=\"text\" name=\"sal_brut\" value = ".$result->salaire_brut." /></td>
<td><input type=\"text\" name=\"sal_except\" value = ".$result->salaire_except." /></td>
<td><input type=\"text\" name=\"sal_tax\" value = ".$result->salaire_tax." /></td>
<td><input type=\"text\" name=\"sal_cot_cnps\" value = ".$result->salaire_cot_cnps." /></td>
<td><input type=\"text\" name=\"sal_cot_plaf\" value = ".$result->salaire_cot_plaf." /></td>
<td><input type=\"text\" name=\"irpp\" value = ".$result->irpp." /></td>
<td><input type=\"text\" name=\"taxe_com\" value = ".$result->taxe_com." /></td>
<td><input type=\"text\" name=\"nb_jr\" value = ".$result->nombre_jr." /></td>
<td><input type=\"text\" name=\"mois\" value = ".$result->mois." /></td>
<td><input type=\"text\" name=\"annee\" value = ".$result->annee." /></td><td><input type=\"hidden\" name=\"matricule_empl\" value = ".$result->matricule_empl." /></td><td><input type=\"hidden\" name=\"matricule_cnps\" value = ".$result->matricule_cnps." /></td </tr>
</tbody>
"); } ?>
<tr><td><input type="submit" name = "enregistrer" value="Enregistrer" /></td></tr>
Je voudrais prendre les données de chaque <tr></tr> que je vien de modifier et les insérer à nouveau dans la base de données comme un nouvel enregistrement.
Mon problème c'est que quand je valide le bouton enregistrer, je n'ai que une seule ligne qui s'enregistre dans la base de données. Je crois que pour récuperer et inserer toutes les lignes du tableau je dois utiliser une boucle mais je ne sais comment.
Si quelqu'un a une idée elle sera la bienvenue. Cordialement...
A voir également:
- Insérer les données d'un tableau dans une base de données mysql
- Fuite données maif - Guide
- Insérer une vidéo dans powerpoint - Guide
- Tableau word - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
4 réponses
Bonjour,
Tu dois mettre des [] dans les attributs "name" de tes inputs
par exemple :
Ensuite, lorsque tu fais le submit de ton formulaire tu devrais parcourir le résultat dans une boucle.
Pour comprendre comment les données se présentent, fais un print de la variable POST.
Mon problème c'est que quand je valide le bouton enregistrer, je n'ai que une seule ligne qui s'enregistre dans la base de données.
Tu dois mettre des [] dans les attributs "name" de tes inputs
par exemple :
<td><input type=\"text\" name=\"noms[]\" value = ".$result->noms." /></td>
Ensuite, lorsque tu fais le submit de ton formulaire tu devrais parcourir le résultat dans une boucle.
Pour comprendre comment les données se présentent, fais un print de la variable POST.
print_r($_POST);
Salut,
le code que tu donnes dans ce message : https://forums.commentcamarche.net/forum/affich-33893945-inserer-les-donnees-d-un-tableau-dans-une-base-de-donnees-mysql#12
correspond à l'enregistrement d'un simple formulaire, pas d'un formulaire en tableau comme celui que tu as, tu dois faire une boucle qui va parcourir ton tableau et faire l'enregistrement que tu fais pour chaque ligne du tableau.
Je pense que tu n'es pas très loin de la solution, il faut juste que tu intègres cette nuance dans ton code.
le code que tu donnes dans ce message : https://forums.commentcamarche.net/forum/affich-33893945-inserer-les-donnees-d-un-tableau-dans-une-base-de-donnees-mysql#12
correspond à l'enregistrement d'un simple formulaire, pas d'un formulaire en tableau comme celui que tu as, tu dois faire une boucle qui va parcourir ton tableau et faire l'enregistrement que tu fais pour chaque ligne du tableau.
Je pense que tu n'es pas très loin de la solution, il faut juste que tu intègres cette nuance dans ton code.
Tu as vu l'image que j'ai posté plus haut? elle montre le tableau dans qui contient les données provenant de la BD et que je veux juste modifier. Maintenant je ne sais pas comment faire cette fameuse boucle qui me permettrai d'enregistrer ces modification comme un nouvel enregistrement dans la BD et non comme un modification des données exitantes
Pour comprendre ce que tu dois faire et comment réaliser ta boucle je t'invite à tester l'exemple suivant :
(à coller dans un nouveau fichier php et ensuite tu l'affiches pour en voir le résultat )
(à coller dans un nouveau fichier php et ensuite tu l'affiches pour en voir le résultat )
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
//récupération des données du formulaire
$data = !empty($_POST['data']) ? $_POST['data'] : NULL;
if($data){
// on boucle sur les données du formulaire :
foreach($data as $K=>$V){
echo "<br><pre><b>$K : </b>";
print_r($V);
echo "</pre>";
}
}
?>
<html>
<head>
<title>
test
</title>
</head>
<body>
<form name="test" method="post" action="">
<?php
//création d'un formulaire fictif
for($i=0;$i<10;$i++){
?>
<pre>
<input type="text" name="data[<?php echo $i;?>]['nom']" value="<?php echo "test_$i";?>">
<input type="text" name="data[<?php echo $i;?>]['prenom']" value="<?php echo "prenom_$i";?>">
</pre>
<?php
}
?>
<input type="submit" name="valider" value="go">
</form>
</body>
</html>
Merci Jordane45 pour ton code, j'ai assayer d'adapter ce code avec le mien mais le problème avec cette méthode c'est que moi je voudrais d'abord stocker provisoirement les données dans des variables pour ensuite appliquer la fonction "str_pad" à chaque donnée avant d'insérer dans la BD...
si tu as une idée de comment je peux proceder, j'attend impatiament puisque j'essaye actuelement de le faire sans succès.
si tu as une idée de comment je peux proceder, j'attend impatiament puisque j'essaye actuelement de le faire sans succès.
Merci jordane pour ce code. Je suis tombé sur une autre méthode ici:
https://forums.commentcamarche.net/forum/affich-19433057-insere-un-tableau-html-base-de-donnee-mysql
qui m'a permise de faire une boucle comme ceci:
for ($i = 1; $i <= N; $i++) {
$sql=mysql_query("INSERT INTO facture ('idt','nom_du_champ') VALUES ('$id','$variable')");
}
j'ai assayer en fixant la valeur de N à 4 et ca enregistre les 4 lignes dans la base de données. Mais comment faire pour que le N corresponde à mon nombre de lignes du tableau ?
j'y suis presque... Un dernier coup de pousse de votre part..
https://forums.commentcamarche.net/forum/affich-19433057-insere-un-tableau-html-base-de-donnee-mysql
qui m'a permise de faire une boucle comme ceci:
for ($i = 1; $i <= N; $i++) {
$sql=mysql_query("INSERT INTO facture ('idt','nom_du_champ') VALUES ('$id','$variable')");
}
j'ai assayer en fixant la valeur de N à 4 et ca enregistre les 4 lignes dans la base de données. Mais comment faire pour que le N corresponde à mon nombre de lignes du tableau ?
j'y suis presque... Un dernier coup de pousse de votre part..

Comme je te l'ai indiqué... as tu fais un print de $_POST ??
Ca te montre comment est structuré l'Array et donc... à toi d'adapter ton code pour que ça puisse utiliser ces données.......