ReCaptcha et PHP

Bonjour,

Je ne comprends pas comment intégré dans ma page contact.php, le code pour avoir un reCaptcha.
Dans tous les forums, vidéos, site de google, ou l'on parle de reCaptcha et de PHP, on parle de code html (voir image (balise <head>)).



Ma page contact est en php et pas en html.
Pourquoi parle t'on de code html alors que c'est pour du php ?
Quelqu'un pourrait me dire comment mettre les bons codes aux bons endroits (je n'ai pas de page en html sur mon site).

Merci d'avance pour vos conseils...

24 réponses

Résumé de la discussion

Le sujet porte sur l’intégration de reCAPTCHA dans une page de contact écrite en PHP et sur l’emplacement des codes Google, qui impliquent du JavaScript et du HTML même si la page est PHP. Plusieurs répondants recommandent d’insérer le script JS de Google dans l’head et le code du widget reCAPTCHA dans le formulaire HTML, même si le fichier est en PHP, afin de fonctionner correctement. En pratique, l’insertion concerne d’abord le script côté client dans la balise head, puis l’insertion du champ g-recaptcha-response et la vérification côté serveur via le secret, sans dépendre du type de page. D’autres échanges soulignent aussi les vérifications techniques, notamment le contrôle de la présence du champ g-recaptcha-response dans $_POST et les éventuelles erreurs liées au chemin d’inclusion des fichiers.

