Comment insérer un captcha dans mon formulaire

Résolu
bonjour a tous
je pensais avoir fini mon site
Mais je suis ennuyé par de petits malins robots qui m envoie des spams dans mon formulaire de contact
je dois donc intervenir et y placer un captcha

je viens de trouver un tuto a cette page qui me plais bien
https://palmi.smileandjoke.fr/php-captcha-simple-tableau-questions-reponses-29

Mais malheureusement
j ai une erreur que je ne parviens pas a décrypté

Notice: Undefined index: msg in /home/u434600775/domains/pecheperle.be/public_html/phil/testcontact.php on line 100

au niveau de cette ligne
<div><?= $_SESSION['msg'] ?></div>


voici le code complet donc d abord celui du formulaire

<?php
   // Démarrage de session pour pouvoir récupérer la réponse
   session_start();
   
   //on affiche les erreurs 
   error_reporting(E_ALL);
   ini_set('display_errors', TRUE);
   ini_set('display_startup_errors', TRUE);
   
   // Tableau avec les différentes questions/réponses pour notre captcha
   $quiz = [
       0 => [
           'question' => 'Quel est le premier jour de la semaine?',
           'answer' => 'lundi'
       ],
       1 => [
           'question' => 'Quel est le deuxième jour de la semaine?',
           'answer' => 'mardi'
       ],
       2 => [
           'question' => 'Quel est le troisième jour de la semaine?',
           'answer' => 'mercredi'
       ],
   ];
   
   // On utilise array_rand pour avoir un id aléatoire de notre tableau
   $id = array_rand($quiz);
   
   // On utilise l'id donné par array_rand pour pouvoir stocker la bonne réponse dans $_SESSION['reponse']
   $_SESSION['answer'] = $quiz[$id]['answer'];
   
   // On stock la question dans une variable toujours via l'id donné par array_rand
   $question = $quiz[$id]['question'];
   ?>
<!doctype html>
<html lang="fr">
   <!-- debut head -->
   <head>
      <?php include("./include/head.php"); ?>
      <!-- deux scripts tarteaucitron le deuxiem est celui qui devrait etres mis en dur dans chque page-->
      <script  src="/tarteaucitron/tarteaucitron.js"></script>
      <script src="/js/tartecitron-peche-perle2.js"></script>
      <title>Formulaire de contat pour la pêche à la perle</title>
      <link rel="shortcut icon" href="https://phil.pecheperle.be/image/la-peche-a-la-perle.ico" type="image/x-icon"/>
      <meta name="description" content="Une question ,un renseignement sur la pêche a la perle du gardon?utilises le formulaire de contact  ">
      <link rel="stylesheet" type="text/css" href="/css/banniere-menu-peche-perle.css"/>
      <link rel="stylesheet" type="text/css" href="/css/contact-peche-perle.css"/>
   </head>
   <!-- fin head -->
   
   <!-- debut body -->
   <body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'">
      <div class="container" style="background-color:#87CEEB;">
	  
         <!-- debut container entete-->
         <div class="container" style=" max-width: 100%;margin:auto;">
            <?php include("./include/baniere-peche-perle.php"); ?>
            <?php include("./include/menu3.php"); ?>
         </div>
		 
         <!-- id attende chargement page -->
         <div id='attente'>
            <p style="text-align: center;font-size: 24px;">Veuillez patienter svp la page est en cours de chargement ...</p>
         </div>
		 
         <!-- debut body -->
         <body>
		 
            <!-- debut container page -->
            <div class="container1 border border-dark" style="padding: 15px;background: #ECE9E7;">
			
               <!-- debut formulaire-->
               <form id="form" enctype="multipart/form-data" action="traitement-formulaire-test.php" onsubmit="return validate()" method="post" style="background: #ECE9E7;">
                  <h1>Formulaire de contact</h1>
                  <div class="form-group">
                     <label for="name">Nom:<span>*</span></label>
                     <input type="text" id="name" name="name" class="form-control" placeholder="Nom" required>
                  </div>
                  <div class="form-group">
                     <label for="email">Email:<span>*</span></label>
                     <input type="email" class="form-control" id="email" name="email" placeholder="Email">
                     <label for="email">Email</label>
                  </div>
                  <div class="form-group">
                     <label for="subject">Sujet:</label>
                     <input type="text" id="subject" name="subject" class="form-control" placeholder="Demande de renseignement">
                  </div>
                  <div class="form-group">
                     <label for="messager">Le message</label>
                     <textarea name="messager" class="form-control" id="messager" rows="3" placeholder="Message..." required></textarea>
                  </div>
				  
                                <!-- debut traitemnt captcha -->
                  <h3>Captcha</h3>
				  
                  <!-- la question récupérée  -->
                  <div><?= $question ?></div>
				  
                  <!-- retour éventuel renvoyé par la page de traitement -->
                  <div><?= $_SESSION['msg'] ?></div>
                  <div>
                     <label for="">captcha</label>
                     <input type="text" name="captcha">
                  </div>
                  <input type="submit" name="send" value="Envoyer "/>
               </form>
            </div>
            <div class="container" style=" max-width: 100%;margin:auto;">
			
               <!-- debut pied de page-->
               <?php include("./include/pied-de-page.php"); ?>
               <?php include("./include/footer.php"); ?>
            </div>
      </div>
   </body>
   <!-- fin du body-->
</html>


et ensuite du traitement
<?php
session_start();

// phase du captcha
// Si la reponse de l'input captcha n'est pas vide
if(!empty($_POST['captcha'])){
	
    // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
    $userAnswer = strtolower($_POST['captcha']);
	
    // Si on envoi le formulaire
    if(isset($_POST['submit'])){
		
        // On compare la réponse stocké dans la session avec la réponse de l'utilisateur
        if($_SESSION['answer'] == $userAnswer){
			
            // Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
            $_SESSION['msg'] = 'ok';
			
        // Si la réponse n'est pas bonne
        }else{
			
            // On envoi ici un message si la réponse n'est pas identique
            $_SESSION['msg'] = 'Captcha non valide...';
        }
		
            // Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
            header('Location: index.php');
        }
		
    // else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
    }else{
        $_SESSION['msg'] = '';
        header('Location: index.php');
}

