2015-06-06 9 views
11

Diese Frage wurde zuvor gestellt: New Google ReCaptcha not posting/receiving 'g-recaptcha-response' - aber es gab keine richtige Antwort.Google ReCaptcha 'g-recaptcha-response' wird nicht eingestellt

Ich habe den exakt gleichen Satz wie er, aber der Code versagt hier:

if(!$captcha){ 
    exit; 
} 

so scheint $captcha=$_POST['g-recaptcha-response'] leer zu sein.

new google recaptcha with checkbox server side php = Die zweite Antwort hier scheint auch nicht zu funktionieren.

Weiß jemand, warum das passieren könnte?

+0

Stellen Sie sicher, dass Sie die API in das '' '' '' Ihres Dokuments geladen haben und dass es keine Javascript-Fehler gibt. Außerdem können Sie das Dom mit Firebug oder Chrome Dev Tools überprüfen, um zu sehen, ob das Formularfeld dort ist. –

+0

Gleiches Problem hier, meine Antwort ist leer. Antworten auf beide Beiträge haben nicht geholfen. Könnte es eine Netzwerkbeschränkung geben, die die Antwort blockiert? Die reCAPTCHA-Seite zeigt noch keine Daten für meine, aber vielleicht muss ich mehr als einen Tag warten. – mikato

Antwort

1

Überprüfen Sie, ob Sie haben die folgende in dem Teil, in dem Sie das Formular an den Benutzer zeigen :

  1. Zwischen <form> und </form>:

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

  2. Vor dem Schließen </head> tag:

    <script src='https://www.google.com/recaptcha/api.js'></script>

  3. Sie sicher, dass Ihre Form post als Methode verwendet, ...

    <form method="post" ...>

Wenn diese korrekt sind, zumindest einige $_POST['grecaptcha-response'] sollten Sie Ihren Weg kommen. Überprüfen Sie diese zuerst im resultierenden clientseitigen HTML-Code (in vielen Browsern durch Drücken von Strg + U, während Sie das Benutzerformular betrachten) - und nicht Ihren serverseitigen Code - es ist einfacher, mit diesem Wissen zu arbeiten. Wenn alle diejenigen vorhanden sind, auch bei den Kunden, wird dies jedoch eine schwierige Frage ^^

+0

Ich habe die "Honeypot" -Methode gefunden, um Spam-Bots fernzuhalten und entschied mich dafür, da es viel einfacher ist. Gibt es einen Grund, warum ich stattdessen Recaptcha verwenden sollte? – frosty

+0

@frosty: Mit einem Honeypot kannst du nur sehr allgemeine Bots täuschen, wenn dich jemand speziell anspricht, ist es ziemlich wertlos. Man muss auch vorsichtig sein mit Leuten, die Formfüller benutzen (Kunden, die den Browser ihre Formulare für sie ausfüllen lassen), die ebenfalls getäuscht werden, und der (gut gemeinte) Benutzer könnte von Ihrer Seite als Spammer bezeichnet werden ^. Wenn Sie damit einverstanden sind, ist dies eine gültige Option, die Sie (nur) vor den allgemeineren Spambots schützt. Aber ich persönlich würde Recaptcha mit Sicherheit empfehlen, es ist nicht so kompliziert. – Levit

+0

@frosty: Wenn Sie die Punkte dieser Antwort überprüft haben, müssen Sie nur das Recaptcha überprüfen, wenn Sie das Formular validieren. Siehe folgende Antwort für eine gebrauchsfertige Funktion, und Sie sind fertig: http://stackoverflow.com/questions/27274157/new-google-recaptcha-with-checkbox-server-side-php/30749288#30749288 – Levit

0

Prüfen Sie zuerst, wenn recaptcha gesetzt

if(!isset($_POST['g-recaptcha-response'])){ 
    die ("Error: Not valid recaptcha on form"); 
} 

Auch bei dieser simple PHP tutorial für einfache Debugging einen Blick.

+0

Link nicht länger verfügbar. –

+0

@Jimmy Adaro Wayback Maschine zur Rettung! http://web.archive.org/web/20151117185717/http://blog.itslum.com/2015/11/15/google-recaptcha-step-by-step-guide/ – bugfroggy

9

Ich bin auf dieses Problem gestoßen und habe festgestellt, dass mein Formular im DOM vorzeitig geschlossen wurde, weil es sich in einer Tabelle befand. ReCaptcha richtet eine Anzeige ein: keine g-recaptcha-response textarea und füllt später die Daten aus, wenn Sie das Captcha vervollständigen. Es scheint nach Kindern der Form zu suchen, in der sich das div befindet, und konnte daher die g-recaptcha-Antwort, die es ursprünglich erstellt hatte, nicht finden. Ich legte das Formular um den Tisch und es funktionierte danach gut.

+0

Das war es für mich auch. –

+0

yep! - das auf schlechten Legacy-Code Implementierung w/'

[table-contents]
' und nur sitched zu '
[table-contents]
' diese Antwort erspart mir 1 Stunde unnötige Fehlersuche!:) – zanlok

2

Heute hatte ich das gleiche Problem (g-recaptcha-response hatte keinen Wert bei der Übermittlung) auf einer Website eines Kollegen. Stellt sich heraus, dass das Tag <form wurde versehentlich direkt nach dem Öffnen Tag <table verschachtelt (nicht in einem td, aber direkt nach <table).
Dies verursachte das Problem.
Nach dem Verschieben des Tags form in der Weise wickelte es die table, wurde der Wert von g-recaptcha-response nach dem Senden korrekt an die Server-Seite gepostet.

+1

Ich hatte das gleiche Problem in einem alten Code, der nie meins war. Ich änderte die Position von

und
Tags nach außerhalb der Tags und
und es funktioniert jetzt. Danke Zed. – mpoletto

0

Ja, das ist der Fehler der DOM

-Code Fehler

table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" 
form id="contacto" name="contacto" method="post" action="xxx" 

Code OK


form id="contacto" name="contacto" method="post" action="xxx" 
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
1

Genau das gleiche Problem hatte. Es war kein <table> Tag, der das Problem verursachte, aber es war ein <div> Tag, der das Problem verursachte.

Mein Formular wurde innerhalb einer Haupt <div> verwendet, um das allgemeine Layout des Formulars zu formatieren. Das <form>-Tag muss nicht innerhalb der Haupt <div> sein, die ich für das Formularlayout verwendet habe. Ich habe das <form>-Tag kurz vor meinem Formularlayout <div>-Tag verschoben und es hat perfekt funktioniert.

0

Offenbar möchte Google, dass Ihre öffnenden und schließenden Tags außerhalb anderer DOM-Elemente wie <table> oder <div> liegen. Ich hatte genau das gleiche Problem, das jetzt gelöst ist. Bewegen Sie Ihre ...

... Code außerhalb von einem oder Tag und es wird funktionieren. Scheint so, als könnte Google das Formular nicht finden und sonst seinen Formularwert einspielen.

0

Die perfekte Lösung ist nicht Ihren eigenen g-recaptcha-Antwort Eingang erstellt werden, weil Google es mit der Antwort füllen und trotzdem gehen Sie vor weiterer g-recaptcha-Antwort TextArea- zu schaffen, aber dann wird es nicht füllen mit dem Antwortwert