php - how - Google ReCaptcha no publica ''g-recaptcha-response''
recaptcha google developer (10)
Esta pregunta se ha hecho antes: el nuevo Google ReCaptcha no publica / recibe ''g-recaptcha-response'' , pero no hubo una respuesta adecuada.
Tengo exactamente la misma configuración que él, pero el código falla aquí:
if(!$captcha){
exit;
}
entonces $captcha=$_POST[''g-recaptcha-response'']
parece estar vacío.
new google recaptcha with checkbox server side php = La segunda respuesta aquí tampoco parece funcionar.
¿Alguien sabe por qué esto podría pasar?
Encontré este problema y descubrí que mi formulario se estaba cerrando prematuramente en el DOM porque estaba dentro de una tabla. ReCaptcha configura una pantalla: ninguna g-recaptcha-response textarea y luego completa los datos al completar el captcha. Parece buscar hijos de la forma en que se encuentra el div y, por lo tanto, no pudo encontrar la respuesta g-recaptcha que inicialmente había creado. Puse el formulario alrededor de la mesa y funcionó bien después de eso.
Hoy tuve este mismo problema ( g-recaptcha-response
no tenía valor al enviarlo) en un sitio web de un colega. Resulta que la etiqueta <form
se anidó erróneamente justo después de la etiqueta de apertura <table
(no dentro de un td, sino directamente después de <table
).
Esto estaba causando el problema.
Después de mover la form
la etiqueta de manera que envolvió la table
, el valor de g-recaptcha-response
se envió correctamente al lado del servidor después de enviarlo.
La solución perfecta es no crear su propia entrada de g-recaptcha-response porque google la llenará con la respuesta y aún así seguirá creando otro área de texto de g-recaptcha-response pero luego no la llenará con el valor de la respuesta
Nada de lo anterior funcionó para mí. Estoy usando react-google-recaptcha
. Y parece que tiene que esperar / resolver la recaptchaRef.current.execute()
antemano.
Sin resolver la promesa, funcionó la mitad de las veces, y es cuando llamo recaptchaRef.current.getValue()
. De lo contrario, devolvería un valor vacío.
Parece que Google desea que sus etiquetas de apertura y cierre estén fuera de otros elementos DOM como <table>
o <div>
. Tuve el mismo problema que ahora está resuelto. Mueve tu...
<div class="g-recaptcha" data-sitekey="abcd1234etc."></div>
... codifique afuera de cualquier etiqueta y funcionará. Parece como si Google no puede encontrar el formulario e inyectar su valor de formulario de lo contrario.
Primero verifica si recaptcha está configurado
if(!isset($_POST[''g-recaptcha-response'']) ){
die ("Error: Not valid recaptcha on form");
}
También eche un vistazo a este sencillo tutorial de PHP para la depuración simple.
Sí, el error es el DOM
Error de código
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
form id="contacto" name="contacto" method="post" action="xxx"
Código OK
form id="contacto" name="contacto" method="post" action="xxx"
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
Si está utilizando reCaptcha v3, debe definir explícitamente g-recaptcha-response en su formulario adjuntando un ID.
Si está utilizando reCaptcha v2, solo asegúrese de poner recaptchacontainer en su formulario
Solo tuve el mismo problema. No era una etiqueta <table>
causaba el problema, pero era una etiqueta <div>
causaba el problema.
Mi formulario estaba dentro de un <div>
principal utilizado para formatear el diseño general del formulario. La etiqueta <form>
NO TIENE QUE estar dentro del <div>
principal que estaba usando para el diseño del formulario. Moví la etiqueta <form>
justo antes de mi etiqueta de diseño de formulario <div>
y comenzó a funcionar perfectamente.
Verifique si tiene el siguiente presente en la parte donde muestra el formulario al usuario :
Entre
<form>
y</form>
:<div class="g-recaptcha" data-sitekey="your_public_key"></div>
Antes de la etiqueta de cierre
</head>
:<script src=''https://www.google.com/recaptcha/api.js''></script>
Comprueba que tu formulario utiliza
post
como método, ...<form method="post" ...>
Si esto es correcto, al menos algo de $_POST[''grecaptcha-response'']
debería estar llegando. Verifique los primeros en el código html del lado del cliente resultante (en muchos navegadores presionando Strg
+ U
mientras observa el formulario de usuario), en lugar del código del lado del servidor, es más fácil trabajar con ese conocimiento. Si todos estos están en su lugar, incluso en el cliente, esto sin embargo será difícil ^^