2014-12-28 31 views
6

Es ist irgendwie komisch, dass Googles Dokumentation für Recaptcha nicht so hilfreich ist, wie ich dachte, dass es sein würde. Ich wurde gebeten, ein derzeit bestehendes Formular zu verwenden (das mehrmals täglich gespammt wird) und es mit dem neuen Google-Recaptcha zu aktualisieren. Es gibt viele Tutorials für das alte Captcha, aber nicht so viele für das neue. Ich möchte im Grunde nur ein einfaches Formular, um Name, E-Mail, Nachricht erfassen und ersetzen Sie dann meine aktuellen "Anti-Bot-Feld" mit dem Recaptcha (Ich habe ein Feld, das Sie gefragt, was 2 + 2 war und wenn Sie etwas eingegeben, aber 4, würde es nicht senden). Wenn die erforderlichen Felder gültig sind und das Recaptcha gültig ist, möchte ich eine E-Mail mit dem Inhalt der Formularfelder senden.PHP-Formular + Google reCAPTCHA

Ich ging durch die einfachen Schritte:

  1. registriert meiner Seite die Schlüssel zu bekommen

  2. dieses Snippet hinzugefügt in meinem Kopf tag:

    <script src='https://www.google.com/recaptcha/api.js'></script> 
    
  3. hinzugefügt Dieser Ausschnitt am Ende meines Formulars:

    <div class="g-recaptcha" data-sitekey="#MYKEY#"></div> 
    

An diesem Punkt wird die recaptcha gerade fein zeigt sich. Aber der serverseitige Teil ist ein wenig verwirrend.

Dies ist meine aktualisierte Kontaktform mit dem recaptcha zeigt:

<form method="post" action="contact-post.php"> 
    <label>Your Name (required):</label> 
    <input name="name" type="text" placeholder="Enter your name here"> 
    <label>Email Address (required):</label> 
    <input name="email" type="email" placeholder="Enter your email address here"> 
    <label>Your Message (required):</label> 
    <textarea name="message" placeholder="Write your message here"></textarea> 
    <div style="margin-top:20px;" class="g-recaptcha" data-sitekey="#MYKEY#"></div> 
    <input id="submit" name="submit" type="submit" value="Submit Form"> 
</form> 

Und hier ist meine aktuelle POST Seite (Ich bin nicht sicher, wo in dem recaptcha Code hinzufügen):

<?php 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $human = $_POST['human']; 
     $from = 'From: My Website'; 
     $to = '[email protected]'; 
     $subject = 'Request Form'; 

     $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; 

     if ($_POST['submit']) { 
      if ($email != '') { 
       if ($human == '4') {     
        if (mail ($to, $subject, $body, $from)) { 
         echo '<p>You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.</p>'; 
        } else { 
         echo '<p>Something went wrong, go back and try again!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
        } 
       } else if ($_POST['submit'] && $human != '4') { 
        echo '<p>You answered the anti-spam question incorrectly!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
       } 
      } else { 
       echo '<p>You need to fill in all required fields!!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
      } 
     } 
    ?> 

Jede Hilfe ist willkommen. Ich habe das Gefühl, dass dies ein ziemlich gewöhnliches Volk mit Leuten sein könnte, die versuchen, es in ihre aktuellen Arbeitsformen umzusetzen.

+0

FWIW, gab ich Google Re-Captcha zugunsten einer Lösung individuelle captcha in meinem Rahmen gebaut. Aus irgendeinem Grund konnte ich das Widget nicht in allen Browsern zuverlässig anzeigen lassen. – Sparky

Antwort

5

Schauen Sie sich diesen Link: https://developers.google.com/recaptcha/docs/verify

In wenigen Worten, sollten Sie Anfrage an

https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS 

machen Wo YOUR_SECRET geheime Schlüssel ist, dass Sie auf reCAPTCHA-Website erhalten haben, können USER_IP_ADDRESS durch $_SERVER Array empfangen werden und RESPONSE_CAME_FROM_YOUR_FORM ist eine Zeichenfolge, die mit Ihrem Formular gesendet wird. Es ist in $_POST['g-recaptcha-response'] gespeichert.

Sie können es wie

über file_get_contents($url) tun
$data = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS"); 

