ReCaptcha et PHP

valttt Messages postés 321 Statut Membre -  
valttt Messages postés 321 Statut Membre -
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...

A voir également:

24 réponses

valttt Messages postés 321 Statut Membre 15
 
$(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");
});

});
0
jordane45 Messages postés 40050 Statut Modérateur 4 753
 
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)
0
jordane45 Messages postés 40050 Statut Modérateur 4 753 > jordane45 Messages postés 40050 Statut Modérateur
 
Si ç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é))
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > jordane45 Messages postés 40050 Statut Modérateur
 
bonjour, ne faut-il pas plutôt ceci:
$recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
0
jordane45 Messages postés 40050 Statut Modérateur 4 753 > yg_be Messages postés 24281 Statut Contributeur
 
Oui erreur de copier coller
0
valttt Messages postés 321 Statut Membre 15 > jordane45 Messages postés 40050 Statut Modérateur
 
OK, je fais les modifs.
Merci encore...
0
valttt Messages postés 321 Statut Membre 15
 
Je ne vois pas de différence entre les 2 premiers codes
$recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;
.
0
jordane45 Messages postés 40050 Statut Modérateur 4 753
 
Ancien!
$recaptcha = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;

Nouveau
$recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
0
valttt Messages postés 321 Statut Membre 15
 
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
0
jordane45 Messages postés 40050 Statut Modérateur 4 753
 
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;
?>
0
valttt Messages postés 321 Statut Membre 15
 
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>
0