之前有人问过这个问题: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 =这里的第二个答案似乎也不起作用。
有谁知道为什么会发生这种情况?
我遇到了这个问题,发现我的表单在DOM中过早关闭,因为它在表中。 ReCaptcha设置一个显示:无g-recaptcha-response textarea,然后在完成验证码时填写数据。它似乎寻找div所处形式的孩子,因此无法找到它最初创建的g-recaptcha-response。我把表格放在桌子周围,之后就可以了。
以上都不适合我。我正在使用react-google-recaptcha
。似乎你必须事先等待/解决recaptchaRef.current.execute()
Promise。
没有解决承诺,它工作了一半,那就是我打电话给recaptchaRef.current.getValue()
。否则它将返回一个空值。
今天我在一位同事的网站上遇到了同样的问题(g-recaptcha-response
在提交时没有任何价值)。事实证明,标签<form
错误地嵌套在开口标签<table
之后(不在td内,而是直接在<table
之后)。
这导致了这个问题。
移动标签form
后,它包裹了table
,g-recaptcha-response
的值在提交后正确发布到服务器端。
检查在向用户显示表单的部分中是否存在以下内容:
<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
查看用户表单) - 而不是服务器端代码 - 使用这些知识更容易。如果所有这些都在客户端就位,那么这将是一个艰难的^^
刚遇到同样的问题。它不是导致问题的<table>
标签,但它是导致问题的<div>
标签。
我的表单位于用于格式化表单总体布局的主要<div>
中。 <form>
标签不必在我用于表单布局的主要<div>
中。我在表单布局<form>
标签之前移动了<div>
标签,它开始完美运行。
谷歌似乎希望你的开始和结束标签不在其他DOM元素之外,例如<table>
或<div>
。我有完全相同的问题,现在已经解决了。移动你的......
<div class="g-recaptcha" data-sitekey="abcd1234etc."></div>
...代码到任何或标签之外,它将起作用。似乎Google无法找到表单并注入其表单值。
首先检查是否设置了recaptcha
if(!isset($_POST['g-recaptcha-response']) ){
die ("Error: Not valid recaptcha on form");
}
还可以看看这个simple PHP tutorial进行简单的调试。
是的,错误是DOM
代码错误
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
form id="contacto" name="contacto" method="post" action="xxx"
代码OK
form id="contacto" name="contacto" method="post" action="xxx"
table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
完美的解决方案是不要创建自己的g-recaptcha-response输入,因为谷歌会用响应填充它,但仍然继续创建另一个g-recaptcha-response textarea,但之后不会用响应值填充它
如果您使用的是reCaptcha v3,则必须通过附加ID来明确定义表单中的g-recaptcha-response。
如果您使用的是reCaptcha v2,请确保在表单中放入recaptcha容器