2017-01-10 2 views
0

Ich versuche, das Google ReCaptcha für eine Kontaktseite zu installieren, und ich habe wirklich begrenzte Kenntnisse mit PHP. Ich bin mir nicht sicher, wo die Informationen, die Google benötigt, in meine PHP-Datei gehen sollten. Hier sind die Google-Anweisungen dafür:Install Info für Google reCaptcha auf Kontaktformular PHP Datei

Wenn Ihre Benutzer senden Sie das Formular in dem Sie reCAPTCHA integriert, die Sie als Teil der Nutzlast eine Zeichenfolge mit dem Namen „g-recaptcha-Antwort“ erhalten werden. Um herauszufinden, ob Google zu überprüfen, wurde der Nachweis erbracht, dass Benutzer, eine POST-Anforderung mit diesen Parametern senden:

URL: https://www.google.com/recaptcha/api/siteverify

Geheimnis (erforderlich) - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Antwort (erforderlich) - Der Wert von ‚g -recaptcha-Antwort '.

remoteip - Die IP-Adresse des Endbenutzers.

Und hier ist mein PHP für das Formular, das ich verwende.

<?php 
$secret = 'SECRET KEY HERE'; 
$verificationResponse = $_POST["g-recaptcha-response"]; 

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$verificationResponse); 
$response = json_decode($response, true); 
if($response["success"] === true){ 
// actions if successful 
}else{ 
// actions if failed 
} 

/* Set e-mail recipient */ 
$myemail = "[email protected]"; 

/* Check all form inputs using check_input function */ 
$name = check_input($_POST['inputName'], "First and Last"); 
$email = check_input($_POST['inputEmail'], "Required"); 
$phone = check_input($_POST['inputPhone']); 
$message = check_input($_POST['inputMessage'], "Brief Description"); 

/* If e-mail is not valid show error message */ 
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) 
{ 
show_error("Invalid e-mail address"); 
} 
/* Let's prepare the message for the e-mail */ 

$subject = "Contact Message from thewiseinvestor.net"; 

$message = " 

Someone has sent you a message using your contact form: 

Name: $name 
Email: $email 
Phone: $phone 

Message: 
$message 

"; 

/* Send the message using mail() function */ 
mail($myemail, $subject, $message); 

/* Redirect visitor to the thank you page */ 
header('Location:contact.html'); 
exit(); 

/* Functions we used */ 
function check_input($data, $problem='') 
{ 
$data = trim($data); 
$data = stripslashes($data); 
$data = htmlspecialchars($data); 
if ($problem && strlen($data) == 0) 
{ 
show_error($problem); 
} 
return $data; 
} 

function show_error($myError) 
{ 
?> 
<html> 
<body> 

<p>Please correct the following error:</p> 
<strong><?php echo $myError; ?></strong> 
<p>Hit the back button and try again</p> 

</body> 
</html> 
<?php 
exit(); 
} 
?> 

HTML-Formular

<div class="row"> 
    <div class="col-md-6 message"> 
    <h2>Send Us A Message</h2> 
    <form name="contactform" method="post" action="index.php" class="form-vertical"> 
     <div class="form-group"> 
     <label for="inputName" class="control-label">Name</label> 
      <input type="text" class="form-control" id="inputName" name="inputName" placeholder="First and Last"> 
     </div> 
     <div class="form-group"> 
     <label for="inputEmail" class="control-label">Email*</label> 
      <input type="text" class="form-control" id="inputEmail" name="inputEmail" placeholder="Required"> 
     </div> 
     <div class="form-group"> 
     <label for="inputPhone" class="control-label">Phone Number</label> 
      <input type="text" class="form-control" id="inputPhone" name="inputPhone" placeholder="Optional"> 
     </div> 
     <div class="form-group"> 
     <label for="inputMessage" class="control-label">Message</label> 
      <textarea class="form-control" rows="5" id="inputMessage" name="inputMessage" placeholder="Brief Description"></textarea> 
     </div> 
     <div class="g-recaptcha" data-sitekey="DATA SITE KEY HERE"></div> 
     <div class="form-group"> 
     <button type="submit" class="btn btn-custom pull-right hvr-underline-from-left">Send</button> 
     </div> 
    </form> 
    </div> <!-- end col-md-6 --> 

Ich bin wirklich nicht sicher, wo sollen die oben genannten Informationen gehen. Jede Hilfe wird sehr geschätzt.

Antwort

1

