Google ReCaptcha没有发布'g-recaptcha-response'

问题描述 投票:16回答:10

之前有人问过这个问题: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 =这里的第二个答案似乎也不起作用。

有谁知道为什么会发生这种情况?

php recaptcha
10个回答
17
投票

我遇到了这个问题,发现我的表单在DOM中过早关闭,因为它在表中。 ReCaptcha设置一个显示:无g-recaptcha-response textarea,然后在完成验证码时填写数据。它似乎寻找div所处形式的孩子,因此无法找到它最初创建的g-recaptcha-response。我把表格放在桌子周围,之后就可以了。


0
投票

以上都不适合我。我正在使用react-google-recaptcha。似乎你必须事先等待/解决recaptchaRef.current.execute() Promise。

没有解决承诺,它工作了一半,那就是我打电话给recaptchaRef.current.getValue()。否则它将返回一个空值。


4
投票

今天我在一位同事的网站上遇到了同样的问题(g-recaptcha-response在提交时没有任何价值)。事实证明,标签<form错误地嵌套在开口标签<table之后(不在td内,而是直接在<table之后)。 这导致了这个问题。 移动标签form后,它包裹了tableg-recaptcha-response的值在提交后正确发布到服务器端。


3
投票

检查在向用户显示表单的部分中是否存在以下内容:

  1. <form></form>之间: <div class="g-recaptcha" data-sitekey="your_public_key"></div>
  2. 在关闭</head>标签之前: <script src='https://www.google.com/recaptcha/api.js'></script>
  3. 检查您的表单是否使用post作为方法,... <form method="post" ...>

如果这些是正确的,至少有一些$_POST['grecaptcha-response']应该来你的方式。首先在生成的客户端html代码中检查(在许多浏览器中通过按下Strg + U查看用户表单) - 而不是服务器端代码 - 使用这些知识更容易。如果所有这些都在客户端就位,那么这将是一个艰难的^^


1
投票

刚遇到同样的问题。它不是导致问题的<table>标签,但它是导致问题的<div>标签。

我的表单位于用于格式化表单总体布局的主要<div>中。 <form>标签不必在我用于表单布局的主要<div>中。我在表单布局<form>标签之前移动了<div>标签,它开始完美运行。


1
投票

谷歌似乎希望你的开始和结束标签不在其他DOM元素之外,例如<table><div>。我有完全相同的问题,现在已经解决了。移动你的......

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

...代码到任何或标签之外,它将起作用。似乎Google无法找到表单并注入其表单值。


0
投票

首先检查是否设置了recaptcha

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

还可以看看这个simple PHP tutorial进行简单的调试。


0
投票

是的,错误是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"

0
投票

完美的解决方案是不要创建自己的g-recaptcha-response输入,因为谷歌会用响应填充它,但仍然继续创建另一个g-recaptcha-response textarea,但之后不会用响应值填充它


0
投票

如果您使用的是reCaptcha v3,则必须通过附加ID来明确定义表单中的g-recaptcha-response。

如果您使用的是reCaptcha v2,请确保在表单中放入recaptcha容器

© www.soinside.com 2019 - 2024. All rights reserved.