Google ReCaptcha не публикует "g-recaptcha-response"
Этот вопрос задан раньше: Новый Google ReCaptcha, не отправляющий/получающий "g-recaptcha-response" , но ответа не было.
У меня есть то же самое, что и у меня, но код здесь не работает:
if(!$captcha){
exit;
}
поэтому $captcha=$_POST['g-recaptcha-response']
кажется пустым.
новый google recaptcha с флажком на стороне сервера php= Второй ответ здесь также не работает.
Кто-нибудь знает, почему это может случиться?
Ответы
Ответ 1
Я столкнулся с этой проблемой и обнаружил, что моя форма закрывалась преждевременно в DOM, потому что она находилась внутри таблицы. ReCaptcha устанавливает отображение: нет g-recaptcha-response textarea, а затем заполняет данные, когда вы заполняете captcha. Кажется, что они ищут дочерние элементы формы, в которых находится div, и поэтому не могли найти g-recaptcha-response, который он изначально создал. Я положил форму вокруг стола, и после этого он работал нормально.
Ответ 2
Сегодня у меня была такая же проблема (g-recaptcha-response
не имело значения при отправке) на веб-сайте коллеги. Оказывается, что тег <form
был ошибочно вложен сразу после открывающего тега <table
(не внутри td, а непосредственно после <table
).
Это вызвало проблему.
После перемещения тега form
способом он завернул table
, значение g-recaptcha-response
было правильно отправлено на сервер после отправки.
Ответ 3
Проверьте, есть ли у вас следующее в части, где вы показываете форму пользователю:
-
Между <form>
и </form>
:
<div class="g-recaptcha" data-sitekey="your_public_key"></div>
-
Перед закрывающим тегом </head>
:
<script src='https://www.google.com/recaptcha/api.js'></script>
-
Убедитесь, что ваша форма использует post
как метод,...
<form method="post" ...>
Если они верны, по крайней мере некоторые $_POST['grecaptcha-response']
должны появиться на вашем пути. Сначала проверьте их в полученном на стороне клиента html-коде (во многих браузерах нажав Strg
+ U
, глядя на пользовательскую форму) - вместо кода на стороне сервера - легче работать с этими знаниями. Если все они находятся на месте даже у клиента, это, однако, будет жестким. ^^
Ответ 4
Просто такая же проблема. Проблема не была тегом <table>
, но это был тег <div>
, вызывающий проблему.
Моя форма была в основном <div>
, используемом для форматирования общей компоновки формы. Тег <form>
не должен находиться в основном <div>
, который я использовал для макета формы. Я переместил тег <form>
непосредственно перед тегом макета формы <div>
, и он начал работать отлично.
Ответ 5
Сначала проверьте, установлен ли recaptcha
if(!isset($_POST['g-recaptcha-response']) ){
die ("Error: Not valid recaptcha on form");
}
Также посмотрите на простой учебник PHP для простой отладки.
Ответ 6
Да, ошибка DOM
Ошибка кода
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
form id="contacto" name="contacto" method="post" action="xxx"
Код ОК
form id="contacto" name="contacto" method="post" action="xxx"
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
Ответ 7
Кажется, Google хочет, чтобы ваши открывающие и закрывающие теги были вне других элементов DOM, таких как <table>
или <div>
. У меня была такая же проблема, которая теперь решена. Переместите свой...
<div class="g-recaptcha" data-sitekey="abcd1234etc."></div>
... код вне любого или тега, и он будет работать. Похоже, что Google не может найти форму и ввести значение своей формы в противном случае.
Ответ 8
Идеальное решение - не создавать свой собственный g-recaptcha-response, потому что Google заполнит его ответом и все еще продолжит создание другого g-recaptcha-response textarea, но затем не будет заполнять его значением ответа