Insérer les données d'un tableau dans une base de données mysql

Fermé
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017 - 9 sept. 2016 à 14:52
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 14 sept. 2016 à 00:28
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:
$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...

4 réponses

jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
9 sept. 2016 à 15:38
Bonjour,


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);




0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
9 sept. 2016 à 16:14
Bonjour Jordane et merci pour ta disponibilité, je vais assayer cà tout de suite
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
9 sept. 2016 à 16:25
En rajoutant les [] dans les attributs "name" et lorsque je clique sur le bouton j'obtien une erreur c'est la suivante


Warning: str_pad() expects parameter 1 to be string, array given in C:\wamp\www\aprad\pages\modification_dipe.php on line 4
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
9 sept. 2016 à 16:54
Comme tu as changé la façon de transmettre les données du formulaire vers ton code PHP ... il faudra modifié légèrement ton code.
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.......
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
9 sept. 2016 à 17:36
Oui le print de $_POST affiche "Array" à l'écran
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
9 sept. 2016 à 17:38
Tu l'as mis où ?
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
13 sept. 2016 à 14:42
Je suis vraiment coincé...
Voici une image de mon formulaire de modification.
Comment enregistrer tous ces ligne dans la BD après mes modification, c'est cà mon gros problème

0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
13 sept. 2016 à 14:48
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.
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
13 sept. 2016 à 15:41
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
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 sept. 2016 à 16:14
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 )


<?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>



0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
13 sept. 2016 à 20:20
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.
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 sept. 2016 à 21:04
Regarde donc sur internet comment manipuler les array....
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
13 sept. 2016 à 22:36
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..
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017
13 sept. 2016 à 23:40
Tu n'as pas lu l'intégralité des réponses données dans la discussion que tu pointes...
si tu regardes bien.. en dessous.. la méthode qu'il te donne est identique à la mienne !
0
ach32 Messages postés 47 Date d'inscription mercredi 20 avril 2016 Statut Membre Dernière intervention 19 septembre 2017 > jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
14 sept. 2016 à 00:19
Biensur que j'ai lu l'intégralité dans la discution Jordanne. c'est la meme méthode à la différence que j'ai eu du mal à adapter les name="data[<?php echo $i;?>]['prenom']" à mon code. Maintenant je cherche toujours comment faire pour que le N corresponde à mon nombre de lignes du tableau ?
0