之前已经问过这个问题:New Google ReCaptcha not posting/receiving 'g-recaptcha-response' - 但没有正确答案。
我和他的设置完全一样,但代码在这里失败了:
if(!$captcha){
exit;
}
所以$captcha=$_POST['g-recaptcha-response']
似乎是空的。
new google recaptcha with checkbox server side php =这里的第二个答案似乎也无效。
有谁知道为什么会发生这种情况?
答案 0 :(得分:17)
我遇到了这个问题,发现我的表单在DOM中过早关闭,因为它位于表中。 ReCaptcha设置一个显示:无g-recaptcha-response textarea,然后在完成验证码时填写数据。它似乎寻找div所处形式的孩子,因此无法找到它最初创建的g-recaptcha-response。我把表格放在桌子周围,之后就可以了。
答案 1 :(得分:4)
今天我在同事的网站上遇到了同样的问题(g-recaptcha-response
在提交时没有价值)。事实证明,标记<form
错误地嵌套在开头标记<table
之后(不在td中,而是直接在<table
之后)。
这导致了这个问题
移动标记form
后,它会包裹table
,g-recaptcha-response
的值在提交后正确发布到服务器端。
答案 2 :(得分: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
查看用户表单) - 而不是服务器端代码 - 更容易使用该知识。如果所有这些都在客户端就位,那么这将是一个艰难的^^
答案 3 :(得分:1)
刚遇到同样的问题。它不是导致问题的<table>
标记,而是导致问题的<div>
标记。
我的表单位于用于格式化表单总体布局的主<div>
内。 <form>
代码不必位于我用于表单布局的主<div>
中。我在表单布局<form>
标记之前移动了<div>
标记,它开始完美运行。
答案 4 :(得分:1)
Google似乎希望您的开始和结束标记不在<table>
或<div>
等其他DOM元素之内。我有完全相同的问题,现在已经解决了。移动你的......
<div class="g-recaptcha" data-sitekey="abcd1234etc."></div>
...代码到任何或标签之外,它将起作用。好像Google无法找到表单并注入其表单值。
答案 5 :(得分:0)
首先检查是否设置了recaptcha
if(!isset($_POST['g-recaptcha-response']) ){
die ("Error: Not valid recaptcha on form");
}
另请查看此simple PHP tutorial以进行简单调试。
答案 6 :(得分:0)
是的,错误是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 :(得分:0)
完美的解决方案是不要创建自己的 g-recaptcha-response 输入,因为谷歌会用响应填充它,然后继续创建另一个 g-recaptcha-response textarea但不会用响应值填充它
答案 8 :(得分:0)
如果您使用的是reCaptcha v3,则必须在表单中通过附加ID来明确定义 g-recaptcha-response 。
如果您使用的是reCaptcha v2,则只需确保将recaptchacontainer与您一起放在表单中
答案 9 :(得分:0)
以上都不对我有用。我正在使用react-google-recaptcha
。看来您必须事先等待/解决recaptchaRef.current.execute()
承诺。
在没有兑现承诺的情况下,它工作了一半时间,也就是我打电话给recaptchaRef.current.getValue()
的时候。否则它将返回一个空值。
答案 10 :(得分:0)
在以波尔图主题html5制作的网站上,我遇到了同样的问题。 负责验证的javascript代码是手动传递的字段,因此有必要添加g-captcha-response字段。
在“ view.contact.js”中
// Ajax Submit
$.ajax({
type: 'POST',
url: $form.attr('action'),
dataType: 'JSON',
data: {
name: $form.find('#name').val(),
email: $form.find('#email').val(),
subject: $form.find('#subject').val(),
messaggio: $form.find('#messaggio').val(),
grecaptcharesponse: $form.find('#g-recaptcha-response').val()
}
...
并在php页面中进行更改
$_POST['g-recaptcha-response'] with $_POST['grecaptcharesponse']