2016-03-26 7 views
1

Ich habe ein Problem mit der Art und Weise ive Programm die Captcha-Verifikation mit der E-Mail-Funktion.PHP Form, MailFonction und Google ReCaptcha Validierung Problem

Die Captcha Success funktionieren gut. Wenn das Captcha fehlschlägt, habe ich die richtige Nachricht auf der Formularseite erhalten, aber die PHP-Programmierung lässt die E-Mail immer noch senden. Ich muss nur wissen, wie ich die Mailfunktion nur mit dem Erfolgsteil einstellen kann.

Kann mir jemand helfen, die ReCaptcha-Validierung zu beheben?

Vielen Dank. Hier

ist der PHP-Quellcode:

<?php 
if (isset($_POST["submit"])) { 

    $url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = "MASKED"; 

    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']); 
    $data = json_decode($response); 

    if(isset($data->success) AND $data->success==true){ 

     header('Location: appel_de_service.php?CaptchaPass=True'); 

    }else{ 

     header('Location: appel_de_service.php?CaptchaFail=True'); 

    } 

$to = "MASKED"; 
$from = $_POST['courriel']; 
$from_name = $_POST['nom_responsable']; 
$subject = "Reception d'un appel de service "; 
$nom_compagnie = $_POST['nom_compagnie']; // required 
$adresse = $_POST['adresse']; // required 
$ville = $_POST['ville']; 
$province = $_POST['province']; 
$code_postale = $_POST['code_postale']; 
$nom_responsable = $_POST['nom_responsable']; 
$courriel = $_POST['courriel']; 
$telephone = $_POST['telephone']; 
$marque = $_POST['marque']; 
$numero_modele = $_POST['numero_modele']; 
$garantie = $_POST['garantie']; 
$description = $_POST['description'];    
$disponibilite = $_POST['disponibilite']; // required 
$coordonnees = $_POST['coordonnees']; // required 

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= "Reply-to: $courriel"; 

$message = " 
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> 
<html> 
<head> 
<title>Appel de service (rempli sur le site internet)</title> 
<style type=\"text/css\"> 
h1,h2,h3,h4,h5,h6 { 
    font-family: Cambria, \"Hoefler Text\", \"Liberation Serif\", Times, \"Times New Roman\", serif; 
    color: #272727; 
} 
</style> 
</head> 
<body> 
<h2 style=\"font-size: 1.25em; font-family: Gotham, ʼHelvetica Neueʼ, Helvetica, Arial, sans-serif;\">Vous avez re&ccedil;u une demande d'appel de service en ligne.</h2> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur l'adresse du service</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom de la compagnie</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$nom_compagnie</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse</td> 
     <td align=\"left\" valign=\"middle\">$adresse</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Ville</td> 
     <td align=\"left\" valign=\"middle\">$ville</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Province</td> 
     <td align=\"left\" valign=\"middle\">$province</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Code postale</td> 
     <td align=\"left\" valign=\"middle\">$code_postale</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom du responsable</td> 
     <td align=\"left\" valign=\"middle\">$nom_responsable</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">T&eacute;l&eacute;phone</td> 
     <td align=\"left\" valign=\"middle\">$telephone</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse courriel</td> 
     <td align=\"left\" valign=\"middle\">$courriel</td> 
    </tr> 
    </tbody> 
</table> 
<br> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur le produit</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Marque</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$marque</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Num&eacute;ro de mod&egrave;le</td> 
     <td align=\"left\" valign=\"middle\">$numero_modele</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Garantie</td> 
     <td align=\"left\" valign=\"middle\">$garantie</td> 
    </tr> 
    <tr bgcolor=\"#D5D5D5\"> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\">Description du probl&egrave;me :</td> 
    </tr> 
    <tr> 
     <td height=\"75\" colspan=\"2\" align=\"left\" valign=\"top\">$description</td> 
    </tr> 
    </tbody> 
</table> 
<br> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Pr&eacute;f&eacute;rences pour le rendez-vous</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Disponibilit&eacute;</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$disponibilite</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Coordonn&eacute;es</td> 
     <td align=\"left\" valign=\"middle\">$coordonnees</td> 
    </tr> 
    </tbody> 
</table> 
</body> 
</html> 
"; 

// Always set content-type when sending HTML email 

mail($to, $subject, $message, $headers); 

} 

?> 

Antwort

0

Gelöst zum Download. Das Problem war die Konstruktion des PHP if() und else() muss nach der Datensammlung in das Formular gefüllt werden.

sind hier der richtige Code:

<?php 
if (isset($_POST["submit"])) { 

    $url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = "PRIVATE_KEY"; 

    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']); 
    $data = json_decode($response); 

    if(isset($data->success) AND $data->success==true){ 

     $to = "[email protected]"; 
     $from = $_POST['courriel']; 
     $from_name = $_POST['nom_responsable']; 
     $subject = "Reception d'un appel de service "; 
     $nom_compagnie = $_POST['nom_compagnie']; 
     $adresse = $_POST['adresse']; 
     $ville = $_POST['ville']; 
     $province = $_POST['province']; 
     $code_postale = $_POST['code_postale']; 
     $nom_responsable = $_POST['nom_responsable']; 
     $courriel = $_POST['courriel']; 
     $telephone = $_POST['telephone']; 
     $marque = $_POST['marque']; 
     $numero_modele = $_POST['numero_modele']; 
     $garantie = $_POST['garantie']; 
     $description = $_POST['description'];    
     $disponibilite = $_POST['disponibilite']; 
     $coordonnees = $_POST['coordonnees']; 

     $headers = 'MIME-Version: 1.0' . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; 
     $headers .= "Reply-to: $courriel"; 

     $message = " 
     "; 

     if(mail($to, $subject, $message, $headers)){ 
        header('Location: appel_de_service.php?CaptchaPass'); 

     }else{ 
      echo "mail could not be sent"; 
     } 
    }else{ 
       header('Location: appel_de_service.php?CaptchaFail'); 
    } 

}else{ 
    header('Location: appel_de_service.php?CaptchaError'); 

} 

