8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

J'ai sur une page php un tableau pour l'organisation d'un voyage. qui me sert à pointer des retours de documents de chaque participant (voir image ci-dessous où j'ai sabré quelques colonnes histoire de rester lisible). Je peux modifier individuellement chaque participant grâce au lien "modifier" à droite. Et ça roule.
upload/1542493758-59311-flou.jpg
Mais modifier chaque personne individuellement quand on rentre beaucoup de papiers est fastidieux. J'aimerais donc pouvoir modifier mon tableau "à la volée" et faire l'update de tous les enregistrements d'un coup.
J'ai réussi à récupérer les infos de la base sous forme de champs modifiables ou de cases à cocher. C'est l'envoi des données qui me pose problème. J'ai tenté de coder le truc mais je me heurte à plusieurs problèmes/questions, malgré la consultation de pas mal de sujets déjà postés sur divers forum.

1° je suppose que mon tableau doit être inséré dans un formulaire?

<form name="tableau" action="modification.php" method="post">
<table>
//ma super table ici
</table>
<submit type="submit" name="submit" Value="Enregistrer les modifications">
</form>


Après le clic sur le submit s'ouvre le fichier "modification.php" qui réalise l'update. Et les problèmes commencent...

2° je tente de récupérer mes données sous forme de tableau:

//récupération de tout ça dans un tableau
$tableau1 = array ('ID', 'nom', 'prenom', 'classe', 'ficheidentification');

Si je fais un var_dump($tableau1), j'arrive bien à voir que j'ai récupéré les différents champs, mais si je fais un var_dump($tableau1['nom']) il me renvoie "null".

3° j'imagine que je dois utiliser un foreach pour parcourir mon tableau. Voici la structure de mon code pour la mise à jour:

foreach($tableau1 as $value) { 
    //création de la requête SQL:
  $maj=$bdd->query("UPDATE test SET nom = ':nom', prenom = ':prenom', classe = ':classe', ficheidentification=':ficheidentification' WHERE ID = ':ID'");
  //exécution de la requête SQL:
  $maj->execute(array(':nom'=>$tableau1['nom'],':prenom'=>$tableau1['prenom'],':classe'=>$tableau1['classe'],':ficheidentification'=>$tableau1['ficheidentification']':ID'=>$tableau1['ID']));
}

Mais ça ne fonctionne pas: aucun enregistrement ne se met à jour. Et je n'ai aucun message d'erreur Smiley bawling ...
Quelqu'un aurait une piste? Je sèche un petit peu...

Merci d'avance!
Modifié par bouffandt (17 Nov 2018 - 23:47)
salut,

il y a fort à parier que le pb vienne de là.

peux faire une copie du var_dump (formaté) pour voir:


echo '<pre>';
var_dump($taVariable);
echo '</pre>';


bouffandt a écrit :

Si je fais un var_dump($tableau1), j'arrive bien à voir que j'ai récupéré les différents champs, mais si je fais un var_dump($tableau1['nom']) il me renvoie "null".
Bonjour et merci de ta réponse,

Si je fais un var_dump selon le code suivant:
echo '<pre>';
var_dump($tableau1);
echo '</pre>';

il me renvoie null.

Par contre, si j'essaie de récupérer mes données unes par une:
$id=$_POST['id']
$nom=$_POST['nom']

le var_dump renvoie 'null' pour '$id' mais il trouve une valeur pour '$nom'. J'en conclus que c'est le transfert de mes données depuis mon tableau qui pose problème pour commencer... Voici donc la structure de ce tableau:


<form name="modification" action="modificationtest.php" method="POST">
    <table class="table">
	<tbody>
    <tr>
		<th style="font-size:1em; vertical-align:bottom; display:none; text-align:left">ID</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Nom</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Prénom</th>
		<th class="rotate" style="font-size:0.8em"><div><span>Fiche d'identification</span></div></th>
	</tr>
