Mammouth du PHP |
586 Messages
31 mars 2023, 17:36
Pour la page affichant le formulaire html :
- Attention à la syntaxe html de table (<td> doit être dans <tr>, <tr> ne doit contenir que des <td> ou <th> en enfant direct). Il semble y avoir des confusions entre <td> et <th>.
- Pour structurer les données POST envoyés à PHP, tu peux essayer de construire un tableau multidimensionnel en utilisant l'index de ton de tableau de résultat.
Exemple :
<?php
require 'C:/wamp64/www/gestion_cs_semur/connexion.php';
require 'C:/wamp64/www/gestion_cs_semur/index_sql.php';
$requete = $db->prepare($sql_liste_nom_grade_personnel);
$requete->execute();
$resultat = $requete->fetchAll();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formulaire manoeuvre</title>
</head>
<body>
<header>
<h1>
<p class="p_header">Manoeuvre</p>
</h1>
</header>
<form id="form" name="formulaire_manoeuvre" method="POST" action="traitement_formulaire_manoeuvre.php">
<table>
<tr>
<th>Date de la manoeuvre :</th>
<td><input type="date" name="date_manoeuvre" required></td>
</tr>
<tr>
<th>Theme de la manoeuvre :</th>
<td><input type="text" name="theme_manoeuvre" required></td>
</tr>
<tr>
<th>Commentaire manoeuvre :</th>
<td><textarea name="commentaire_manoeuvre"></textarea></td>
</tr>
</table>
<table>
<thead>
<tr>
<th>Nom Prenom</th>
<th>Présence</th>
<th>Commentaire</th>
</tr>
</thead>
<tbody>
<?php foreach ($resultat as $index => $ligne) { ?>
<tr>
<td>
<input type="hidden" name="inscrits[<?php echo $index; ?>][matricule]" value="<?php echo htmlspecialchars($ligne['matricule']); ?>">
<input type="text" name="inscrits[<?php echo $index; ?>][nom]" value="<?php echo htmlspecialchars($ligne['MIN(t_grade.grade)'] . " " . $ligne['MIN(t_personnel.prenom)']); ?>">
</td>
<td>
<select name="inscrits[<?php echo $index; ?>][presence]">
<option value="present" selected>Présent</option>
<option value="absent">Absent</option>
</select>
</td>
<td>
<input type="text" name="inscrits[<?php echo $index; ?>][commentaire]">
</td>
</tr>
<?php } ?>
</tbody>
</table>
<input type="submit" name="enregistrer" value="ENREGISTRER">
</form>
</body>
</html>
Essaye de faire un var_dump($_POST); et/ou var_dump($_POST['inscrits']); dans le script de traitement pour voir si les données sont correctement envoyées. Tu devras surement faire une boucle sur le tableau $_POST['inscrits'] pour exploiter la liste des personnes inscrites envoyée par le formulaire.
Pour le script de traitement du formulaire, il semble y avoir un problème de conception pour ton modèle de données.
Puisque tu veux enregistrer les informations d'une manoeuvre et la liste des personnes inscrites à cette manoeuvre, une solution serait d'avoir 2 tables en base de données :
- une table qui contiendra les informations de la manoeuvre (date_manoeuvre, theme_manoeuvre, commentaire_manoeuvre)
- une table qui contiendra les inscriptions pour chaque manoeuvre (matricule, nom, presence, commentaire, id_manoeuvre)
Pour créer la relation entre tes 2 tables, il faudra ajouter dans la table qui contient les inscriptions un champ id_manoeuvre qui sera une clé étrangère faisant référence à la clé primaire de la table qui contient les manoeuvres.