[RESOLU] traitement formulaire

Petit nouveau ! | 5 Messages

25 mars 2023, 11:12

Bonjour,
je désir enregistrer le résultat d un formulaire dans ma base de donnée. cependant avec le code ci-dessous je n’obtiens que le la dernière valeur <input type = "text" class ="" name = "nom" value="<?php echo $ligne['MIN(t_grade.grade)']; ?>">
<?php
                    $requete = $db -> prepare($sql_liste_nom_grade_personnel);
                                    $requete -> execute();
                                    $resultat = $requete -> fetchAll();
                                    foreach ($resultat as $ligne){
                                    ?>
                        <!--<th>Nom  Prenom : </th> -->
                        <th> <input type = "text" class ="" name = "nom" value="<?php echo $ligne['MIN(t_grade.grade)']; ?>"> </th>
                        <th><select name= "presence" id="presence">
                            <option value="present"> Présent </option>
                            <option value="absent"> Absent </option>
                        </select></th>
                        <th> <input type = "text" class ="" name = "commentaire"></th>
                    </tr>
                    <input type="hidden" name="matricule" value="<?php echo $ligne['matricule'];?>">
                    <input type="hidden" name="theme_manoeuvre" value="">
                    
                                <?php } ?>
                </table>    
                <input type="submit" name="enregistrer" value="ENREGISTRER">
                
dans ma page de traitement $variable = $_POST['nom'];

Avez une idée ?

ynx
Mammouth du PHP | 586 Messages

25 mars 2023, 12:49

Bonjour,

Utilise un tableau si tu veux récupérer plusieurs noms : <input type="text" name="nom[]" value="...">

Petit nouveau ! | 5 Messages

27 mars 2023, 17:25

Bonjour,
merci de votre aide.

Petit nouveau ! | 5 Messages

29 mars 2023, 18:47

Bonjour,
dans la continuité de mon code je souhaite maintenant enregistrer le résultat obtenue dans ma table mais la je bloque encore voici mon code :
<?php 
require 'C:/wamp64/www/gestion_cs_semur/connexion.php';
require 'C:/wamp64/www/gestion_cs_semur/index_sql.php';
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <!-- En-tête de la page -->
        <meta charset="utf-8" />
        <link rel="stylesheet" type="text/css" href="">
        <title>Formulaire manoeuvre </title>
    </head>
    
    <body>
        <form id = "form" name = "formulaire_manoeuvre" method ="POST" action ="traitement_formulaire_manoeuvre.php">
            <header>
               <h1>
                <p class ="p_header"> Manoeuvre </p>
               </h1>
            </header>
                <table>
                    <tr>
                        <th>Date de la manoeuvre :</th><th> <input type="date" name="date_manoeuvre"></th>
                    </tr>
                    <tr>
                        <th>Theme de la manoeuvre :</th><th> <input type="text" name="theme_manoeuvre"></th>
                    </tr>
                    <tr>
                        <th>Commentaire manoeuvre :</th><th> <textarea  name="commentaire_manoeuvre"></textarea></th>
                    </tr>
                </table>
                <table>
                    <td> Nom Prenom</td>
                    <td>Présence</td>
                    <tr>
                    <?php
                    $requete = $db -> prepare($sql_liste_nom_grade_personnel);
                                    $requete -> execute();
                                    $resultat = $requete -> fetchAll();
                                    foreach ($resultat as $ligne){
                                    ?>
                        <!--<th>Nom  Prenom : </th> -->
                        <th> <input type = "text" class ="" name = "nom" value="<?php echo $ligne['MIN(t_grade.grade)'],
                        
                        " ",$ligne['MIN(t_personnel.prenom)']; ?>"> </th>
                        <th><select name= "presence[]">
                            <option value="present" selected>  Présent </option>
                            <option value="absent"> Absent </option>
                        </select></th>
                        <th> <input type = "text" class ="" name = "commentaire[]"></th>
                    </tr>
                    <input type="hidden" name="matricule[]" value="<?php echo $ligne['matricule'];?>">
                    <?php } ?>
                    <!--<input type="hidden" name="theme_manoeuvre" value="">-->
                </table>    
                <input type="submit" name="enregistrer" value="ENREGISTRER">
        </form>
    </body>
</html>
voici ma page de traitement :
<?php 
function insert_into_t_manoeuvre (){

require 'C:/wamp64/www/gestion_cs_semur/connexion.php';



$matricule = $_POST['matricule'];

$presence = $_POST['presence'];
$theme_manoeuvre = $_POST['theme_manoeuvre'];
$date_manoeuvre = $_POST['date_manoeuvre'];
$commentaire_manoeuvre = ['commentaire_manoeuvre'];
$commentaire = $_POST['commentaire'];
if(empty($commentaire)){
    $commentaire = NULL;
}

$insert_into_manoeuvre = "INSERT INTO t_manoeuvre_copie (matricule,date_manoeuvre,presence,commentaire,theme_manoeuvre,commentaire_manoeuvre)
VALUE (:matricule,:date_manoeuvre,:presence,:commentaire,:theme_manoeuvre,:commentaire_manoeuvre)";

$tab = array('matricule' => $matricule,
'date_manoeuvre'=> $date_manoeuvre,
'presence'=>$presence,
'commentaire' => $commentaire,
'theme_manoeuvre' =>$theme_manoeuvre,
'commentaire_manoeuvre' => $commentaire_manoeuvre
);

$requete = $db -> prepare($insert_into_manoeuvre);
$requete->execute($tab);
}
insert_into_t_manoeuvre();
?>
merci d'avance !!!!!!

Avatar du membre
Mammouth du PHP | 1609 Messages

30 mars 2023, 11:33

VALUES
Développeur web depuis + de 20 ans

Petit nouveau ! | 5 Messages

30 mars 2023, 16:57

Bonjour merci pour la correction mais cela ne fonctionne pas non plus.

Mammouth du PHP | 1967 Messages

30 mars 2023, 17:17

$presence et $matricule sont desormais des tableaux, il faut les traiter en tant que tel.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

ynx
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.

Petit nouveau ! | 5 Messages

31 mars 2023, 21:57

Bonsoir super merci pour cette énorme correction. Tout fonctionne comme je le souhaite ou presque quelques détail à modifier mais grâce à vous j'ai fait un grand pas en avant. :D