Der Google reCaptcha Mechanismus ein verstecktes IFrame in Ihrer Form injiziert, und gibt eine Hash-Zeichenfolge an Ihr Verarbeitungsskript namens 'g-recaptcha-response' zurück.

Also, in Ihrem oben PHP-Skript, bevor /* Set e-mail recipient */ fügen Sie bitte folgendes:

<?php 

// error_reporting(E_WARNING); 

function readURL($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 

$secret = "PASTE-YOUR-SECRET-KEY-HERE"; 
$verificationResponse = $_POST["g-recaptcha-response"]; 
if(empty($verificationResponse)) die("Google did not POST the required g-recaptha-response"); 

$response = readURL("https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $verificationResponse . ""); 

$responseArray = json_decode($response, true); 
if($responseArray["success"] !== true) die("Invalid reCaptcha <a href=\"javascript:history.go(-1);\">Try Again</a>"); 

/* Set e-mail recipient */ 
$myemail = "[email protected]"; 

/* Check all form inputs using check_input function */ 
$name = check_input($_POST['inputName'], "First and Last"); 
$email = check_input($_POST['inputEmail'], "Required"); 
$phone = check_input($_POST['inputPhone']); 
$message = check_input($_POST['inputMessage'], "Brief Description"); 

/* If e-mail is not valid show error message */ 
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) 
{ 
show_error("Invalid e-mail address"); 
} 
/* Let's prepare the message for the e-mail */ 

$subject = "Contact Message from thewiseinvestor.net"; 

$message = " 

Someone has sent you a message using your contact form: 

Name: $name 
Email: $email 
Phone: $phone 

Message: 
$message 

"; 

/* Send the message using mail() function */ 
mail($myemail, $subject, $message); 

/* Redirect visitor to the thank you page */ 
header('Location:contact.html'); 
exit(); 

/* Functions we used */ 
function check_input($data, $problem='') 
{ 
$data = trim($data); 
$data = stripslashes($data); 
$data = htmlspecialchars($data); 
if ($problem && strlen($data) == 0) 
{ 
show_error($problem); 
} 
return $data; 
} 

function show_error($myError) 
{ 
?> 
<html> 
<body> 

<p>Please correct the following error:</p> 
<strong><?php echo $myError; ?></strong> 
<p>Hit the back button and try again</p> 

</body> 
</html> 
<?php 
exit(); 
} 

?> 

ohne Probleme funktionieren sollte. Der Code prüft, ob der reCaptcha korrekt übergeben wurde, bevor er andere Dinge überprüft oder Ihnen E-Mails sendet.

Viel Glück.

+0

Danke @Ruslan Abuzant. Dies ist in der Tat hilfreich. Ich werde das Folgende hinzufügen, wo Sie angegeben haben, Entschuldigung für eine weitere dumme Frage, den google secret key, der benötigt wird, wo würde das oben gehen? – user3786102

+0

Keine Sorge, der bearbeitete Code wurde einfach bearbeitet und Sie können den Schlüssel einfach kopieren und einfügen. Es wird als "$ secret" an die Google-Verifikations-URL übergeben, wie Sie sehen können. –

+0

Ich bin fast da @Ruslan Abuzant. Ich habe meinen obigen PHP-Code aktualisiert, um die von Ihnen vorgeschlagenen Änderungen widerzuspiegeln. Ich habe auch mein HTML-Formular eingefügt. Ich bekomme 3 Fehler im Zusammenhang mit Zeile 6, wenn ich auf "Senden" klicke.** Warnung: file_get_contents(): https: // wrapper ist in der Serverkonfiguration von allow_url_fopen = 0 in /nfs/c12/h08/mnt/215915/domains/thewiseinvestor.net/html/index.php in Zeile 6 * deaktiviert * – user3786102

0

Es gibt offizielle Dokumentation für reCaptcha und bereit, PHP lib zu verwenden.

Hier finden Sie bereit, Code und Anmerkungen verwenden: https://github.com/google/recaptcha

Ihre serverseitigen Code wird wie folgt aussehen:

<?php 
$recaptcha = new \ReCaptcha\ReCaptcha($secret); 
$resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp); 
if ($resp->isSuccess()) { 
    // verified! 
} else { 
    $errors = $resp->getErrorCodes(); 
} 
+1

Der Benutzer hat angegeben, dass sie ein "begrenztes Wissen mit PHP" haben. Ich bezweifle, dass Namespace-Klassen und Bibliotheken von Drittanbietern helfen. Trotzdem ist deine Antwort natürlich nützlich, danke. ;) –

Verwandte Themen