1

抱歉,如果以前有人问过这个问题,但我正在我的第一个网站上工作并且仍在学习。我正在尝试将验证码添加到从此处获取的联系表单http://www.captcha.net/并使用 PHP。目前它正在工作,但网站上提供的让它工作的代码如下:

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

并且它在不同文件(服务器端)上的验证码是:

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

我想知道是否有办法让 if 语句(如果验证码错误)打开联系页面,但显示一个隐藏的 div,显示验证码错误,然后重试。

4

4 回答 4

0

我不确定您的“隐藏 div”想法的目的是什么。您不只是为用户提供输入详细信息和验证码的表单,然后在他们提交时验证他们输入的所有数据吗?如果一切正常提交,否则显示错误并进行修改。

如果是这样,你能不能把验证码放在你的联系页面上?
如果在与您的表单相同的文件中,当用户提交(PHP_SELF)时,您可以运行他们发送的整个表单数据,检查他们输入的内容(is_numeric(),,strlen()等),然后检查验证码。
经过所有检查,如果有任何错误,请告诉他们在哪里/什么,他们可以再试一次。否则操作表格(给你发电子邮件,存储在数据库中,无论如何)。

然后,您可以在同一页面上检查验证码:

if (!$resp->is_valid)
  {
    $CaptchaError = "error";
    // echo is invalid, reset form and make them try again
  }
else
  {
    $CaptchaError = "ok";
  }

如果出于某种原因您需要在单独的文件中将验证码代码添加到表单中,那么只需 POST 或设置 url vars GET 或 SESSION,这样当您将它们发送回验证码表单所在的任何位置时,您就有了数据来为它们提供服务带有错误通知。
尽管使用 POST 数据在一个页面上处理这一切通常是最简单和最易于管理的方法。

于 2013-09-04T14:07:54.680 回答
0

在您的情况下,您可以尝试这种方式:

验证.php

if (!$resp->is_valid) {
    header("Location: contact.php?show-error"); // replace by your file name
    exit;
}
else {
    // Your code here to handle a successful verification
}

联系人.php

if(isset($_GET['show-error'])){
    echo "<div>
        The reCAPTCHA wasn't entered correctly. 
        Go back and try it again.
    </div>";
}

或者:

<div style="display:<?php echo isset($_GET['show-error']) ? "block" : "none"; ?>">
    The reCAPTCHA wasn't entered correctly. 
    Go back and try it again.
</div>

但在你的情况下,我认为最好转到verify code联系页面。因此,您可以轻松决定根据 if 条件显示消息。

于 2013-09-04T14:07:54.637 回答
0

与其做一个骰子,不如将消息放入一个名为 $error 的变量中。基于 isset($error) 是真还是假,您可以使 div 在页面加载时可见/隐藏

于 2013-09-04T14:08:41.417 回答
0

在 if 语句中(如果验证码错误),您可以将错误消息替换为以下内容:

if (!$resp->is_valid) {
header("Location: http://yoursite.com/contactformpage.php?error=captchaerror");
exit;
} else {
// Your code here to handle a successful verification
}

只需确保将http://yoursite.com/contactformpage.php替换为您的联系表单页面的实际 URL,但保持其他所有内容 (?error=captchaerror) 不变。

然后在联系表单页面上,您可以有另一个这样的 if 语句(将其放在您希望出现错误消息的任何位置):

if(isset($_GET['error']) && $_GET['error'] == 'captchaerror') {
echo "The reCAPTCHA wasn't entered correctly. Please try again.";
}

如果您有其他可能的“错误”情况,您可以更改 url 的“captchaerror”部分并重复上述步骤。

如果您不熟悉 PHP $_GET 变量,请查看此页面: http: //php.net/manual/en/reserved.variables.get.php

于 2013-09-04T14:08:51.990 回答