2015-06-06 23 views
11

Questa domanda è stata posta prima: New Google ReCaptcha not posting/receiving 'g-recaptcha-response' - ma non c'era una risposta adeguata.Google ReCaptcha non postando 'g-recaptcha-response'

Ho lo stesso esatto set up come lui, ma il codice fallisce qui:

if(!$captcha){ 
    exit; 
} 

così $captcha=$_POST['g-recaptcha-response'] sembra essere vuoto.

new google recaptcha with checkbox server side php = Anche la seconda risposta non sembra funzionare.

Qualcuno sa perché questo potrebbe accadere?

+0

Assicurati di aver caricato l'API js nel '' '' '' del documento e che non ci siano errori javascript. Inoltre, puoi controllare dom con Firebug o Chrome Dev Tools per vedere se il campo del modulo è lì. –

+0

Lo stesso problema qui, la mia risposta è vuota. Le risposte su entrambi i post non hanno aiutato. Potrebbe esserci una restrizione di rete che blocca la risposta? Il sito reCAPTCHA non mostra ancora dati per il mio, ma forse devo aspettare più di un giorno. – mikato

risposta

1

Verificare se si ha la seguente presente nella parte in cui si mostra il modulo per l'utente:

  1. Tra <form> e </form>:

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

  2. Prima della chiusura </head> tag:

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

  3. Verificare che il modulo utilizza post come metodo, ...

    <form method="post" ...>

Se questi sono corretti, almeno un po '$_POST['grecaptcha-response'] dovrebbe venire dalla tua parte. Controlla quelli prima nel codice html del lato client risultante (in molti browser premendo Strg + U mentre guardi il modulo utente) - piuttosto che il tuo codice lato server - è più facile lavorare con quella conoscenza. Se tutti coloro che sono in atto anche presso il cliente, questo sarà comunque un duro uno ^^

+0

Ho trovato il metodo "honeypot" per tenere fuori i bot antispam e ho deciso di seguirlo dato che è molto più semplice. C'è qualche ragione per cui dovrei usare recaptcha invece? – frosty

+0

@frosty: Con un honeypot sei SOLO in grado di ingannare bot molto generali, se qualcuno che ti bersaglia in modo specifico è piuttosto inutile. Inoltre devi stare attento con le persone che usano i riempitori di forma (i clienti che lasciano che il browser riempia loro moduli per loro), che sarà ingannato, e l'utente (ben intenzionato) potrebbe essere soprannominato essere chiamato spammer dal tuo sito^^. Se stai bene, è un'opzione valida che ti proteggerà (solo) dagli spambot più generali. Ma personalmente consiglierei il recaptcha di sicuro, non è così complicato. – Levit

+0

@frosty: se hai controllato i punti di questa risposta, devi solo controllare il recaptcha quando convalida il modulo. Vedi la seguente risposta per una funzione pronta all'uso, e hai finito: http://stackoverflow.com/questions/27274157/new-google-recaptcha-with-checkbox-server-side-php/30749288#30749288 – Levit

0

In primo luogo verificare se recaptcha è impostato

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

Anche dare un'occhiata a questo simple PHP tutorial per semplice debug.

+0

Link non più disponibile. –

+0

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

9

Ho riscontrato questo problema e ho riscontrato che il mio modulo si stava chiudendo prematuramente nel DOM perché era all'interno di un tavolo. ReCaptcha imposta uno schermo: nessuna area di testo di risposta a g-recaptcha e in seguito riempie i dati quando si completa il captcha. Sembra cercare figli della forma in cui si trova il div e quindi non potrebbe trovare la risposta g-recaptcha che aveva inizialmente creato. Ho messo il modulo intorno al tavolo e ha funzionato bene dopo.

+0

È stato anche per me. –

+0

sì! - danno attuazione alla presente sul codice legacy male w/'

[TABLE-contents]
' e solo sitched a '
[TABLE-contents]
' questa risposta mi ha risparmiato 1 ora inutile il debug!:) – zanlok

2

Oggi ho avuto lo stesso problema (g-recaptcha-response non aveva alcun valore su invio) su un sito Web di un collega. Risulta che il tag <form è stato erroneamente annidato subito dopo il tag di apertura <table (non all'interno di td, ma direttamente dopo <table).
Ciò stava causando il problema.
Dopo aver spostato il tag form in modo da avvolgere il table, il valore di g-recaptcha-response è stato correttamente pubblicato sul lato server dopo l'invio.

+1

Ho avuto lo stesso problema in un vecchio codice che non era mai mio. Ho modificato la posizione dei tag

e
all'esterno dei tag e
e ora funziona. Grazie. – mpoletto

0

Sì, l'errore è il DOM

errore Codice

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

Codice OK


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

Appena avuto lo stesso problema. Non era un tag <table> a causare il problema ma era un tag <div> che causa il problema.

Il mio modulo era all'interno di uno <div> principale utilizzato per formattare il layout generale del modulo. Il tag <form> non deve essere compreso nel numero <div> principale che stavo usando per il layout del modulo. Ho spostato il tag <form> appena prima del tag di layout <div> e ha iniziato a funzionare perfettamente.

0

Sembra che Google desideri che i tag di apertura e chiusura siano al di fuori di altri elementi DOM come <table> o <div>. Ho avuto lo stesso identico problema che ora è risolto. Sposta il tuo ...

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

... codice al di fuori di qualsiasi o tag e funzionerà. Sembra come se Google non fosse in grado di trovare il modulo e iniettarne il valore in forma altrimenti.

0

La soluzione perfetta è di non creare il proprio ingresso g-recaptcha-risposta perché Google riempirà con la risposta e ancora ancora andare avanti la creazione di un altro g-recaptcha-risposta textarea ma poi non lo riempirà con il valore di risposta