php Google reCAPTCHA -不断得到'不正确的验证码-解决'

wvyml7n5  于 2022-10-30  发布在  PHP
关注(0)|答案(8)|浏览(179)

我试图添加一个reCAPTCHA到我的网站,但不断得到incorrect-captcha-sol错误时,我提交的答案。
谁能告诉我,我做以下事情是否正确?
我有一个通用的index.php,其中包含contact.php。在contact.php中,我插入了以下代码:

require_once('recaptchalib.php');
$publickey = "XXXX";
$privatekey = "XXXX";

//the response from reCAPTCHA
$resp = null;
//the error code from reCAPTCHA, if any
$error = null;

if ($_POST['submit']) {
    $message = $_POST['message_txt'];
    $name = $_POST['name_txt'];
    $email = $_POST['email_txt'];

    $emailBody = $message;
    $to = 'xx';
    $from = $name.' <'.$email.'>';
    $subject = 'XX Website Enquiry';
    $headers = 'From: '.$from;  

    $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);

    if ($resp->is_valid) {
        echo 'captcha correct';
        if (mail($to,$subject,$emailBody,$headers)) {
            //echo 'mail sent';
            $confirmation = 'sent';
        }
        else {
            //echo 'mail not sent';
            $confirmation = 'error';
        }
    } else {
        # set the error code so that we can display it. You could also use
        # die ("reCAPTCHA failed"), but using the error message is
        # more user friendly

        $error = $resp->error;

        echo $error;
    }
}

在我的html中,我插入了如下的验证码:

<form name="contactForm" method="post" action="index.php?id=contact&action=submit#contact">
    <tr><td>Name</td><td><div align="right">
        <input type="text" name="name_txt" class="input">
        </div></td></tr>
    <tr><td>Email</td><td><div align="right">
        <input type="text" name="email_txt" class="input">
    </div></td></tr>
    <tr><td height="10"></td></tr>
    <tr><td colspan="2">Message</td></tr>
    <tr><td colspan="2"><textarea name="message_txt" class="textarea" style="width:200px; height:100px"></textarea></td></tr>
    <tr><td colspan="2"><?php echo recaptcha_get_html($publickey, $error); ?></td></tr>
    <tr><td colspan="2" style="padding-top:10px;"><input type="image" src="images/header_06.gif" name="submit" value="submit"></td></tr>
</form>

我看不出我做错了什么,但我会感激任何帮助。

rggaifut

rggaifut1#

您是否从您的本地主机执行此操作?
我通过将localhost添加到允许的域中来解决这个问题,以便在google reCaptcha设置中进行验证

vwkv1x7d

vwkv1x7d2#

我已经解决了这一点,这是我所遇到的最不寻常的事情之一,我先前的语法是:

<table>
  <form>
    <tr><td></td></tr>
  </form>
</table>

我将其更改为:

<form>
  <table>
    <tr><td></td></tr>
  </table>
</form>

由于此开关,recaptcha_response_fieldrecaptcha_challenge_field会突然将值发送回窗体。
我想不出这是为什么,因为所有的MY表单变量都在切换之前被回发了。
谢谢大家的指点。

sq1bmfud

sq1bmfud3#

如果你发布两次检查-例如一次从javascript,一次通过php,第二次将失败,因为API只允许一个解决方案返回有效一次。
希望能帮上忙乔什

e5nqia27

e5nqia274#

这是因为表单不能在tr的外部.....它必须在table的外部.....表单不能插入table,但可以插入td。

ejk8hzay

ejk8hzay5#

在我的例子中,错误是设置表单时没有指定:
方法=“POST”
干杯干杯干杯

vd2z7a6w

vd2z7a6w6#

你确定你输入的词是正确的吗?
这个是recaptcha website :

Line 1       "true" or "false". True if the reCAPTCHA was successful
Line 2  if Line 1 is false, then this string will be an error code. reCAPTCHA can 
    display the error to the user (through the error parameter of api.recaptcha.net/challenge).
     Implementations should not depend on error code names, 
as they may change in the future.

    Example: If your response looks like this:

    false
  **incorrect-captcha-sol**

    ... you can add '&error=incorrect-captcha-sol' to the challenge request URL, 
and the user will get an error code.
ipakzgxi

ipakzgxi7#

在根目录中从脚本设置php.ini,并使用以下命令:
允许URL打开=打开

ny6fqffe

ny6fqffe8#

似乎需要HTTPS。这为我在开发中修复了它。

相关问题