//on continue le reste du traitement enregistrement base de donnee +envois par mail
if (!empty($_POST["send"]))
{
    //Si les variable $_POST existent et ne sont  pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
    $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
    $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
    $subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
    $messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
	
    // les variables sont pretes a etres utilisees
    $name = $_POST["name"];
    $email = $_POST["email"];
    $subject = $_POST["subject"];
    $messager = $_POST["messager"];
	
	// connexion base de donnee
    include ('base.php');
	
    //préparation de la requête et des variables
    $sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
    $datas = array($name,$email,$subject,$messager );
	
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
  
      //on teste pour voir si tout est ok
    if ($requete)
    {
        $db_msg = "Vos informations de contact sont enregistrées avec succés.";
        $type_db_msg = "success";
        header("location:reponses-formulaire.php");
    }
    else
    {
        $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
        $type_db_msg = "error";
    }
}
//fin de la transmission des donnees dans la table
//l'envoie du mail
if (!empty($_POST["send"]))
{
    $messager = $_POST["messager"];
    $name = $_POST["name"];
    $subject = $_POST["subject"];
    $email = $_POST["email"];
    // on entre un ou Plusieurs destinataires
    $to = 'perroquet666@hotmail.com'; // notez la virgule
    // Sujet
    //$subject= "une reussite";
    // message
    $message = '
   <html>
   <head>
   <title>Voici les reponses au sondage</title>
   </head>
   <body>
   <p>Voici le formulaire de contact</p>
   <tr>
   <td>le prenom     </td><td>' . $name . '</td></br>
   </tr>
   <tr>
   <td>l adresse mail    </td><td>' . $email . '</td></br>
   </tr>
   <tr>
   <td>le prenom     </td><td>' . $subject . '</td></br>
   </tr>
   <tr>
   <td>le textera    </td><td>' . $messager . '</td></br>
   </tr>
   </body>
   </html>
   ';
    // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
    $headers[] = 'MIME-Version: 1.0';
    $headers[] = 'content-type: text/html; charset=utf-8';
    // En-têtes additionnels
    //$headers[] =  "From: " . $name . "<". $_POST["email"] .">\r\n";
    $headers[] = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $name . "\r\n" . 'X-Mailer: PHP/' . phpversion();
    // Envoi
    //var_dump($headers);
    if (mail($to, $subject, $message, implode("\r\n", $headers)))
    {
        // success message
        //echo "Success!<br />";
    }
    else
    {
        // error message
        //echo "Fail<br />";
    }
}

13 réponses

Résumé de la discussion

Le captcha intégré à un formulaire de contact déclenche une notice Undefined index: msg lors de l'affichage de $_SESSION['msg'], car la clé n'est pas initialisée dans toutes les branches du traitement. Des solutions efficaces consistent à initialiser $_SESSION['msg'] par défaut et à garantir que chaque chemin du script écrit cette clé, ou à vérifier son existence avec isset avant son affichage. Le code présente une incohérence entre le nom du bouton du formulaire (send) et la vérification côté serveur (submit), ce qui peut empêcher l'exécution du flux captcha et le dépôt des données. D'autres points utiles: vérifier que $_SESSION['answer'] est défini lorsqu'une question captcha est sélectionnée et que la comparaison avec $_POST['captcha'] ne s'appuie pas sur des valeurs non définies.