?> 
0

Das Problem aus vielen Gründen sein könnte. Die häufigsten Gründe dafür, dass das reCpatcha Google Plugin fehlgeschlagen ist, liegt darin, dass die Art und Weise, wie der Benutzer durch Ajax mit jquery oder javascript und php validiert wird, falsch ist. Der nächste Code, den ich Ihnen zeigen werde (vorausgesetzt, Sie haben bereits einen Account in Goolge Recaptcha verifiziert), wird Ihnen zeigen, wie Sie eine reCaptcha Antwort validieren, nachdem Sie auf einen Button mit php, ajax und jquery geklickt haben. Schöne Grüße!

die recpatcha Bibliothek https://mega.nz/#!qw4Snb6Z!3Mgq2UvD3PmQJ9ts9sQdHcV86Le8-wtz05IEr2b-3mw von hier

<html> 
<head> 
    <title>Example</title> 
</head> 
<script src='https://www.google.com/recaptcha/api.js'></script> 
<script> 
//This is our DOM on JQUERY or JAVASCRIPT named as main.js 
$(function() { 
    //First we have to listen on a event click (button) and extract the values of the inputs 
    $('body').on('click','.myButtonClass', function() { 
     $email = $('#emailID').val(); 
     $password = $('#passwordID').val(); 
     $recaptcha = $('textarea').val(); 
     //We save in a object our values 
     $x = { 
      action:'validate', 
      email:$email, 
      password:$password 
      captcha:$recaptcha 
     }; 

     //We execute ajax calling a php file for POST method 
     $.post('file.php',$x,function(callback) { 
      $('.answer').html(callback); 
     }); 

    }); 
}); 

/*END OF DOM AND MAIN.JS*/ 
</script> 

<body> 


<form> 
    <input type="email" id="emailID" placeholder="Write here your email"> 
    <input type="password" id="passwordID" placeholder="Write here your password"> 
    <input type="button" class="myButtonClass"> 
</form> 
<!--Your div recaptcha. This give you the page recaptcha google when you are into your configuration Change the XXXX for your SITE KEY numbers and letters --> 
<div class="g-recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></div> 
<!--This will be where we display the answer with ajax, in the element who have the class answer--> 
<div class="answer"></div> 


</body> 
</html> 


<?php 
//this is your file.php 
require_once 'recaptchalib.php'; 
//BEGIN OUR PHP FILE WHERE WE'LL RECIEVE ALL THE DATA FROM THE AJAX FILE 
    //we save the action sended trough ajax 
    $action = $_POST['action']; 
    if ($action == 'validate') : 
    //WE SAVE A EMAIL 
     $email = addslashes($_POST['email']); 
    //WE SAVE THE PASSWORD FOR THIS EXAMPLE 
     $password = addslashes($_POST['password']); 
     //We paste here one more time our secret key 
     $secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
     $response = null; 
     $reCaptcha = new ReCaptcha($secret); 
     $captcha = $_POST["captcha"]; 
     //WE VALIDATE IF THE INPUTS ARE CORRECTLY INPUT 
     $input  = strlen($email)*strlen($password); 

     if ($_POST["captcha"]) : 
      $response = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"], 
        $captcha 
       ); 
     endif; 
     //We validate if exists a response success from google recaptcha and if is it, we continue 
     if ($response != null && $response->success) : 
      //if the inputs were in 
      if ($input > 0) : 
       echo 'OWW YEAH, YOU VALIDATE CORRECTLY GOOGLE RECAPTCHA AND YOUR EMAIL IS '.$email.' AND YOUR PASSWORD IS: '.$password; 
      else : 
       echo 'Sorry but you are not fill all the inputs. All are required, please refresh the page and try it again'; 
      endif; 
     else : 
      echo 'Hey, man! Chillout, first validate the google recpatcha and fill the inputs and click the button for continue. Thanks'; 
     endif; 
    endif; 
/*END OF PHP FILE*/ 

//BEGIN OUR FORM IN HTML 

?> 
+0

Die reCaptcha gut funktioniert, es ist nur, wie die PHP sagen, wenn Ergebnisse ist Erfolg = die E-Mail senden, wenn Ausfallen = diese Validierung erhalten beantworten hat fehl. Ich kenne PHP-Programmierung nicht wirklich gut. Ich versuche mein Bestes, damit es funktioniert. Wenn das reCatpcha FAIL ist, möchte ich den sendenden Mailprozess stoppen, und wenn es ERFOLGREICH ist, möchte ich die Mail senden. Es sind nur Grundlagen, die ich wirklich nicht in PHP kenne. Wenn Sie nicht alle Werte, Funktionen und Var kennen, ist es ziemlich kompliziert, denn jemand hat keine Fähigkeiten. –

+0

Ich habe es getestet und funktioniert nicht. –

+0

Kann ich nur die "mail ($ zu, $ email_subject, $ email_body, $ headers);" Teil in den Abschnitt des Erfolgs und E-Mail wird in Erfolg gesendet werden, und nicht in fallure? –