In $data Sie JSON-Objekt mit success Feld erhalten, die Sie für suchen. Wenn Erfolg falsch ist, dann ist es kein Mensch und Sie sollten exit(). Ich schlage vor, Sie überprüfen dies am Anfang Ihres Programms.

aktualisieren:

Dekodieren von JSON-Objekt wie folgt aussieht:

$data = json_decode($data); // This will decode JSON to object 
if(!$data->success) 
    exit(); 

aktualisieren:

Manchmal file_get_contents($url) nicht in der Lage sein, gesicherte https-Verbindung einzurichten. Stattdessen können Sie verwenden open_https_url($url) Code aussehen wie:

<?php 
    $your_secret = "<secret_key_you_received_from_recaptcha_site>"; 
    $client_captcha_response = $_POST['g-recaptcha-response']; 
    $user_ip = $_SERVER['REMOTE_ADDR']; 

    $captcha_verify = open_https_url("https://www.google.com/recaptcha/api/siteverify?secret=$your_secret&response=$client_captcha_response&remoteip=$user_ip"); 
    $captcha_verify_decoded = json_decode($captcha_verify); 
    if(!$captcha_verify_decoded->success) 
     die('DIRTY ROBOT'); 

    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    $human = $_POST['human']; 
    $from = 'From: My Website'; 
    $to = '[email protected]'; 
    $subject = 'Request Form'; 

    $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; 

    if ($_POST['submit']) { 
     if ($email != '') { 
      if ($human == '4') {     
       if (mail ($to, $subject, $body, $from)) { 
        echo '<p>You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.</p>'; 
       } else { 
        echo '<p>Something went wrong, go back and try again!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
       } 
      } else if ($_POST['submit'] && $human != '4') { 
       echo '<p>You answered the anti-spam question incorrectly!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
      } 
     } else { 
      echo '<p>You need to fill in all required fields!!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>'; 
     } 
    } 
?> 
+0

Ja, ich habe diese Seite definitiv angeschaut und es schien, dass ich ein wenig mehr Programmierkenntnisse brauchte, um das Konzept zu verstehen. Du hast es sehr gut erklärt. Herauszufinden, wie ich meine Post-Seite ändern und wo ich diesen Code einfügen kann, ist der schwierige Teil, mit dem ich Probleme habe. –

+0

Ich habe einige Korrekturen und Beispielcode hinzugefügt. Hoffe jetzt wirst du ok sein =) – Alagunto

1

Vielleicht ist die oben genannte Antwort ein bisschen veraltet ist, da Google ist jetzt reCaptcha nocaptcha verwenden. Ich habe hier eine einfachere und umfassendere Antwort gefunden, die Sie mit Ihrer separaten PHP-E-Mail-Datei verwenden können.

Die Lösung hat eine einfache E-Mail-Formular mit Namen und E-Mail und eine separate PHP-Datei zum Übermitteln des Formulars. Du solltest in der Lage sein, von dort aus weiterzumachen und dein Formular entsprechend anzupassen. Die Lösung hat für mich funktioniert.

https://stackoverflow.com/a/27439796/3934886

und Link zum Tutorial:

http://codeforgeek.com/2014/12/google-recaptcha-tutorial/

+1

Hallo Alex, wie es aussieht ist es ein Link der nur antwortet und wahrscheinlich gelöscht wird. Wenn Sie sichere Duplikate finden, kennzeichnen Sie diese bitte als solche. Wenn Sie eine Antwort liefern möchten, halten Sie den Link als Referenz. – bummi

+0

Ich kann nicht sagen, ob es ein Duplikat ist. Manchmal ist die Frage so schlecht definiert, sie könnte viele Antworten haben. Wie auch immer, ich bin stark pro Eliminierung von Duplikaten, bin mir aber nicht sicher über die Effizienz des Flaggingsystems. Es kann auch hilfreich sein, den Fragesteller in die richtige Richtung zu lenken. – alex351

+0

Ich kann nicht (fehlende Domain-Kenntnisse), es ist in Ordnung, die Links hinzuzufügen, aber Link nur Antworten werden in der Regel gelöscht werden, in diesem Fall fügen Sie bitte eine Zusammenfassung des ersten Links, die Sie zur Verfügung gestellt. – bummi