Bobot (l’IA à votre service)
  1. bonsoir jordane
    Merci pour la réponse
    juste en effet
    voila plus de message d erreur
    c est déjà le bon début

    Mais le captcha ne fonctionne pas
    lorsque je valide le formulaire avec une mauvaise réponse , il n'en tiens pas compte et envois le formulaire quand même
    1. Modérateur
      Ben oui ... dans le tuto .. le bouton se nomme "submit"
       <input type="submit" name="submit">
      

      et dans ton code ;.. il se nomme "send"
        <input type="submit" name="send" value="Envoyer "/>
      


      Alors tu peux conserver ton bouton avec le nom "send" .. mais dans ce cas.. il faut modifier le code php du tuto pour vérifier si $_POST['send'] est envoyé et non pas le submit .. (ligne 6 de ton fichier de traitement )
  2. Oui encore une fois bien vu jordane
    Mais je ne vois pas de submit a la ligne 6

    j'ai essayé de modifié le submit la ligne 12 du traitement mais le formulaire est parti quand même
    pourtant il n y a que sur cette ligne la qu'il existe
    1. Modérateur
      Oui c'est bien la ligne 12...

      Il y a aussi la ligne 28 qui n'est pas à la bonne place il faudrait la mettre dans le else de la ligne 24..

      Pour la suite si ça ne fonctionne toujours pas, il faudrait faire un Var_dump des différentes variables pour voir ce qu'elle contienne je parle des variable de session et de la variable post
  3. Merci jordane voila j'ai effectue les corrections
    Mais a présent un autre petit soucis

    lorsque je lance le formulaire
    j ai déjà le message Captcha non valide...

    c'est bizarre ...
    1. Modérateur
      Je ne peux pas deviner de quelle façon tu as modifié exactement le code.... Nous montrer ta nouvelle version nous serait fort utile...
      À noter que si le code de traitement se situe dans la même page que le code du formulaire le premier else ( celui qui contient le message d'erreur ) est superflu
  4. merci pour ton aide jordane
    après avoir changé de navigateur le message ne s affiche plus
    pourtant je vide le cache sur firefox a chaque fois

    Mais le formulaire continue même avec un mauvais captcha

    je vais donc faire les Var_dump
    et je viendrais poster mon code
    1. voila je pense avoir bien positionner les var_dump

      le formulaire

      <?php
         // Démarrage de session pour pouvoir récupérer la réponse
         session_start();
         
         //on affiche les erreurs 
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
         
      
      //ou avec !EMPTY() 
      //Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc']  sinon elle vaut NULL 
      $_SESSION['msg']= !empty($_SESSION['msg']) ? $_SESSION['msg'] : NULL;
         
          // Tableau avec les différentes questions/réponses pour notre captcha
         $quiz = [
             0 => [
                 'question' => 'Quel est le premier jour de la semaine?',
                 'answer' => 'lundi'
             ],
             1 => [
                 'question' => 'Quel est le deuxième jour de la semaine?',
                 'answer' => 'mardi'
             ],
             2 => [
                 'question' => 'Quel est le troisième jour de la semaine?',
                 'answer' => 'mercredi'
             ],
         ];
         
         // On utilise array_rand pour avoir un id aléatoire de notre tableau
         $id = array_rand($quiz);
         
         // On utilise l'id donné par array_rand pour pouvoir stocker la bonne réponse dans $_SESSION['reponse']
         $_SESSION['answer'] = $quiz[$id]['answer'];
         
         Var_dump ($_SESSION['answer']);
         Var_dump ($_SESSION['msg']);
         
         // On stock la question dans une variable toujours via l'id donné par array_rand
         $question = $quiz[$id]['question'];
         ?>
      <!doctype html>
      <html lang="fr">
         <!-- debut head -->
         <head>
            <?php include("./include/head.php"); ?>
            <!-- deux scripts tarteaucitron le deuxiem est celui qui devrait etres mis en dur dans chque page-->
            <script  src="/tarteaucitron/tarteaucitron.js"></script>
            <script src="/js/tartecitron-peche-perle2.js"></script>
            <title>Formulaire de contat pour la pêche à la perle</title>
            <link rel="shortcut icon" href="https://phil.pecheperle.be/image/la-peche-a-la-perle.ico" type="image/x-icon"/>
            <meta name="description" content="Une question ,un renseignement sur la pêche a la perle du gardon?utilises le formulaire de contact  ">
            <link rel="stylesheet" type="text/css" href="/css/banniere-menu-peche-perle.css"/>
            <link rel="stylesheet" type="text/css" href="/css/contact-peche-perle.css"/>
         </head>
         <!-- fin head -->
         
         <!-- debut body -->
         <body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'">
            <div class="container" style="background-color:#87CEEB;">
      	  
               <!-- debut container entete-->
               <div class="container" style=" max-width: 100%;margin:auto;">
                  <?php include("./include/baniere-peche-perle.php"); ?>
                  <?php include("./include/menu3.php"); ?>
               </div>
      		 
               <!-- id attende chargement page -->
               <div id='attente'>
                  <p style="text-align: center;font-size: 24px;">Veuillez patienter svp la page est en cours de chargement ...</p>
               </div>
      		 
               <!-- debut body -->
               <body>
      		 
                  <!-- debut container page -->
                  <div class="container1 border border-dark" style="padding: 15px;background: #ECE9E7;">
      			
                     <!-- debut formulaire-->
                     <form id="form" enctype="multipart/form-data" action="traitement-formulaire-test.php" onsubmit="return validate()" method="post" style="background: #ECE9E7;">
                        <h1>Formulaire de contact</h1>
                        <div class="form-group">
                           <label for="name">Nom:<span>*</span></label>
                           <input type="text" id="name" name="name" class="form-control" placeholder="Nom" required>
                        </div>
                        <div class="form-group">
                           <label for="email">Email:<span>*</span></label>
                           <input type="email" class="form-control" id="email" name="email" placeholder="Email">
                           <label for="email">Email</label>
                        </div>
                        <div class="form-group">
                           <label for="subject">Sujet:</label>
                           <input type="text" id="subject" name="subject" class="form-control" placeholder="Demande de renseignement">
                        </div>
                        <div class="form-group">
                           <label for="messager">Le message</label>
                           <textarea name="messager" class="form-control" id="messager" rows="3" placeholder="Message..." required></textarea>
                        </div>
      				  
                                      <!-- debut traitemnt captcha -->
                        <h3>Captcha</h3>
      				  
                        <!-- la question récupérée  -->
                        <div><?= $question ?></div>
      				  
                        <!-- retour éventuel renvoyé par la page de traitement -->
                       <div><?= $_SESSION['msg'] ?></div>
                        <div>
                           <label for="">captcha</label>
                           <input type="text" name="captcha">
                        </div>
                        <input type="submit" name="send" value="Envoyer "/>
                     </form>
                  </div>
                  <div class="container" style=" max-width: 100%;margin:auto;">
      			
                     <!-- debut pied de page-->
                     <?php include("./include/pied-de-page.php"); ?>
                     <?php include("./include/footer.php"); ?>
                  </div>
            </div>
         </body>
         <!-- fin du body-->
      </html>
      


      le traitement

      <?php
      session_start();
      
      // phase du captcha
      // Si la reponse de l'input captcha n'est pas vide
      var_dump($_POST['captcha']);
      
      if(!empty($_POST['captcha'])){
      	
          // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
          $userAnswer = strtolower($_POST['captcha']);
      	
          // Si on envoi le formulaire
          if(isset($_POST['send'])){
              
      		var_dump($_POST['send']);
      		
              // On compare la réponse stocké dans la session avec la réponse de l'utilisateur
              if($_SESSION['answer'] == $userAnswer){
      			
      			var_dump($_SESSION['answer']);
                  // Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
                  $_SESSION['msg'] = 'ok';
      			
              // Si la réponse n'est pas bonne
              }else{
      			
                  // On envoi ici un message si la réponse n'est pas identique
                  $_SESSION['msg'] = 'Captcha non valide...';
                   // Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
                  header('Location: https://phil.pecheperle.be/testcontact.php');
              }
      		
                 
              }
      		
          // else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
          }else{
              $_SESSION['msg'] = '';
              header('Location: https://phil.pecheperle.be/testcontact.php');
      }
      
      //on continue le reste du traitement enregistrement base de donnee +envois par mail
      if (!empty($_POST["send"]))
      {
          //Si les variable $_POST existent et ne sont  pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
          $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
          $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
          $subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
          $messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
      	
          // les variables sont pretes a etres utilisees
          $name = $_POST["name"];
          $email = $_POST["email"];
          $subject = $_POST["subject"];
          $messager = $_POST["messager"];
      	
      	// connexion base de donnee
          include ('base.php');
      	
          //préparation de la requête et des variables
          $sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
          $datas = array($name,$email,$subject,$messager );
      	
          //Execution de la requete
          try
          {
              $requete = $bdd->prepare($sql);
              $requete->execute($datas);
          }
          catch(Exception $e)
          {
              // en cas d'erreur :
              echo " Erreur ! " . $e->getMessage();
              echo " Les datas : ";
              print_r($datas);
          }
        
            //on teste pour voir si tout est ok
          if ($requete)
          {
              $db_msg = "Vos informations de contact sont enregistrées avec succés.";
              $type_db_msg = "success";
              header("location:reponses-formulaire.php");
          }
          else
          {
              $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
              $type_db_msg = "error";
          }
      }
      //fin de la transmission des donnees dans la table
      //l'envoie du mail
      if (!empty($_POST["send"]))
      {
          $messager = $_POST["messager"];
          $name = $_POST["name"];
          $subject = $_POST["subject"];
          $email = $_POST["email"];
          // on entre un ou Plusieurs destinataires
          $to = 'perroquet666@hotmail.com'; // notez la virgule
          // Sujet
          //$subject= "une reussite";
          // message
          $message = '
         <html>
         <head>
         <title>Voici les reponses au sondage</title>
         </head>
         <body>
         <p>Voici le formulaire de contact</p>
         <tr>
         <td>le prenom     </td><td>' . $name . '</td></br>
         </tr>
         <tr>
         <td>l adresse mail    </td><td>' . $email . '</td></br>
         </tr>
         <tr>
         <td>le prenom     </td><td>' . $subject . '</td></br>
         </tr>
         <tr>
         <td>le textera    </td><td>' . $messager . '</td></br>
         </tr>
         </body>
         </html>
         ';
          // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
          $headers[] = 'MIME-Version: 1.0';
          $headers[] = 'content-type: text/html; charset=utf-8';
          // En-têtes additionnels
          //$headers[] =  "From: " . $name . "<". $_POST["email"] .">\r\n";
          $headers[] = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $name . "\r\n" . 'X-Mailer: PHP/' . phpversion();
          // Envoi
          //var_dump($headers);
          if (mail($to, $subject, $message, implode("\r\n", $headers)))
          {
              // success message
              //echo "Success!<br />";
          }
          else
          {
              // error message
              //echo "Fail<br />";
          }
      }
      1. Modérateur
        Alors...
        Tu peux retirer tous tes var_dump ... et simplement les remplacer ( à placer au tout début de tes deux fichiers )
        par :
        <?php
         // Démarrage de session 
         session_start();
           
         //on affiche les erreurs 
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
        
        var_dump($_SESSION);
        var_dump($_POST);
        
        


        et puis.. ensuite ... mettre des var_dump c'est bien .... nous montrer ce qu'ils te retournent .. c'est mieux...
      2. @jordane45Merci pour le code jordane
        et voici le résultat

        array(2) { ["msg"]=> string(21) "Captcha non valide..." ["answer"]=> string(5) "lundi" } array(0) { } 
      3. Modérateur
        @flexi2202La ce sont les dump avant que tu ne submit le formulaire...
        Rempli le et submit pour voir..
      4. @jordane45en fait comme tu peux le voir dans mon code le formulaire une fois remplit et submit
        l utilisateur est renvoyé vers une page de remerciement
        et donc on ne sait rien voir puisque nous ne sommes plus sur la page du formulaire
      5. Modérateur
        @flexi2202Tu peux toujours mettre en commentaire les redirections pour voir ce que ça donne..
        Mais surtout, et c'est le principal je pense, une fois que tu auras transmis le formulaire correctement.... Tu n'auras plus le message d'erreur sur ta première page... (Qui n'était rien de plus qu'un résidu de tes tests précédents)
    2. lorsque je fais un var_dump de ceci

       $question = $quiz[$id]['question'];
         Var_dump ($question );


      j'ai ceci qui est retourné

      string(21) "Captcha non valide..." string(42) "Quel est le troisième jour de la semaine?"
      1. bonsoir jordane
        je ne sais pas si tu as lu mon message
        Mais je le reposte , si tu passes par la ..

        non malheureusement cela n est pas bon
        lorsque je rentre une mauvaise réponse cela donne ceci au niveau des
        va_dump
        array(2) { ["msg"]=> string(21) "Captcha non valide..." ["answer"]=> string(5) "mardi" } array(0) { }

        Mais le formulaire est envoyé quand même
        1. Modérateur
          Oui mais... tu as retiré les redirections pour pouvoir voir le résultat des dump .....
          Donc.. si pas de redirection... ton script ne s'arrête plus en cas d'erreur .....
          A la limite... remplace les redirections par des exit(); et là tu verras que tu ne vas pas plus loin...
      2. Merci pour l aide jordane
        j ai donc mis l exit
        Mais cette fois comme tu dis je ne vais pas plus loin
        que je rentre le bon ou le mauvais captcha
        mais en principe avant d enregistrer les données dans la base de donne et d envoyer le mail
        il devrait vérifier le captcha ?

        je viens donc de remplacer la redirection
        par ceci
        c est juste le morceau de code remplacer
        le code complet est après

           //on teste pour voir si tout est ok
            if ($requete)
            {
                $db_msg = "Vos informations de contact sont enregistrées avec succés.";
                $type_db_msg = "success";
                //header("location:reponses-formulaire.php");
                exit(); 
            }
            else
            {
                $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
                $type_db_msg = "error";
            }


        <?php
         // Démarrage de session 
         session_start();
           
         //on affiche les erreurs 
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
        
        var_dump($_SESSION);
        var_dump($_POST);
        
        // phase du captcha
        // Si la reponse de l'input captcha n'est pas vide
        //var_dump($_POST['captcha']);
        
        if(!empty($_POST['captcha'])){
        	
            // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
            $userAnswer = strtolower($_POST['captcha']);
        	
            // Si on envoi le formulaire
            if(isset($_POST['send'])){
                
        		//var_dump($_POST['send']);
        		
                // On compare la réponse stocké dans la session avec la réponse de l'utilisateur
                if($_SESSION['answer'] == $userAnswer){
        			
        			//var_dump($_SESSION['answer']);
                    // Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
                    $_SESSION['msg'] = 'ok';
        			
                // Si la réponse n'est pas bonne
                }else{
        			
                    // On envoi ici un message si la réponse n'est pas identique
                    $_SESSION['msg'] = 'Captcha non valide...';
                     // Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
                    header('Location: https://phil.pecheperle.be/testcontact.php');
                }
        		
                   
                }
        		
            // else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
            }else{
                $_SESSION['msg'] = '';
                header('Location: https://phil.pecheperle.be/testcontact.php');
        }
        
        //on continue le reste du traitement enregistrement base de donnee +envois par mail
        if (!empty($_POST["send"]))
        {
            //Si les variable $_POST existent et ne sont  pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
            $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
            $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
            $subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
            $messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
        	
            // les variables sont pretes a etres utilisees
            $name = $_POST["name"];
            $email = $_POST["email"];
            $subject = $_POST["subject"];
            $messager = $_POST["messager"];
        	
        	// connexion base de donnee
            include ('base.php');
        	
            //préparation de la requête et des variables
            $sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
            $datas = array($name,$email,$subject,$messager );
        	
            //Execution de la requete
            try
            {
                $requete = $bdd->prepare($sql);
                $requete->execute($datas);
            }
            catch(Exception $e)
            {
                // en cas d'erreur :
                echo " Erreur ! " . $e->getMessage();
                echo " Les datas : ";
                print_r($datas);
            }
          
              //on teste pour voir si tout est ok
            if ($requete)
            {
                $db_msg = "Vos informations de contact sont enregistrées avec succés.";
                $type_db_msg = "success";
                //header("location:reponses-formulaire.php");
                exit(); 
            }
            else
            {
                $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
                $type_db_msg = "error";
            }
        }
        //fin de la transmission des donnees dans la table
        //l'envoie du mail
        if (!empty($_POST["send"]))
        {
            $messager = $_POST["messager"];
            $name = $_POST["name"];
            $subject = $_POST["subject"];
            $email = $_POST["email"];
            // on entre un ou Plusieurs destinataires
            $to = 'perroquet666@hotmail.com'; // notez la virgule
            // Sujet
            //$subject= "une reussite";
            // message
            $message = '
           <html>
           <head>
           <title>Voici les reponses au sondage</title>
           </head>
           <body>
           <p>Voici le formulaire de contact</p>
           <tr>
           <td>le prenom     </td><td>' . $name . '</td></br>
           </tr>
           <tr>
           <td>l adresse mail    </td><td>' . $email . '</td></br>
           </tr>
           <tr>
           <td>le prenom     </td><td>' . $subject . '</td></br>
           </tr>
           <tr>
           <td>le textera    </td><td>' . $messager . '</td></br>
           </tr>
           </body>
           </html>
           ';
            // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
            $headers[] = 'MIME-Version: 1.0';
            $headers[] = 'content-type: text/html; charset=utf-8';
            // En-têtes additionnels
            //$headers[] =  "From: " . $name . "<". $_POST["email"] .">\r\n";
            $headers[] = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $name . "\r\n" . 'X-Mailer: PHP/' . phpversion();
            // Envoi
            //var_dump($headers);
            if (mail($to, $subject, $message, implode("\r\n", $headers)))
            {
                // success message
                //echo "Success!<br />";
            }
            else
            {
                // error message
                //echo "Fail<br />";
            }
        }
        1. Modérateur
          déjà.. il serait bien que tu nous précises le nom des fichiers pour chaque code que tu nous montres ...

          Ensuite... tu nous colles que des bouts de code.... il serait bien de nous mettre l'intégralité de tes fichiers !!! (je te le dis à chaque fois !!!!! )
          là.. on ne sait pas comment sont organisés tes scripts... où se trouvent les codes que tu nous montres ... dans quel ordre ... si il y d'autres choses avant ou après....
        2. @jordane45Merci pour la réponse jordane et la réaction
          en fait j essaye d être le plus clair possible , mais cela n est pas toujours évident
          je pense avoir compris mon problème
          a la ligne 28 il y a ma condition que si elle vrai un message ok doit pouvoir s'afficher
          Mais a cet endroit je devrais venir insérer de 53 a 153
          de telle façon a ce que si la condition est bonne l envois de mon mail et l insertion de la base de donnée fonctionne
          voici le code du traitement que j'ai modifie
          Mais je me demande si mes imbrications sont bonne

          voici donc mon fichier de traitement
          <?php
           // Démarrage de session 
           session_start();
             
           //on affiche les erreurs 
           error_reporting(E_ALL);
           ini_set('display_errors', TRUE);
           ini_set('display_startup_errors', TRUE);
          
          var_dump($_SESSION);
          var_dump($_POST);
          
          // phase du captcha
          // Si la reponse de l'input captcha n'est pas vide
          //var_dump($_POST['captcha']);
          
          if(!empty($_POST['captcha'])){
           
              // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
              $userAnswer = strtolower($_POST['captcha']);
           
              // Si on envoi le formulaire
              if(isset($_POST['send'])){
                  
            //var_dump($_POST['send']);
            
                  // On compare la réponse stocké dans la session avec la réponse de l'utilisateur
                  if($_SESSION['answer'] == $userAnswer){
             
             //var_dump($_SESSION['answer']);
                      // Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
                     // $_SESSION['msg'] = 'ok';
          
          
          //on continue le reste du traitement enregistrement base de donnee +envois par mail
          if (!empty($_POST["send"]))
          {
             ​//Si les variable $_POST existent et ne sont  pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
             ​$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
             ​$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
             ​$subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
             ​$messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
           
             ​// les variables sont pretes a etres utilisees
             ​$name = $_POST["name"];
             ​$email = $_POST["email"];
             ​$subject = $_POST["subject"];
             ​$messager = $_POST["messager"];
           
           // connexion base de donnee
             ​include ('base.php');
           
             ​//préparation de la requête et des variables
             ​$sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
             ​$datas = array($name,$email,$subject,$messager );
           
             ​//Execution de la requete
             ​try
             ​{
                 ​$requete = $bdd->prepare($sql);
                 ​$requete->execute($datas);
             ​}
             ​catch(Exception $e)
             ​{
                 ​// en cas d'erreur :
                 ​echo " Erreur ! " . $e->getMessage();
                 ​echo " Les datas : ";
                 ​print_r($datas);
             ​}
           ​
               ​//on teste pour voir si tout est ok
             ​if ($requete)
             ​{
                 ​$db_msg = "Vos informations de contact sont enregistrées avec succés.";
                 ​$type_db_msg = "success";
                 ​//header("location:reponses-formulaire.php");
                 ​exit(); 
             ​}
             ​else
             ​{
                 ​$db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
                 ​$type_db_msg = "error";
             ​}
          }
          //fin de la transmission des donnees dans la table
          //l'envoie du mail
          if (!empty($_POST["send"]))
          {
             ​$messager = $_POST["messager"];
             ​$name = $_POST["name"];
             ​$subject = $_POST["subject"];
             ​$email = $_POST["email"];
             ​// on entre un ou Plusieurs destinataires
             ​$to = 'perroquet666@hotmail.com'; // notez la virgule
             ​// Sujet
             ​//$subject= "une reussite";
             ​// message
             ​$message = '
            ​<html>
            ​<head>
            ​<title>Voici les reponses au sondage</title>
            ​</head>
            ​<body>
            ​<p>Voici le formulaire de contact</p>
            ​<tr>
            ​<td>le prenom     </td><td>' . $name . '</td></br>
            ​</tr>
            ​<tr>
            ​<td>l adresse mail    </td><td>' . $email . '</td></br>
            ​</tr>
            ​<tr>
            ​<td>le prenom     </td><td>' . $subject . '</td></br>
            ​</tr>
            ​<tr>
            ​<td>le textera    </td><td>' . $messager . '</td></br>
            ​</tr>
            ​</body>
            ​</html>
            ​';
             ​// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
             ​$headers[] = 'MIME-Version: 1.0';
             ​$headers[] = 'content-type: text/html; charset=utf-8';
             ​// En-têtes additionnels
             ​//$headers[] =  "From: " . $name . "<". $_POST["email"] .">\r\n";
             ​$headers[] = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $name . "\r\n" . 'X-Mailer: PHP/' . phpversion();
             ​// Envoi
             ​//var_dump($headers);
             ​if (mail($to, $subject, $message, implode("\r\n", $headers)))
             ​{
                 ​// success message
                 ​//echo "Success!<br />";
             ​}
             ​else
             ​{
                 ​// error message
                 ​//echo "Fail<br />";
             ​}
          }
          
             
                  // Si la réponse n'est pas bonne
                  }else{
             
                      // On envoi ici un message si la réponse n'est pas identique
                      $_SESSION['msg'] = 'Captcha non valide...';
                       // Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
                      header('Location: https://phil.pecheperle.be/testcontact.php');
                  }
            
                     
                  }
            
              // else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
              }else{
                  $_SESSION['msg'] = '';
                  header('Location: https://phil.pecheperle.be/testcontact.php');
          }
          
          
      3. j'ai comme l impression que la condition du captcha n est pas prise en compte dans le code
        1. Contributeur
          bonjour,
          que te retourne
          var_dump($_POST)
          ?
          pourquoi n'ajoutes-tu pas des
          echo();
          qui t'indiquent ce que fait ton code?
        2. @yg_bebonjour
          Ah mince j ai cette erreur lorsque je veux poster
          You don't have permission to access "http://forums.commentcamarche.net/forum/_xhr_/postmsgfrm/" on this server.
          Reference #18.1cc31302.1640854950.1e95b5f
          j avais fais une erreur dans le code je voulais envoyer
      4. bonjour
        Merci pour la reponse
        voila cela fonctionne enfin avec mon dernier code
        seul petit soucis lorsque la personne ne rentre pas le bon code le formulaire s'efface et la personne doit a nouveau tout remplir
        y-a t-il une solution ?
        je remets mon code de formulaire
        <?php
         // Démarrage de session 
         session_start();
           
         //on affiche les erreurs 
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
        
        var_dump($_SESSION);
        var_dump($_POST);
           
        
        //ou avec !EMPTY() 
        //Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc']  sinon elle vaut NULL 
        $_SESSION['msg']= !empty($_SESSION['msg']) ? $_SESSION['msg'] : NULL;
           
            // Tableau avec les différentes questions/réponses pour notre captcha
           $quiz = [
               0 => [
                   'question' => 'Quel est le premier jour de la semaine?',
                   'answer' => 'lundi'
               ],
               1 => [
                   'question' => 'Quel est le deuxième jour de la semaine?',
                   'answer' => 'mardi'
               ],
               2 => [
                   'question' => 'Quel est le troisième jour de la semaine?',
                   'answer' => 'mercredi'
               ],
           ];
           
           // On utilise array_rand pour avoir un id aléatoire de notre tableau
           $id = array_rand($quiz);
           
           // On utilise l'id donné par array_rand pour pouvoir stocker la bonne réponse dans $_SESSION['reponse']
           $_SESSION['answer'] = $quiz[$id]['answer'];
           
           //Var_dump ($_SESSION['answer']);
         // Var_dump ($_SESSION['msg']);
           
           // On stock la question dans une variable toujours via l'id donné par array_rand
           //Var_dump ($quiz[$id] );
           
           $question = $quiz[$id]['question'];
           //Var_dump ($question );
           ?>
        <!doctype html>
        <html lang="fr">
           <!-- debut head -->
           <head>
              <?php include("./include/head.php"); ?>
              <!-- deux scripts tarteaucitron le deuxiem est celui qui devrait etres mis en dur dans chque page-->
              <script  src="/tarteaucitron/tarteaucitron.js"></script>
              <script src="/js/tartecitron-peche-perle2.js"></script>
              <title>Formulaire de contat pour la pêche à la perle</title>
              <link rel="shortcut icon" href="https://phil.pecheperle.be/image/la-peche-a-la-perle.ico" type="image/x-icon"/>
              <meta name="description" content="Une question ,un renseignement sur la pêche a la perle du gardon?utilises le formulaire de contact  ">
              <link rel="stylesheet" type="text/css" href="/css/banniere-menu-peche-perle.css"/>
              <link rel="stylesheet" type="text/css" href="/css/contact-peche-perle.css"/>
           </head>
           <!-- fin head -->
           
           <!-- debut body -->
           <body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'">
              <div class="container" style="background-color:#87CEEB;">
           
                 <!-- debut container entete-->
                 <div class="container" style=" max-width: 100%;margin:auto;">
                    <?php include("./include/baniere-peche-perle.php"); ?>
                    <?php include("./include/menu3.php"); ?>
                 </div>
           
                 <!-- id attende chargement page -->
                 <div id='attente'>
                    <p style="text-align: center;font-size: 24px;">Veuillez patienter svp la page est en cours de chargement ...</p>
                 </div>
           
                 <!-- debut body -->
                 <body>
           
                    <!-- debut container page -->
                    <div class="container1 border border-dark" style="padding: 15px;background: #ECE9E7;">
           
                       <!-- debut formulaire-->
                       <form id="form" enctype="multipart/form-data" action="traitement-formulaire-test.php" onsubmit="return validate()" method="post" style="background: #ECE9E7;">
                          <h1>Formulaire de contact</h1>
                          <div class="form-group">
                             <label for="name">Nom:<span>*</span></label>
                             <input type="text" id="name" name="name" class="form-control" placeholder="Nom" required>
                          </div>
                          <div class="form-group">
                             <label for="email">Email:<span>*</span></label>
                             <input type="email" class="form-control" id="email" name="email" placeholder="Email">
                             <label for="email">Email</label>
                          </div>
                          <div class="form-group">
                             <label for="subject">Sujet:</label>
                             <input type="text" id="subject" name="subject" class="form-control" placeholder="Demande de renseignement">
                          </div>
                          <div class="form-group">
                             <label for="messager">Le message</label>
                             <textarea name="messager" class="form-control" id="messager" rows="3" placeholder="Message..." required></textarea>
                          </div>
              
                                        <!-- debut traitemnt captcha -->
                          <h3>Captcha</h3>
              
                          <!-- la question récupérée  -->
                          <div><?= $question ?></div>
              
                          <!-- retour éventuel renvoyé par la page de traitement -->
                         <div><?= $_SESSION['msg'] ?></div>
                          <div>
                             <label for="">captcha</label>
                             <input type="text" name="captcha">
                          </div>
                          <input type="submit" name="send" value="Envoyer "/>
                       </form>
                    </div>
                    <div class="container" style=" max-width: 100%;margin:auto;">
           
                       <!-- debut pied de page-->
                       <?php include("./include/pied-de-page.php"); ?>
                       <?php include("./include/footer.php"); ?>
                    </div>
              </div>
           </body>
           <!-- fin du body-->
        </html>
        
        1. Modérateur
          Tu peux stocker les données saisies en variables de SESSION et les remettre lorsque la personne revient sur le formulaire..
        2. Contributeur
          @jordane45Ou immédiatement afficher le formulaire avec les données reçues dans le POST.
        3. @yg_beMerci pour la réponse
          mais je réalise cela comment
        4. @jordane45oufti les données saisies en variable de session
          comme ceci alors

            $_session['name'] = !empty($_session['name']) ? $_session['name'] : NULL;
              $_session['email']  = !empty($_session['email']) ? $_session['email'] : NULL;
              $_session['subject'= !empty($_session['subject']) ? $_session['subject'] : NULL;
              $_session['messager'] = !empty($_session['messager']) ? $_session['messager'] : NULL;

          Mais ensuite je les utilises comment ?
      5. et mon traitement
        <?php
         // Démarrage de session 
         session_start();
           
         //on affiche les erreurs 
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
        
        var_dump($_SESSION);
        var_dump($_POST);
        
        // phase du captcha
        // Si la reponse de l'input captcha n'est pas vide
        //var_dump($_POST['captcha']);
        
        if(!empty($_POST['captcha'])){
        	
            // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
            $userAnswer = strtolower($_POST['captcha']);
        	
            // Si on envoi le formulaire
            if(isset($_POST['send'])){
                
        		//var_dump($_POST['send']);
        		
                // On compare la réponse stocké dans la session avec la réponse de l'utilisateur
                if($_SESSION['answer'] == $userAnswer){
        			
        			//var_dump($_SESSION['answer']);
                    // Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
                    //$_SESSION['msg'] = 'ok';
                    
                    //on continue le reste du traitement enregistrement base de donnee +envois par mail
        if (!empty($_POST["send"]))
        {
            //Si les variable $_POST existent et ne sont  pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
            $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
            $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
            $subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
            $messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
        	
            // les variables sont pretes a etres utilisees
            $name = $_POST["name"];
            $email = $_POST["email"];
            $subject = $_POST["subject"];
            $messager = $_POST["messager"];
        	
        	// connexion base de donnee
            include ('base.php');
        	
            //préparation de la requête et des variables
            $sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
            $datas = array($name,$email,$subject,$messager );
        	
            //Execution de la requete
            try
            {
                $requete = $bdd->prepare($sql);
                $requete->execute($datas);
            }
            catch(Exception $e)
            {
                // en cas d'erreur :
                echo " Erreur ! " . $e->getMessage();
                echo " Les datas : ";
                print_r($datas);
            }
          
              //on teste pour voir si tout est ok
            if ($requete)
            {
                $db_msg = "Vos informations de contact sont enregistrées avec succés.";
                $type_db_msg = "success";
                header("location:reponses-formulaire.php");
                //exit(); 
            }
            else
            {
                $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
                $type_db_msg = "error";
            }
        }
        //fin de la transmission des donnees dans la table
        //l'envoie du mail
        if (!empty($_POST["send"]))
        {
            $messager = $_POST["messager"];
            $name = $_POST["name"];
            $subject = $_POST["subject"];
            $email = $_POST["email"];
            // on entre un ou Plusieurs destinataires
            $to = 'perroquet666@hotmail.com'; // notez la virgule
            // Sujet
            //$subject= "une reussite";
            // message
            $message = '
           <html>
           <head>
           <title>Voici les reponses au sondage</title>
           </head>
           <body>
           <p>Voici le formulaire de contact</p>
           <tr>
           <td>le prenom     </td><td>' . $name . '</td></br>
           </tr>
           <tr>
           <td>l adresse mail    </td><td>' . $email . '</td></br>
           </tr>
           <tr>
           <td>le prenom     </td><td>' . $subject . '</td></br>
           </tr>
           <tr>
           <td>le textera    </td><td>' . $messager . '</td></br>
           </tr>
           </body>
           </html>
           ';
            // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
            $headers[] = 'MIME-Version: 1.0';
            $headers[] = 'content-type: text/html; charset=utf-8';
            // En-têtes additionnels
            //$headers[] =  "From: " . $name . "<". $_POST["email"] .">\r\n";
            $headers[] = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $name . "\r\n" . 'X-Mailer: PHP/' . phpversion();
            // Envoi
            //var_dump($headers);
            if (mail($to, $subject, $message, implode("\r\n", $headers)))
            {
                // success message
                //echo "Success!<br />";
            }
            else
            {
                // error message
                //echo "Fail<br />";
            }
        }
          
        			
                // Si la réponse n'est pas bonne
                }else{
        			
                    // On envoi ici un message si la réponse n'est pas identique
                    $_SESSION['msg'] = 'Captcha non valide...';
                     // Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
                    header('Location: https://phil.pecheperle.be/testcontact.php');
                }
        		
                   
                }
        		
            // else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
            }else{
                $_SESSION['msg'] = '';
                header('Location: https://phil.pecheperle.be/testcontact.php');
        }
        
        1. Modérateur
          
          //on stocke toutes les données POST en SESSION
          $_SESSION['POST'] = $_POST;
          
          if(!empty($_POST['captcha'])){
           
              // On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
              $userAnswer = strtolower($_POST['captcha']);
           
              // Si on envoi le formulaire
              if(isset($_POST['send'])){
                  
             
          
          


          et dans ton formulaire
          	 <input id="name" name="name" type="text" value="<?php echo isset($_SESSION['POST']['name']) ? $_SESSION['POST']['name'] : ""?>" placeholder=""  required="">
          
        2. @jordane45Super nickel jordane un grand merci
          cela fonctionne sauf avec textarea
          ou la variable n est pas stocker

          <?php
           // Démarrage de session 
           session_start();
             
           //on affiche les erreurs 
           error_reporting(E_ALL);
           ini_set('display_errors', TRUE);
           ini_set('display_startup_errors', TRUE);
          
          var_dump($_SESSION);
          var_dump($_POST);
             
          
          //ou avec !EMPTY() 
          //Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc']  sinon elle vaut NULL 
          $_SESSION['msg']= !empty($_SESSION['msg']) ? $_SESSION['msg'] : NULL;
             
              // Tableau avec les différentes questions/réponses pour notre captcha
             $quiz = [
                 0 => [
                     'question' => 'Quel est le premier jour de la semaine?',
                     'answer' => 'lundi'
                 ],
                 1 => [
                     'question' => 'Quel est le deuxième jour de la semaine?',
                     'answer' => 'mardi'
                 ],
                 2 => [
                     'question' => 'Quel est le troisième jour de la semaine?',
                     'answer' => 'mercredi'
                 ],
             ];
             
             // On utilise array_rand pour avoir un id aléatoire de notre tableau
             $id = array_rand($quiz);
             
             // On utilise l'id donné par array_rand pour pouvoir stocker la bonne réponse dans $_SESSION['reponse']
             $_SESSION['answer'] = $quiz[$id]['answer'];
             
             //Var_dump ($_SESSION['answer']);
           // Var_dump ($_SESSION['msg']);
             
             // On stock la question dans une variable toujours via l'id donné par array_rand
             //Var_dump ($quiz[$id] );
             
             $question = $quiz[$id]['question'];
             //Var_dump ($question );
             ?>
          <!doctype html>
          <html lang="fr">
             <!-- debut head -->
             <head>
                <?php include("./include/head.php"); ?>
                <!-- deux scripts tarteaucitron le deuxiem est celui qui devrait etres mis en dur dans chque page-->
                <script  src="/tarteaucitron/tarteaucitron.js"></script>
                <script src="/js/tartecitron-peche-perle2.js"></script>
                <title>Formulaire de contat pour la pêche à la perle</title>
                <link rel="shortcut icon" href="https://phil.pecheperle.be/image/la-peche-a-la-perle.ico" type="image/x-icon"/>
                <meta name="description" content="Une question ,un renseignement sur la pêche a la perle du gardon?utilises le formulaire de contact  ">
                <link rel="stylesheet" type="text/css" href="/css/banniere-menu-peche-perle.css"/>
                <link rel="stylesheet" type="text/css" href="/css/contact-peche-perle.css"/>
             </head>
             <!-- fin head -->
             
             <!-- debut body -->
             <body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'">
                <div class="container" style="background-color:#87CEEB;">
             
                   <!-- debut container entete-->
                   <div class="container" style=" max-width: 100%;margin:auto;">
                      <?php include("./include/baniere-peche-perle.php"); ?>
                      <?php include("./include/menu3.php"); ?>
                   </div>
             
                   <!-- id attende chargement page -->
                   <div id='attente'>
                      <p style="text-align: center;font-size: 24px;">Veuillez patienter svp la page est en cours de chargement ...</p>
                   </div>
             
                   <!-- debut body -->
                   <body>
             
                      <!-- debut container page -->
                      <div class="container1 border border-dark" style="padding: 15px;background: #ECE9E7;">
             
                         <!-- debut formulaire-->
                         <form id="form" enctype="multipart/form-data" action="traitement-formulaire-test.php" onsubmit="return validate()" method="post" style="background: #ECE9E7;">
                            <h1>Formulaire de contact</h1>
                            <div class="form-group">
                               <label for="name">Nom:<span>*</span></label>
                               <!-- <input type="text" id="name" name="name" class="form-control" placeholder="Nom" required>-->
                               <input id="name" name="name" type="text" value="<?php echo isset($_SESSION['POST']['name']) ? $_SESSION['POST']['name'] : ""?>" placeholder=""  required="">
                            </div>
                            <div class="form-group">
                               <label for="email">Email:<span>*</span></label>
                             <!--   <input type="email" class="form-control" id="email" name="email" placeholder="Email">-->
                               <input id="email" name="email" type="email" value="<?php echo isset($_SESSION['POST']['email']) ? $_SESSION['POST']['email'] : ""?>" placeholder=""  required="">
                               
                            </div>
                            <div class="form-group">
                               <label for="subject">Sujet:</label>
                            <!--   <input type="text" id="subject" name="subject" class="form-control" placeholder="Demande de renseignement">-->
                             <input id="subject" name="subject" type="text" value=" <?php echo isset($_SESSION['POST']['subject']) ? $_SESSION['POST']['subject'] : ""?>" placeholder=""  required="">
                            </div>
                            <div class="form-group">
                               <label for="messager">Le message</label>
                              <!-- <textarea name="messager" class="form-control" id="messager" rows="3" placeholder="Message..." required></textarea>-->
                              <textarea name="messager"  id="messager" rows="3" value="
                              <?php echo isset($_SESSION['POST']['messager']) ? $_SESSION['POST']['messager'] : ""?>" placeholder="" required =""></textarea>
                            </div>
                                          <!-- debut traitemnt captcha -->
                            <h3>Captcha</h3>
                
                            <!-- la question récupérée  -->
                            <div><?= $question ?></div>
                
                            <!-- retour éventuel renvoyé par la page de traitement -->
                           <div><?= $_SESSION['msg'] ?></div>
                            <div>
                               <label for="">captcha</label>
                               <input type="text" name="captcha">
                            </div>
                            <input type="submit" name="send" value="Envoyer "/>
                         </form>
                      </div>
                      <div class="container" style=" max-width: 100%;margin:auto;">
             
                         <!-- debut pied de page-->
                         <?php include("./include/pied-de-page.php"); ?>
                         <?php include("./include/footer.php"); ?>
                      </div>
                </div>
             </body>
             <!-- fin du body-->
          </html>
        3. Modérateur
          @flexi2202il n'y a pas de méthode value dans textarea....
          c'est directement
          <textarea name="messager"  id="messager" rows="3" placeholder="" required ="">
             <?php echo isset($_SESSION['POST']['messager']) ? $_SESSION['POST']['messager'] : ""?>
          </textarea>
                         
          
        4. @jordane45ah bon
          je pouvais encore bien chercher Mdrrrrr
          un immense merci jordane
          c est super cela fonctionne entièrement
          de joyeuses fêtes a toi et a toute l équipe de comment ca marche
          Mes meilleurs vœux a tous
          et encore merci pour toute cette aide de 2021
      6. j'ai trouve ce code mais j ai une erreur de syntaxe avec le
        {


        	 <input id="name" name="name" type="text" value="<?php if(isset($_SESSION['name']){echo $_SESSION['name'];}?>" placeholder=""  required="">