Bobot (l’IA à votre service)
  1. Je commence par le début:
    J'ai tout modifier comme demandé.

    Après avoir envoyer le mail, j'ai le code source (remplacement de la page formulaire par une page blanche avec des infos):
    <html><head><link rel="stylesheet" type="text/css" href="moz-extension://eae674a8-10f2-40b3-acdf-aa155024fb8e/skin/socialwidgets.css"></head><body><pre> POST :<br>Array
    (
    [sex] => Melle
    [name] => aqzsed
    [email] => aqzsed@free.fr
    [phone] => 0987456321
    [g-recaptcha-response] => 03AIezHSZbykT_f01_s54Sde1KWmUoUs22H9TqPo5HqldMCD8xGf55sFshx-DtAAhPuY52ofZAhQ6Bx9_7QlIIDNFdgk8xCyhA9uaL_MWiXlqORC1XcqvUOsyVQ8MO7duPio-rnb2fkiYpV6N_IT8IuhtdNmXKMEkx1OnJirqeLIPwcK7uzeI3IJDjk2Z6LgCo_hl6IWYTi-e_kHdEYSB_IVZbfccAKlqA-SjURqyIEZj2rIx6-OAU0usvSevYSNLodxsv9BWQE_xH9fcCqsF4gkBFAwVdkaFyi48RGo9Q2m7LWPGaxEcsmxQZIOI-d--2nG1aOs4ZXVSz
    [message] => 9876543210
    )
    </pre><br>
    <b>Warning</b>: file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in <b>/htdocs/mail/mail.php</b> on line <b>40</b><br>
    <br>
    <b>Warning</b>: file_get_contents(http://www.google.com/... failed to open stream: no suitable wrapper could be found in <b>/htdocs/mail/mail.php</b> on line <b>40</b><br>
    <br>
    <b>Notice</b>: Trying to get property of non-object in <b>/htdocs/mail/mail.php</b> on line <b>46</b><br>
    Merci de cocher la case.</body></html>
    1. J'ai la réponse suivante, et toujours pas de mail reçu :

      POST :
      Array
      (
      [sex] => Mm
      [name] => aqzs
      [email] => aqzs@free.fr
      [phone] => 0231456987
      [g-recaptcha-response] => 03AIezHSbN9xwNYIbLey0so3VPqc-sDKsdFDzevxEB_PkajfBwANZ1UqBsfzax67jkuArze2-Br5PzrXIRbGqDqNElXTDqL6xI0RQLpG9ImwrhP6AGUacYdrjHJ7ASVCH59HgNOPSoHm6Tp88zuO586vpU4EPoAmAhfH1MikqoNcp6UxW721K_ZIaCvqcwexdapixv06DSC4qG_uHQ9KbTGOUgh48vcBsF69Hi9v6dfc89ksiUw9UIGp88Kbd8A74Ps-1hUzRMxeJxkRZu8iigUc8qunIadtljbeOux2Fzg3QCoTw_zOvSCTANqJLJ9em8TxXqGcGNalKs
      [message] => aqzs
      )

      recaptcha est vide !
      Notice: Undefined variable: result in /htdocs/mail/mail.php on line 68
      1. Modérateur
        Tu as cette réponse où ça ?
        Peux tu nous dire ce qui s'affiche dans la console de ton navigateur ?

        Puis une petite correction du code php :
        <?php
        //------------------------------------------------------------------
        //activation affichage des erreurs
        //------------------------------------------------------------------
        error_reporting(E_ALL);
        ini_set('display-errors','on');
        
        //------------------------------------------------------------------
        //le temps des tests:
        //affichage des variables POST
        //------------------------------------------------------------------
          echo "<pre> POST :<br>";
          print_r($_POST);
          echo "</pre>";
        
        //------------------------------------------------------------------
        //récupération PROPRE des variables AVANT de les utiliser
        //------------------------------------------------------------------
        $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
        $email_address = !empty($_POST['email']) && filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) ? $_POST['email'] : NULL;
        $message = !empty($_POST['message']) ? $_POST['message'] : NULL;
        $phone = !empty($_POST['phone']) ? $_POST['phone'] : NULL;
        $sex = !empty($_POST['sex']) ? $_POST['sex'] : NULL;
        
        $recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : (!empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL);
         if(!$name  ||!$email_address || !$message  || !$phone  ||  !$sex){
            echo "Pas de données envoyées!";
            $result =  false;
          }
            
         
         //------------------------------------------------------------------
         // Traitement du formulaire
         //------------------------------------------------------------------
         $result = "";
         if($recaptcha){
            //your site secret key
            $secret = 'ma clé secrète';
            //get verify response data
            $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$recaptcha);
            $responseData = json_decode($verifyResponse);
            
            //pour tester :
             print_r($responseData);
            
            if($responseData->success){  
           
             //Envoi du mail
             $to = 'Mon adresse mail';
             $email_subject = "Site web";
             $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
             $headers = "From: robot@adresse de mon site web\n";
             if(mail($to,$email_subject,$email_body,$headers)){
               echo "email envoyé";
               $result =  true;  
             }else{
               echo "Erreur lors de l'envoie de l'email ";
               $result =  false;
             }
               
           }else{
             
              echo "Merci de cocher la case.";
             $result =  false;
           } 
         }else{
           echo " recaptcha est vide !";
         } 
         
         return $result;
        ?>
        
    2. Je ne vois pas de différence entre les 2 premiers codes
      $recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;
      .
      1. Modérateur
        Ancien!
        $recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;

        Nouveau
        $recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
        
    3. $(function() {

      $("input,textarea").jqBootstrapValidation({
      preventSubmit: true,
      submitError: function($form, event, errors) {
      // additional error messages or events
      },
      submitSuccess: function($form, event) {
      // Prevent spam click and default submit behaviour
      $("#btnSubmit").attr("disabled", true);
      event.preventDefault();

      // get values from FORM
      var sex = $("select#sex").val();
      var name = $("input#name").val();
      var email = $("input#email").val();
      var message = $("textarea#message").val();
      var phone = $("input#phone").val();
      $.ajax({
      url: "././mail/mail.php",
      type: "POST",
      data: {
      name: name,
      email: email,
      message: message,
      phone: phone,
      sex: sex
      },
      cache: false,
      success: function() {
      // Enable button & show success message
      $("#btnSubmit").attr("disabled", false);
      $('#success').html("<div class='alert alert-success'>");
      $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
      .append("</button>");
      $('#success > .alert-success')
      .append("<strong>Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais.</strong>");
      $('#success > .alert-success')
      .append('</div>');

      //clear all fields
      $('#contactForm').trigger("reset");
      },
      error: function() {
      // Fail message
      $('#success').html("<div class='alert alert-danger'>");
      $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
      .append("</button>");
      $('#success > .alert-danger').append("<strong>Désolé " + name + ", on dirait que le serveur mail ne répond pas... :( Veuillez réessayer plus tard.");
      $('#success > .alert-danger').append('</div>');
      //clear all fields
      $('#contactForm').trigger("reset");
      },
      })
      },
      filter: function() {
      return $(this).is(":visible");
      },
      });

      $("a[data-toggle=\"tab\"]").click(function(e) {
      e.preventDefault();
      $(this).tab("show");
      });

      });
      1. Modérateur
        Ah ben tout s'explique .. tu fais de l'ajax ...

        Donc, dans le code php que je t'ai donné...
        commence par modifier la ligne :
        $recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;
        

        par
        $recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
        


        Puis dans ton js :
        $(function() {
        
            $("input,textarea").jqBootstrapValidation({
                preventSubmit: true,
                submitError: function($form, event, errors) {
                    // additional error messages or events
                },
                submitSuccess: function($form, event) {
                    // Prevent spam click and default submit behaviour
                    $("#btnSubmit").attr("disabled", true);
                    event.preventDefault();
                    
                    // get values from FORM
                    var sex = $("select#sex").val();
                    var name = $("input#name").val();
                    var email = $("input#email").val();
                    var message = $("textarea#message").val();
                    var phone = $("input#phone").val();
                    $.ajax({
                        url: "././mail/mail.php",
                        type: "POST",
                        data: {
                            name: name,
                            email: email,
                            message: message,
                            phone: phone,
                            sex: sex,
                            grecaptcharesponse:$("input#g-recaptcha-response").val();
                        },
                        cache: false,
                        success: function(reponse) {
                            console.log(reponse);
                          
                            // Enable button & show success message
                            $("#btnSubmit").attr("disabled", false);
                            $('#success').html("<div class='alert alert-success'>");
                            $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
                                .append("</button>");
                            $('#success > .alert-success')
                                .append("<strong>Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais.</strong>");
                            $('#success > .alert-success')
                                .append('</div>');
        
                            //clear all fields
                            $('#contactForm').trigger("reset");
                        },
                        error: function(errormsg) {
                          console.log(errormsg);
                            // Fail message
                            $('#success').html("<div class='alert alert-danger'>");
                            $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
                                .append("</button>");
                            $('#success > .alert-danger').append("<strong>Désolé " + name + ", on dirait que le serveur mail ne répond pas... :( Veuillez réessayer plus tard.");
                            $('#success > .alert-danger').append('</div>');
                            //clear all fields
                            $('#contactForm').trigger("reset");
                        },
                    })
                },
                filter: function() {
                    return $(this).is(":visible");
                },
            });
        
            $("a[data-toggle=\"tab\"]").click(function(e) {
                e.preventDefault();
                $(this).tab("show");
            });
        
        });
        


        Ensuite, affiche la CONSOLE de ton navigateur et valide ton formulaire puis dis nous ce qui s'affiche dans la console.

        EDIT : correction du php (erreur de copier/coller)
      2. Modérateur
        @jordane45Si ça ne marche toujours pas ( comme je pense .... ) ... il nous faudrait également le code HTML généré de ta page ( c'est à dire, tu affiches ta page dans ton navigateur puis tu fais un clic-droit "Afficher le code source" ou "afficher la source" selon le navigateur utilisé))
      3. Contributeur
        @jordane45bonjour, ne faut-il pas plutôt ceci:
        $recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
      4. Modérateur
        @yg_beOui erreur de copier coller
    4. Comme je l'ai indiqué plus haut, ce message vient du fichier script.js.
      Je n'en sais pas comment celui-ci est utilisé.
      Oui, je modifie le bon fichier ;-)
      1. Modérateur
        Alors il nous faut le contenu de ton fichier script.js
    5. Bonjour et merci jordane45,

      J'ai modifié comme indiqué.
      - Le captcha n'est validé que lorsque je clic sur les bonnes image (comme avant).

      Lorsque j’envoie le mail (clic sur "envoyer"):
      - Les champs du formulaire s’effacent
      - Le message "Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais." s'affiche
      - Le mail n'est pas envoyé car je ne le reçois pas.
      1. Modérateur

        - Le message "Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais." s'affiche

        heuuu... tu peux me dire à quel endroit se trouve, dans ton code, le texte du message en question ???
        Car dans le PHP que tu nous montres ..... tu peux avoir éventuellement un
        echo "email envoyé";
        

        mais c'est tout !

        Es-tu sûr de modifier le bon fichier ????
        celui qui est appelé dans ton FORM ... à savoir : mail/mail.php ?
    6. Modérateur
      Bonjour,

      Bon... arrêtons (arrêtez de vrais-je dire...) de partir dans tous les sens et de taper "au pif" ....

      COmmence par modifier ton code côté serveur comme ceci :
      <?php
      //------------------------------------------------------------------
      //activation affichage des erreurs
      //------------------------------------------------------------------
      error_reporting(E_ALL);
      ini_set('display-errors','on');
      
      //------------------------------------------------------------------
      //le temps des tests:
      //affichage des variables POST
      //------------------------------------------------------------------
        echo "<pre> POST :<br>";
        print_r($_POST);
        echo "</pre>";
      
      //------------------------------------------------------------------
      //récupération PROPRE des variables AVANT de les utiliser
      //------------------------------------------------------------------
      $name = !empty($_POST['name']) ? $_POST['name'] : NULL;
      $email_address = !empty($_POST['email']) && filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) ? $_POST['email'] : NULL;
      $message = !empty($_POST['message']) ? $_POST['message'] : NULL;
      $phone = !empty($_POST['phone']) ? $_POST['phone'] : NULL;
      $sex = !empty($_POST['sex']) ? $_POST['sex'] : NULL;
      $recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;
      
       if(!$name  ||!$email_address || !$message  || !$phone  ||  !$sex){
          echo "Pas de données envoyées!";
          $result =  false;
        }
          
       
       //------------------------------------------------------------------
       // Traitement du formulaire
       //------------------------------------------------------------------
       if($recaptcha){
          //your site secret key
          $secret = 'ma clé secrète';
          //get verify response data
          $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$recaptcha);
          $responseData = json_decode($verifyResponse);
          
          //pour tester :
           print_r($responseData);
          
          if($responseData->success){  
         
           //Envoi du mail
           $to = 'Mon adresse mail';
           $email_subject = "Site web";
           $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
           $headers = "From: robot@adresse de mon site web\n";
           if(mail($to,$email_subject,$email_body,$headers)){
             echo "email envoyé";
             $result =  true;  
           }else{
             echo "Erreur lors de l'envoie de l'email ";
             $result =  false;
           }
             
         }else{
            echo "Merci de cocher la case.";
           $result =  false;
         } 
       }else{
         echo " recaptcha est vide !";
       } 
       
       return $result;
      ?>
      

      et dis nous ce que ça t'affiche.

      Par contre... ceci :
       //get verify response data
          $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$recaptcha);
          $responseData = json_decode($verifyResponse);
      

      me parait étrange ....
      Il me semble que ce n'est pas la procédure actuelle utilisée dans la documentation...
      Regarde ce tuto :
      https://fr.jeffprod.com/blog/2014/installez-le-nouveau-captcha-de-google-sur-votre-site-en-php.html

      .

      1. <?php 
        include_once('templates/page_head.php');
        ?>
        <section class="contact">
        <div class="container">
        <div class="row">
        <div class="col-md-12">
        <div class="contact-form">
        <div id="success" class="col-md-10"></div>
        <form name="contactForm" id="contactForm" method="POST" action="mail/mail.php">
        <div class="col-md-6">
        <div class="row control-group">
        <div class="form-group col-xs-12">
        <label>Civilité</label>
        <select class="form-control" name="sex" id="sex">
        <option value="Mr">Monsieur</option>
        <option value="Mm">Madame</option>
        <option value="Melle">Mademoiselle</option>
        </select>
        </div>
        <div class="form-group col-xs-12">
        <label>Nom</label>
        <input type="text" name="name" class="form-control" placeholder="Votre Nom" id="name" required>
        </div>
        </div>
        <div class="row control-group">
        <div class="form-group col-xs-12">
        <label>Email</label>
        <input type="email" name="email" class="form-control" placeholder="Votre Adresse Mail" id="email" required>
        </div>
        </div>
        <div class="row control-group">
        <div class="form-group col-xs-12">
        <label>Téléphone</label>
        <input type="text" name="phone" class="form-control" placeholder="Votre téléphone" id="phone" required>
        </div>
        </div>
        <div class="g-recaptcha" data-sitekey="ma clé publique"></div>
        </div>
        <div class="col-md-6">
        <div class="row control-group">
        <div class="form-group col-xs-12">
        <label>Message</label>
        <textarea rows="12" name="message" class="form-control" placeholder="Votre Message" id="message" required></textarea>
        </div>
        </div>
        </div><br>
        <div class="row">
        <div class="form-group col-xs-11 text-right">
        <button type="submit" id="btnSubmit" class="btn btn-info">Envoyer</button>
        </div>
        </div>
        <br>
        </form>
        </div>
        </div>
        </div>
        </div>
        </section>
        <?php

        include_once('templates/page_footer.php');

        ?>


        La balise <head> se trouve dans le fichier page_head.php.
        Le seul code ajouter dans ce fichier est
        <div class="g-recaptcha" data-sitekey="ma clé publique"></div>

        Mon formulaire lorsqu'il fonctionne affiche :
        - envoi le mail
        - efface les champs rempli par l'utilisateur
        - affiche un message ( "Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais.")

        Quand je dis : Je n'ai strictement aucun retour", c'est que je n'ai :
        - pas le message "email envoyé" d'affiché
        - pas de réception du mail
        - Pas d'affichage de la variable $responseData.

        Seul les champs sont effacés et le message "Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais." affiché.
        1. Contributeur
          peut-être en déplaçant
          <div class="g-recaptcha" data-sitekey="ma clé publique"></div>
          juste avant
          </form>
          ?
        2. @yg_beBonjour yg_be et bonjour à tous aussi ;-)
          Déplacer le captcha à cet endroit ne fait que le déplacer graphiquement. Il est à l'intérieur des balises FORM et c'est le principal (c'est ce que dit google)...
        3. Contributeur
          peut-être faut il également modifier ton script script.js?
        4. @yg_beLe HTML, le PHP ça va encore mais alors là, c'est du Javanais...
          Je vais m'adresser à un pro dans la grande ville proche de chez moi si j'en trouve un (je ne dis pas que vous n'en êtes pas ;-) ) mais ce sera plus simple pour moi.
          Mil merci pour votre aide et très belle journée à vous...
      2. "email envoyé" ne s'affiche pas.
        En fait rien n'a changé...

        Voici le code ajouter au <head> de mon formulaire:
        <script src='https://www.google.com/recaptcha/api.js'></script>

        Voici le code ajouter au <form> de mon formulaire:
        <div class="g-recaptcha" data-sitekey="ma clé publique"></div>


        Voici le code coté serveur:
        <?php

        if(empty($_POST['name']) ||
        empty($_POST['email']) ||
        empty($_POST['message']) ||
        empty($_POST['phone']) ||
        empty($_POST['sex']) ||
        !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
        {
        echo "Pas de données envoyées!";
        return false;
        }

        //contact form submission code
        $name = $_POST['name'];
        $sex = $_POST['sex'];
        $phone = $_POST['phone'];
        $email_address = $_POST['email'];
        $message = $_POST['message'];


        if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = 'ma clé secrète';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):


        //Envoi du mail
        $to = 'Mon adresse mail';
        $email_subject = "Site web";
        $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
        $headers = "From: robot@adresse de mon site web\n";
        mail($to,$email_subject,$email_body,$headers);
        echo "email envoyé";
        return true;

        else:
        print_r($responseData);
        return false;
        endif;
        else:
        echo "Merci de cocher la case.";
        return false;
        endif;

        ?>


        Seul ce qui est en gras à été ajouter par rapport au fichier d'origine (et fonctionnel)
        1. Contributeur
          peux-tu partager le fichier avec le formulaire, avant et après tes modifications?
          quand tu écris "Je n'ai strictement aucun retour", veux-tu dire que c'est comme si rien ne se passait quand tu cliques sur un bouton (quel bouton)? ou bien reçois-tu une page blanche en retour?
          peux-tu remplacer l'ensemble de ton fichier php serveur par un petit texte genre "coucou, c'est moi'", pour voir ce que cela donne?
      3. Je n'ai strictement aucun retour.
        Ni mail, ni affichage du $responseData.
        Néanmoins, il faut savoir que le captcha fonctionne bien car tant que je n'ai pas cocher la case, et cocher les bonnes images, celui n'affiche pas sa validation avec son encoche verte.
        1. Contributeur
          ajoute
          echo "email envoyé";
          avant
          return true;

          teste à nouveau, et envoie ton code modifié.
          le problème est peut-être causé par les modifications que tu as faites dans l'autre fichier, comme tu expliques en #7.
          peux-tu partager ce fichier avant et après tes modifications?
          quand tu écris "Je n'ai strictement aucun retour", veux-tu dire que c'est comme si rien ne se passait quand tu cliques sur un bouton (quel bouton)?
      4. Merci yg_be,

        Désolé mais mon ami webmaster qui à fait le site web est décédé. C'est pour cela que j’essaie de le faire évoluer tant bien que mal et malgré le trop peu de connaissance dans ce domaine.

        J'ai répondu "J'ai changé les codes car j'ai essayer 2 tutos différents sur le web".

        Je reçois le message "Votre message a bien été envoyé. Je reviendrai vers vous dans les plus brefs délais."
        Ce message viens du fichier "script.js".

        Qu'est-ce que fais-tu ensuite (ailleurs) avec $errMsg? Je ne sais pas... :-(
        1. Contributeur
          Je propose d'éliminer les $errMsg, et de les remplacer par la logique précédente (qui, je suppose, fonctionnait bien):
          donc, remplace (deux fois)
          $errMsg = 'message d'erreur';

          par
          echo "message d'erreur";
          return false;

          Tant que tu y es, ajoute
          print_r($responseData)
          ; quand tu arrives à l'erreur "Erreur de vérification, veuillez réessayer.". Cela permettra d'e savoir plus si cela se produit.
        2. @yg_beMerci, je fais les essais ;-)
      5. J'ai supprimé
        if(isset($_POST['submit']) && !empty($_POST['submit'])):
        else:
        $errMsg = '';
        $succMsg = '';
        endif;


        1) Je ne reçois pas de mail alors qu'un message me dit le contraire (avec ou sans avoir coché le captcha)
        2) Ou dois-je mettre le code
        print_r($responseData);
        ?

        Voici mon code:
        <?php

        if(empty($_POST['name']) ||
        empty($_POST['email']) ||
        empty($_POST['message']) ||
        empty($_POST['phone']) ||
        empty($_POST['sex']) ||
        !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
        {
        echo "Pas de données envoyées!";
        return false;
        }
        if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = 'ma clé secrète';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):

        //contact form submission code
        $name = $_POST['name'];
        $sex = $_POST['sex'];
        $phone = $_POST['phone'];
        $email_address = $_POST['email'];
        $message = $_POST['message'];

        $to = 'mon adresse mail';
        $email_subject = "site web";
        $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
        $headers = "From: robot@adresse du site web\n";
        mail($to,$email_subject,$email_body,$headers);

        return true;

        else:
        $errMsg = 'Erreur de vérification, veuillez réessayer.';
        endif;
        else:
        $errMsg = 'Merci de cocher la case.';
        endif;

        ?>
        1. Contributeur
          peux-tu répondre au #15?
          que fais-tu ensuite (ailleurs) avec $errMsg?
          quel est le message que tu reçois t'indiquant que le mail est envoyé? d'où vient ce message?
      6. Bonjour,

        Merci pour ton aide.
        Les msg se sont croisés.

        J'ai changé les codes car j'ai essayer 2 tutos différents sur le web.

        Il faut que je mette
        print_r($responseData);
        dans ma page php ? Si oui, à quel endroit ?
        Merci
        1. Contributeur
          je pense que tu dois suivre ma suggestion en #16.
      7. Personne pour me venir en aide ? ;-)
        1. Contributeur
          bonjour, qu'affiche le php?
          peux-tu faire
          print_r($responseData);
          ?
      8. Merci ZeNairolf, c'est bien mon problème:
        Comment faire pour vérifier et valider l'envoi que si et seulement si le captcha est bien validé.

        Voici mon code d'origine (sans recaptcha):
        <?php

        if(empty($_POST['name']) ||
        empty($_POST['email']) ||
        empty($_POST['message']) ||
        empty($_POST['phone']) ||
        empty($_POST['sex']) ||
        !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
        {
        echo "Pas de données envoyées!";
        return false;
        }

        $name = $_POST['name'];
        $sex = $_POST['sex'];
        $phone = $_POST['phone'];
        $email_address = $_POST['email'];
        $message = $_POST['message'];

        $to = 'mon adresse mail';
        $email_subject = "Envoi depuis le site";
        $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
        $headers = "From: robot@adresse de mon site web\n";
        mail($to,$email_subject,$email_body,$headers);

        return true;
        ?>


        J'ai essayer plusieurs chose mais mon mail n'est même plus envoyé maintenant.

        Voici le code auquel j'ai apporter modifications:
        <?php

        if(empty($_POST['name']) ||
        empty($_POST['email']) ||
        empty($_POST['message']) ||
        empty($_POST['phone']) ||
        empty($_POST['sex']) ||
        !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
        {
        echo "Pas de données envoyées!";
        return false;
        }
        if(isset($_POST['submit']) && !empty($_POST['submit'])):
        if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = 'ma clé secrète';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):


        //contact form submission code
        $name = $_POST['name'];
        $sex = $_POST['sex'];
        $phone = $_POST['phone'];
        $email_address = $_POST['email'];
        $message = $_POST['message'];

        $to = 'mon adresse mail';
        $email_subject = "Envoi depuis le site";
        $email_body = "Site web.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
        $headers = "From: robot@adresse de mon site web\n";
        mail($to,$email_subject,$email_body,$headers);

        return true;

        else:
        $errMsg = 'Erreur de vérification, veuillez réessayer.';
        endif;
        else:
        $errMsg = 'Merci de cocher la case.';
        endif;
        else:
        $errMsg = '';
        $succMsg = '';
        endif;


        ?>


        Auriez-vous une idée sur les erreurs rencontrés (pas d'envoi et info comme quoi le message est bien envoyé même si le captcha n'est pas coché) ?

        Mil merci pour votre aide...
        1. Contributeur
          tu as choisi d'utiliser $errMsg et $succMsg.
          avant cela, en cas d'erreur, tu faisais:
          echo "Pas de données envoyées!";
          return false;

          pourquoi changer?
        2. Contributeur
          ceci me semble superflu:
          if(isset($_POST['submit']) && !empty($_POST['submit'])):
          else:
              $errMsg = '';
              $succMsg = '';
          endif;
      9. Normalement il y a un champ g-recaptcha-response dans ta variable $_POST, si je me trompe pas la variable c'est $_POST["g-recaptcha-response"], il faut vérifier si il est bon.
        1. Bonjour à tous et toutes,
          Y a t-il quelqu'un qui puisse m'aider ?
          Merci
          1. Je précise qu'il faut que le mail soit envoyé qui SI le captcha à été validé...
            1. Je reviens vers vous après avoir mis les codes indiqué par google SAUF celui de la réponse car je ne comprends pas.

              1) J'ai mis le code <script src='https://www.google.com/recaptcha/api.js'></script> avant la balise </head>
              2) J'ai mis le code <div class="g-recaptcha" data-sitekey="ma clé publique"></div> à l'emplacement ou je veux voir le captcha à l'intérieur de la balise <form>
              => le captcha fonctionne.

              N'ayant pas utiliser de réponse (même si la captcha fonctionne), je reçois le message même si je n'ai pas coché la case (et c'est normal).

              Pourriez-vous m'expliquer comment mettre le code réponse dans mon fichier car je ne comprends pas (https://translate.google.fr/translate?sl=en&tl=fr&js=y&prev=_t&hl=fr&ie=UTF-8&u=https%3A%2F%2Fdevelopers.google.com%2Frecaptcha%2Fdocs%2Fverify&edit-text=&act=url%29 ?



              Merci encore pour votre aide ;-)
              • 1
              • 2