</div>
<?php
//on se connecte à la base de données
try
	{
		$bdd = new PDO('mysql:host=monhébergeur;dbname=mabase;charset=utf8', 'monid', 'motdepasse');
		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(Exception $e)
	{
		die('Erreur : '.$e->getMessage());
	}
//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test where voyage="Sicile" ORDER BY nom');
// cette boucle organise les données dans un tableau
while ($donnees = $reponse->fetch())
		{
	//on affiche ici les noms récupérés.
				echo"<tr>";
					echo "<td style='border:1px solid black; font-weight:bolder; display:none'>$donnees[ID]</td>";
					echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='nom' value='$donnees[nom]'></input></td>";
					echo "<td style='border:1px solid black; font-weight:bolder;'><input type='textarea' name='prenom' value='$donnees[prenom]'></input></td>";
					echo '<td style="border:1px solid black">
					<INPUT type="checkbox" name="ficheidentification" value="oui"';
					if($donnees[ficheidentification] =='oui') echo "checked";
					echo '></td>';
				echo"</tr>";		
				}
//fin des fonctions php.
$reponse->closeCursor();
?>
</table>
<input type="submit" value="Enregistrer les modifications" style="margin:2%">
</form>
essai cela pour voir si ton array $donnees se rempli correctement.


<form name="modification" action="modificationtest.php" method="POST">
    <table class="table">
	<tbody>
    <tr>
		<th style="font-size:1em; vertical-align:bottom; display:none; text-align:left">ID</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Nom</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Prénom</th>
		<th class="rotate" style="font-size:0.8em"><div><span>Fiche d'identification</span></div></th>
	</tr>
</div>
<?php
//on se connecte à la base de données
try
	{
		$bdd = new PDO('mysql:host=monhébergeur;dbname=mabase;charset=utf8', 'monid', 'motdepasse');
		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(Exception $e)
	{
		die('Erreur : '.$e->getMessage());
	}
//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test where voyage="Sicile" ORDER BY nom');
$donnees = $reponse->fetchall()
echo '<pre>';
var_dump($donnees );
echo '</pre>';

die();


et met nous une copie du var_dump stp.

si cela fonctionne, tu pourras faire un foreach dessus pour itérer.




Voici la copie du var_dump($donnees)
array(23) {
  [0]=>
  array(10) {
    ["ID"]=>
    string(2) "42"
    [0]=>
    string(2) "42"
    ["nom"]=>
    string(8) "Ambroise"
    [1]=>
    string(8) "Ambroise"
    ["prenom"]=>
    string(10) "Le nouveau"
    [2]=>
    string(10) "Le nouveau"
    ["Voyage"]=>
    string(4) "Alba"
    [3]=>
    string(4) "Alba"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [1]=>
  array(10) {
    ["ID"]=>
    string(2) "35"
    [0]=>
    string(2) "35"
    ["nom"]=>
    string(6) "André"
    [1]=>
    string(6) "André"
    ["prenom"]=>
    string(6) "Lucien"
    [2]=>
    string(6) "Lucien"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [2]=>
  array(10) {
    ["ID"]=>
    string(1) "2"
    [0]=>
    string(1) "2"
    ["nom"]=>
    string(8) "Bouffand"
    [1]=>
    string(8) "Bouffand"
    ["prenom"]=>
    string(8) "Claudine"
    [2]=>
    string(8) "Claudine"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(3) "oui"
    [4]=>
    string(3) "oui"
  }
  [3]=>
  array(10) {
    ["ID"]=>
    string(2) "14"
    [0]=>
    string(2) "14"
    ["nom"]=>
    string(8) "Bouffand"
    [1]=>
    string(8) "Bouffand"
    ["prenom"]=>
    string(6) "Pierre"
    [2]=>
    string(6) "Pierre"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [4]=>
  array(10) {
    ["ID"]=>
    string(2) "15"
    [0]=>
    string(2) "15"
    ["nom"]=>
    string(8) "Bouffand"
    [1]=>
    string(8) "Bouffand"
    ["prenom"]=>
    string(3) "Luc"
    [2]=>
    string(3) "Luc"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [5]=>
  array(10) {
    ["ID"]=>
    string(2) "37"
    [0]=>
    string(2) "37"
    ["nom"]=>
    string(8) "Bouffand"
    [1]=>
    string(8) "Bouffand"
    ["prenom"]=>
    string(0) ""
    [2]=>
    string(0) ""
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [6]=>
  array(10) {
    ["ID"]=>
    string(2) "36"
    [0]=>
    string(2) "36"
    ["nom"]=>
    string(8) "Bouffand"
    [1]=>
    string(8) "Bouffand"
    ["prenom"]=>
    string(9) "François"
    [2]=>
    string(9) "François"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [7]=>
  array(10) {
    ["ID"]=>
    string(2) "43"
    [0]=>
    string(2) "43"
    ["nom"]=>
    string(6) "Clouet"
    [1]=>
    string(6) "Clouet"
    ["prenom"]=>
    string(8) "Matthieu"
    [2]=>
    string(8) "Matthieu"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [8]=>
  array(10) {
    ["ID"]=>
    string(1) "3"
    [0]=>
    string(1) "3"
    ["nom"]=>
    string(7) "FIllion"
    [1]=>
    string(7) "FIllion"
    ["prenom"]=>
    string(8) "Claudine"
    [2]=>
    string(8) "Claudine"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [9]=>
  array(10) {
    ["ID"]=>
    string(1) "4"
    [0]=>
    string(1) "4"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(5) "Aimé"
    [2]=>
    string(5) "Aimé"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [10]=>
  array(10) {
    ["ID"]=>
    string(1) "5"
    [0]=>
    string(1) "5"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(5) "Marie"
    [2]=>
    string(5) "Marie"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [11]=>
  array(10) {
    ["ID"]=>
    string(1) "6"
    [0]=>
    string(1) "6"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(12) "Marie Sylvie"
    [2]=>
    string(12) "Marie Sylvie"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(3) "non"
    [4]=>
    string(3) "non"
  }
  [12]=>
  array(10) {
    ["ID"]=>
    string(1) "7"
    [0]=>
    string(1) "7"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(7) "Thierry"
    [2]=>
    string(7) "Thierry"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [13]=>
  array(10) {
    ["ID"]=>
    string(1) "8"
    [0]=>
    string(1) "8"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(7) "Maurice"
    [2]=>
    string(7) "Maurice"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [14]=>
  array(10) {
    ["ID"]=>
    string(1) "9"
    [0]=>
    string(1) "9"
    ["nom"]=>
    string(6) "Fillon"
    [1]=>
    string(6) "Fillon"
    ["prenom"]=>
    string(7) "Maurice"
    [2]=>
    string(7) "Maurice"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [15]=>
  array(10) {
    ["ID"]=>
    string(2) "41"
    [0]=>
    string(2) "41"
    ["nom"]=>
    string(9) "Lenouveau"
    [1]=>
    string(9) "Lenouveau"
    ["prenom"]=>
    string(7) "Nouveau"
    [2]=>
    string(7) "Nouveau"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [16]=>
  array(10) {
    ["ID"]=>
    string(2) "11"
    [0]=>
    string(2) "11"
    ["nom"]=>
    string(5) "Louis"
    [1]=>
    string(5) "Louis"
    ["prenom"]=>
    string(4) "Jean"
    [2]=>
    string(4) "Jean"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [17]=>
  array(10) {
    ["ID"]=>
    string(2) "12"
    [0]=>
    string(2) "12"
    ["nom"]=>
    string(5) "Louis"
    [1]=>
    string(5) "Louis"
    ["prenom"]=>
    string(6) "Pierre"
    [2]=>
    string(6) "Pierre"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [18]=>
  array(10) {
    ["ID"]=>
    string(2) "40"
    [0]=>
    string(2) "40"
    ["nom"]=>
    string(7) "Nouveau"
    [1]=>
    string(7) "Nouveau"
    ["prenom"]=>
    string(15) "De chez Nouveau"
    [2]=>
    string(15) "De chez Nouveau"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [19]=>
  array(10) {
    ["ID"]=>
    string(2) "39"
    [0]=>
    string(2) "39"
    ["nom"]=>
    string(7) "Nouveau"
    [1]=>
    string(7) "Nouveau"
    ["prenom"]=>
    string(7) "Nouveau"
    [2]=>
    string(7) "Nouveau"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [20]=>
  array(10) {
    ["ID"]=>
    string(2) "38"
    [0]=>
    string(2) "38"
    ["nom"]=>
    string(7) "Nouveau"
    [1]=>
    string(7) "Nouveau"
    ["prenom"]=>
    string(7) "Nouveau"
    [2]=>
    string(7) "Nouveau"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [21]=>
  array(10) {
    ["ID"]=>
    string(2) "13"
    [0]=>
    string(2) "13"
    ["nom"]=>
    string(5) "Petit"
    [1]=>
    string(5) "Petit"
    ["prenom"]=>
    string(6) "Pierre"
    [2]=>
    string(6) "Pierre"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
  [22]=>
  array(10) {
    ["ID"]=>
    string(2) "10"
    [0]=>
    string(2) "10"
    ["nom"]=>
    string(7) "Thierry"
    [1]=>
    string(7) "Thierry"
    ["prenom"]=>
    string(7) "Maurice"
    [2]=>
    string(7) "Maurice"
    ["Voyage"]=>
    string(6) "Sicile"
    [3]=>
    string(6) "Sicile"
    ["ficheidentification"]=>
    string(0) ""
    [4]=>
    string(0) ""
  }
}

NB: pas de souci pour les noms et prénoms balancés en clair: ils sont tous bidons. C'est une base dédiée aux tests.
Je remarque que tous les champs sortent en double: c'est normal?
Modifié par bouffandt (18 Nov 2018 - 16:03)
bouffandt a écrit :
Je remarque que tous les champs sortent en double: c'est normal?


oui c'est le fetchall() mais cela n'est pas un pb.
Cela permet de traiter ton array soit par sa clé ( ['ID'] ) soit par son index ( [0] )

dans ton cas essai de faire


echo '<pre>';
var_dump($donnees["ID"], $donnees["nom"], $donnees["Voyage"]  );
echo '<br><br>'
var_dump($donnees[id], $donnees[nom], $donnees["voyage"]  );echo '</pre>';

die();



a la place de


echo '<pre>';
var_dump($donnees );
echo '</pre>';


et tu devrais comprendre
Merci de ta patience!
En fait,
echo '<pre>';
var_dump($donnees["ID"], $donnees["nom"], $donnees["Voyage"]  );
echo '<br><br>'
var_dump($donnees[id], $donnees[nom], $donnees["voyage"]  );echo '</pre>';
die();

renvoie la valeur null pour chaque champ. En revanche, $donnees renvoie bien toutes les valeurs du tableau.
Ceci étant, j'avoue honnêtement ne pas voir comment je vais pouvoir exploiter ce fait. J'ai peur de m'être mal expliqué dès le départ. Si je résume la situation:

j'ai dans mon fichier initial (qu'on appellera "tableau.php") un tableau alimenté par la base de données "test" dont voici le code complet pour l'instant:

<?php
// On prolonge la session ouverte avec checkpassword.php
session_start();
	// On teste si la variable de session existe et contient une valeur
	if(empty($_SESSION['password'])) 
	{
	  // Si inexistante ou nulle, on redirige vers le formulaire de login
	header('Location:password.php');
	  exit();
	}
?>
<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<title>AccueilTest</title>
	<link rel="stylesheet" href="style.css">
	<script src="script.js"></script>
	<LINK rel=STYLESHEET href="stylesformulaires.css" type="text/css">
</head>
<body>
<div class="titre">Liste des inscrits au voyage en Sicile</div>
<!-- 1 bouton pour ajouter un nouveau participant -->
	<form method="post" action="ajout.php" style="margin-left:2%;display:block;float:left">
	   <input type="submit" value="Ajouter un participant" />
	</form>
	<!-- 1 bouton pour se déconnecter -->
	<form method="post" action="deconnection.php" style="margin-left:2%;display:block;float:left">
	   <input type="submit" value="Déconnexion" />
	</form>
	<form method="post" action="impressionsicile.php" style="margin-left:2%;display:block;float:left">
	   <input type="submit" value="Impression" />
	</form>
<!--ça c'est le tableau en html qui s'affichera. On ne place que la ligne de titre, avec des titres qui correspondent aux champs de la table-->
<div class="formulaire" style="width:auto">
	<form name="modification" action="modification.php" method="POST">
    <table class="table">
	<tbody>
    <tr>
		<th style="font-size:1em; vertical-align:bottom; width:0px; text-align:left; display:none">ID</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Nom</th>
		<th style="font-size:1em; vertical-align:bottom; width:auto; text-align:left">Prénom</th>
		<th class="rotate" style="font-size:0.8em"><div><span>Fiche d'identification</span></div></th>
	</tr>
</div>
<?php
//on se connecte à la base de données
try
	{
		$bdd = new PDO('mysql:host=monhébergeur;dbname=mabase;charset=utf8', 'monid', 'motdepasse');
		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(Exception $e)
	{
		die('Erreur : '.$e->getMessage());
	}
//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test ORDER BY nom');
while ($donnees = $reponse->fetch())
				{
	//on affiche ici les noms récupérés.
				echo"<tr>";
					echo "<td style='border:1px solid black; font-weight:bolder; display:none'>$donnees[ID]</td>";
					echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='nom' value='$donnees[nom]'></input></td>";
					echo "<td style='border:1px solid black; font-weight:bolder;'><input type='textarea' name='prenom' value='$donnees[prenom]'></input></td>";
					echo '<td style="border:1px solid black">
					<INPUT type="checkbox" name="ficheidentification" value="oui"';
					if($donnees[ficheidentification] =='oui') echo "checked";
					echo '></td>';
				echo"</tr>";		
				}
?>
</table>
<input type="submit" value="Enregistrer les modifications" style="margin:2%">
</form>	
</div>
</body>
</html>

Ce tableau est modifiable et je veux que les modifications saisies dedans permettent de mettre à jour la base. Les données sont transférées sur "modification.php" via une méthode post.

Voici le code complet de "modification.php":

<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['password'])) 
{
  // Si inexistante ou nulle, on redirige vers le formulaire de login
header('Location:password.php');
  exit();
}
?><!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Modifier un participant au voyage</title>
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
<LINK rel=STYLESHEET href="../stylesformulaires.css" type="text/css">
</head>
<body>
	<?php
try
	{
		$bdd = new PDO('mysql:host=monhébergeur;dbname=mabase;charset=utf8', 'monid', 'motdepasse');//$bdd c'est le nom de la fonction de connection à la base
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
} 
  //récupération des valeurs des champs:
  //nom:
  $nom = $_POST['nom'] ;
  //prenom:
  $prenom = $_POST['prenom'] ;
  //ficheidentification:
  $ficheidentification= $_POST['ficheidentification'] ;
  //récupération de l'identifiant de la personne:
  $id = $_POST['ID'] ;
  
//récupération de tout ça dans un tableau
$tableau1 = array ($_POST['ID'], $_POST['nom'], $_POST['prenom'], $_POST['ficheidentification']);
$var=$tableau1->fetchall();

 foreach($tableau1 as $value) { 
    //création de la requête SQL:
  $maj=$bdd->query("UPDATE test SET nom = ':nom', prenom = ':prenom', ficheidentification = ':ficheidentification' WHERE ID = ':ID'");
  //exécution de la requête SQL:
  $maj->execute(array(':nom'=>$tableau1['nom'],':prenom'=>$tableau1['prenom'],':ficheidentification'=>$tableau1['ficheidentification'],':ID'=>$tableau1['ID']));
}
 
  //message, pour savoir si la modification a marché:
  if($maj)
  {
?>
<div class="formulaire" style="margin-left:auto;margin-right:auto;text-align:center">
<?php
    echo("La modification à été correctement effectuée") ;
?>
	<form method="post" action="accueil.php">
	   <input type="submit" value="Retour à l'accueil" style="display:block;margin-left:auto;margin-right:auto;margin-top:10px"/>
	</form>
</div>
<?php	
  }
  else
  {
    echo("La modification à échoué") ;
  }
?>
</body>
</html>


Grâce à tes explications, j'arrive à afficher, dans "tableau.php", le contenu de la variable $donnees grâce à un fetchall(). Dans "modification.php", j'ai tenté d'afficher le contenu des données récupérées via le POST:
$var=$tableau1->fetchall();
mais j'ai eu un message d'erreur fatale: "Call to a member function fetch() on array". Je suis un peu perdu!
bonjour,

je suis aveugle Smiley eek Smiley bawling Smiley bawling Smiley bawling

c'est normal que tu affiche rien.

array(23) {
  [0]=>
  array(10) {


ceci veut dire que tu as un array dans autre array ... d'où ne non affichage des variables.

donc en gros pour afficher $données correctement tu devrais faire :
$donnees[0]['ID']


ou le [0] est égal aux premier niveau de array et il faudra du coup itérer chaque array genre:


for ( $i = 0; $i < count($donnees); $i ++)
{
  //ici tu pourras faire un while ou un foreach par la suite pour itérer chaque array de second niveau
  echo '<pre>';
  var_dump($donnees[$i]["ID"], $donnees[$i]["nom"], $donnees[$i]["Voyage"]  );
}
die();



-------------------

Pour ton deuxième fichier fais ceci afin de voir ce qui se passe quand tu passes tes modifications et affiches nous le dump stp.


<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['password'])) 
{
  // Si inexistante ou nulle, on redirige vers le formulaire de login
header('Location:password.php');
  exit();
}

var_dump($_POST);
die();
?>
Bonjour!

alors en faisant:

//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test ORDER BY ID');
$donnees = $reponse->fetchall();
for ( $i = 0; $i < count($donnees); $i ++)
{
  //ici tu pourras faire un while ou un foreach par la suite pour itérer chaque array de second niveau
  echo '<pre>';
  var_dump($donnees[$i]["ID"], $donnees[$i]["nom"], $donnees[$i]["Voyage"]  );
}
die();

j'ai l'affichage correct de mon array, chaque enregistrement n'apparaissant qu'une fois:
string(1) "2"
string(8) "Bouffand"
string(6) "Sicile"
string(1) "3"
string(7) "FIllion"
string(6) "Sicile"
string(1) "4"
string(6) "Fillon"
string(6) "Sicile"
string(1) "5"
string(6) "Fillon"
string(6) "Sicile"
string(1) "6"
string(6) "Fillon"
string(6) "Sicile"
<!--etc etc -->


Si je fais
var_dump($_POST);
die();

ça me donne:
array(4) { ["ID"]=> string(3) "43'" ["nom"]=> string(6) "Clouet" ["prenom"]=> string(8) "Matthieu" ["ficheidentification"]=> string(3) "oui" }

Et c'est à condition d'avoir remplacé dans "tableau.php"

//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test ORDER BY ID');
$donnees = $reponse->fetchall();
for ( $i = 0; $i < count($donnees); $i ++)
{
  //ici tu pourras faire un while ou un foreach par la suite pour itérer chaque array de second niveau
  echo '<pre>';
  var_dump($donnees[$i]["ID"], $donnees[$i]["nom"], $donnees[$i]["Voyage"]  );
}
die();

par
//on recherche les noms des participants, ce qui va servir plus bas
$reponse = $bdd->query('SELECT * FROM test ORDER BY ID');

while ($donnees = $reponse->fetch())

sinon, il n'y a aucune donnée dans les cellules de mon tableau sur "tableau.php".

Si je comprends bien ce qui se passe, mon bouton "submit" n'envoie qu'une seule valeur à "modification.php. Cela peut-il venir du fait que les données de ma base sont présentées dans un tableau html?
Je problème viens du nommage de tes champs, comme tu boucles toujours sur le même modele
exemple:
<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='nom' value='$donnees[nom]'></input>


Quand tu passes tous tes input avec le même name il y a écrasement des précédentes.

dans ton cas il faudrait en plus pouvoir identifier chaque bloc (array) ici rien ne différentie l'array 0 de l'array 1, donc comment veux tu pouvoir les enregistrer (update) en base sans aucune référence ?

Après il faut revoir la conception de ta boucle pour que l'id de ton array y soit présent.

où alors plus simple tu faire un form par bloc et tu ne fais pas d'update en masse mais juste unitairement.

Après il doit y avoir moyen en JS et/ou en Ajax pour le faire.

Mais il est clair que le nommage de tes input doit évoluer pour que tu puisses faire un traitement en lot (ou pas)

bon courage
biduletruck a écrit :
Quand tu passes tous tes input avec le même name il y a écrasement des précédentes.

dans ton cas il faudrait en plus pouvoir identifier chaque bloc (array) ici rien ne différentie l'array 0 de l'array 1, donc comment veux tu pouvoir les enregistrer (update) en base sans aucune référence ?


ça veut dire qu'il faudrait que j'incrémente un numéro dans le name de chaque input, du genre:

echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea'  name='"; 
$nom=$donnees[nom]
for($i=0; $i++){
echo"$nom.$i'";} echo" value='$donnees[nom]'></input>"


biduletruck a écrit :

Après il faut revoir la conception de ta boucle pour que l'id de ton array y soit présent.

Ici on parle bien de la boucle qui se trouve dans "modification.php"? ou de celle qui permet de créer la table dans "tableau.php"?

biduletruck a écrit :

bon courage

Merci de tes conseils!
Modifié par bouffandt (19 Nov 2018 - 22:16)
J'ai fait un petit test sur 2 données seulement dans "tableau.php":

				echo"<tr>";
					echo "<td style='border:1px solid black; font-weight:bolder; display:none'><input type='textarea' name='";
					$id=$donnees[ID];
					for($i=0;$i<count($donnees);$i++){
					echo"$id.$i'";} 
					echo"ID' value=$donnees[ID]'></input></td>";
					echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='";
					$nom=$donnees[nom];
					for($i=0;$i<count($donnees);$i++){
					echo"$nom.$i'";} 
					echo"nom' value='$donnees[nom]'></input></td>";
				echo"</tr>";	

Après un clic sur "submit", le var_dump($_POST) dans "modification.php" m'a renvoyé la totalité des enregistrements:

array(34) {
  ["2_0"]=>
  string(2) "2'"
  ["Bouffand_0"]=>
  string(8) "Bouffand"
  ["3_0"]=>
  string(2) "3'"
  ["FIllion_0"]=>
  string(7) "FIllion"
  ["4_0"]=>
  string(2) "4'"
  ["Fillon_0"]=>
  string(6) "Fillon"
  ["5_0"]=>
  string(2) "5'"
  ["6_0"]=>
  string(2) "6'"
  ["7_0"]=>
  string(2) "7'"
  ["8_0"]=>
  string(2) "8'"
  ["9_0"]=>
  string(2) "9'"
  ["10_0"]=>
  string(3) "10'"
  ["Thierry_0"]=>
  string(7) "Thierry"
  ["11_0"]=>
  string(3) "11'"
  ["Louis_0"]=>
  string(5) "Louis"
  ["12_0"]=>
  string(3) "12'"
  ["13_0"]=>
  string(3) "13'"
  ["Petit_0"]=>
  string(5) "Petit"
  ["14_0"]=>
  string(3) "14'"
  ["15_0"]=>
  string(3) "15'"
  ["35_0"]=>
  string(3) "35'"
  ["André_0"]=>
  string(6) "André"
  ["36_0"]=>
  string(3) "36'"
  ["37_0"]=>
  string(3) "37'"
  ["38_0"]=>
  string(3) "38'"
  ["Nouveau_0"]=>
  string(7) "Nouveau"
  ["39_0"]=>
  string(3) "39'"
  ["40_0"]=>
  string(3) "40'"
  ["41_0"]=>
  string(3) "41'"
  ["Lenouveau_0"]=>
  string(9) "Lenouveau"
  ["42_0"]=>
  string(3) "42'"
  ["Ambroise_0"]=>
  string(8) "Ambroise"
  ["43_0"]=>
  string(3) "43'"
  ["Clouet_0"]=>
  string(6) "Clouet"
}

Bon, la numérotation n'est pas du tout ce à quoi je m'attendais par contre mais je ne vais pas bouder mon plaisir...
Modifié par bouffandt (19 Nov 2018 - 22:33)
voilà c'est exactement ce que je voualis te faire comprendre.

après pour insertion en bdd il faudra de nouveau boucler sur le tableau que tu reçois en post.

sinon au lieu de faire un

echo"ID' value=$donnees[ID]'>



tu peux faire :

<input type="hidden" name="id"<?=$donnees[ID] ?> value=<?=$donnees[ID] ?>


cela te donnera un champs invisible avec en name id0 (par exemple) et en valeur 0

se sera peut etre plus facile pour tes insertions en bdd
Modifié par biduletruck (20 Nov 2018 - 00:22)
biduletruck a écrit :

cela te donnera un champs invisible avec en name id0 (par exemple) et en valeur 0

se sera peut etre plus facile pour tes insertions en bdd

merci du conseil, les ID sont tous différents maintenant.
Par contre j'ai un souci que je ne comprends pas avec mon code:

echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='";
					for($i=0;$i<count($donnees);$i++){
					echo"nom$i";} 
					echo"' value='$donnees[nom]'></input></td>";

Au lieu de me donner bien gentiment "nom0" pour le 1er enregistrement, puis "nom1" etc, il boucle sur la même ligne:

array(24) {
  ["id2"]=>
  string(1) "2"
  ["nom0nom1nom2nom3nom4nom5nom6nom7nom8nom9"]=>
  string(6) "Clouet"

Et du coup tous les noms sont écrasés!
Modifié par bouffandt (20 Nov 2018 - 11:56)
Par contre si je fais:
echo "<td style='border:1px solid black; font-weight:bolder'><input type='textarea' name='";
echo"nom$donnees[ID]";
echo"' value='$donnees[nom]'></input></td>";

je ne devrais plus avoir de problèmes puisque $id s'incrémente gentiment tout seul... je teste ça ce soir!
Modifié par bouffandt (20 Nov 2018 - 12:02)
Ca fonctionne! Les données sont transférées sans problème.

Maintenant, je m'attaque à la boucle dans "modification.php".

Voici mon code pour l'heure:
foreach($_POST as $ligne) 
	{ 
	foreach($ligne as $valeur);
		{
//ici, la future requête. Pour l'instant j'y met:
var_dump($valeur);
		}
	}

Mais cela me renvoie le code d'erreur:
Warning: Invalid argument supplied for foreach() in /var/www/sda/0/f/tbouffand/modificationtest.php on line 37
NULL 

La ligne 37 est celle où se trouve
	foreach($ligne as $valeur);

Je ne vois pas où est l'erreur.
foreach($ligne as $valeur);
peut-être juste ça
 ; 


sinon

essai ça pour voir


var_dump($_POST);
foreach($_POST as $ligne) 

	{ 
	var_dump($ligne);
	}



et colles le résultat stp
Modifié par biduletruck (21 Nov 2018 - 08:26)
Bonjour!
le var_dump sur $_POST me donne bien tout mon array avec les modifications saisies dans la page précédente:
array(46) {
  ["id2"]=>
  string(1) "2"
  ["nom2"]=>
  string(7) "Aragorn"
  ["id3"]=>
  string(1) "3"
  ["nom3"]=>
  string(7) "Legolas"
  ["id4"]=>
  string(1) "4"
  ["nom4"]=>
  string(5) "Gimli"
  ["id5"]=>
  string(1) "5"
  ["nom5"]=>
  string(7) "Gandalf"
  ["id6"]=>
  string(1) "6"
  ["nom6"]=>
  string(6) "Fillon"
  ["id7"]=>
  string(1) "7"
  ["nom7"]=>
  string(6) "Fillon"
  ["id8"]=>
  string(1) "8"
  ["nom8"]=>
  string(6) "Fillon"
<!-- etc, etc -->
}
}


le var_dump($ligne) donne aussi les résultats attendus:
string(1) "2"
string(7) "Aragorn"
string(1) "3"
string(7) "Legolas"
string(1) "4"
string(5) "Gimli"
string(1) "5"
string(7) "Gandalf"
string(1) "6"
string(6) "Fillon"
string(1) "7"
string(6) "Fillon"
<!-- etc, etc-->
Le problème ici c'est que chaque ligne de $_POST correspond à un tableau.
Donc id2 et nom2 n'ont pas de relation direct du coup il va falloir ruser.
Vas-tu passer d'autres valeurs à modifier ?
Oui, effectivement je vais avoir pas mal d'autres valeurs à passer. Ici il n'y en a que 2 (ID et nom), parce que je ne veux pas alourdir le code pour un premier jet. J'y vois plus clair.
biduletruck a écrit :

Le problème ici c'est que chaque ligne de $_POST correspond à un tableau.
Donc id2 et nom2 n'ont pas de relation direct du coup il va falloir ruser.

Je pensais que $_Post m'avait envoyé un tableau multidimensionnel? Il n'envoie que des tableaux associatifs?

Tu veux dire qu'il faudrait que je fasse une requête du genre:
$id=$_POST[ID];
maj->bdd(UDPATE test SET nom=$ligne[nom$id] WHERE ID=$ligne[ID$id]");

Modifié par bouffandt (21 Nov 2018 - 15:29)
Pages :