ReCaptcha et PHP

Fermé
valttt Messages postés 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 - Modifié le 22 avril 2017 à 23:38
valttt Messages postés 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 - 2 mai 2017 à 13:12
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 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 16
2 mai 2017 à 11:45
$(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 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
Modifié le 2 mai 2017 à 12:44
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 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
2 mai 2017 à 12:01
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 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
2 mai 2017 à 12:33
bonjour, ne faut-il pas plutôt ceci:
$recaptcha = !empty($_POST['grecaptcharesponse']) ? $_POST['grecaptcharesponse'] : NULL;
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
2 mai 2017 à 12:36
Oui erreur de copier coller
0
valttt Messages postés 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 16 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
2 mai 2017 à 12:42
OK, je fais les modifs.
Merci encore...
0
valttt Messages postés 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 16
Modifié le 2 mai 2017 à 12:38
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 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
2 mai 2017 à 12:43
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 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 16
Modifié le 2 mai 2017 à 12:53
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 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
2 mai 2017 à 12:57
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 279 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 27 octobre 2024 16
Modifié le 2 mai 2017 à 13:29
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