无法让ReCAPTCHA工作(甚至显示!)

时间:2014-08-27 16:14:31

标签: php recaptcha

我确信它很简单,但我看不到它。)

我正在尝试将reCAPTCHA添加到具有少量联系表单的现有网站的代码中。

我有来自Google的密钥(当然是在示例中进行了审查)但我甚至无法显示CAPTCHA,更不用说测试过滤是否有效。

我已将reCAPTCHA代码添加到页面中:

index.html:

form name="f1" method="post" action="mail2.php" onsubmit="return verify();">
<p><label>Your Name <span>(*)</span></label><input type="text" name="name" /></p>
<p><label>Your Email</label><input type="text" name="email" /></p>
<p><label>Your Phone No: <span>(*)</span></label><input type="text" name="phone" /></p>
<p><label>Other messages</label><textarea name="messages" rows="" cols=""></textarea>    </p>
<?php
   require_once('recaptchalib.php');
   $publickey = "6LdrxxxxxxxxxxxxxxJr"; // you got this from the signup page
      echo recaptcha_get_html($publickey);
    ?>

            <p style="padding-right:36px; float:right;"><input name="" type="image" src="images/submit_btn.png" /></p>
            </form>

在mail2.php中

<?php
  require_once('recaptchalib.php');
  $privatekey = "6LxxxxxxxxxxxxxxxxxxqZYiH";
  $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



require_once 'mailer/class.phpmailer.php';

$mail = new PHPMailer();
----followed by the standard PHPMailer content----

索引页面只显示标准,未显示CAPTCHA部分,尝试发送电子邮件结果失败并显示一些PHP代码。

如果有一个比我吃得更大的人,我真的很感激。呼吸reCAPTCHA可以投射他们的眼睛,笑和&amp;指出我出错的地方。 :)

希望接受教育,而不仅仅是修复。我的技能在于内容而不是编码我害怕。

(如何在编辑器中插入代码块?当然不必单独将每行缩进4个空格?)

非常感谢。

2 个答案:

答案 0 :(得分:0)

我可以提供帮助因为我的工作比你更远,但我也需要帮助。 首先,您需要在html标头中使用以下代码行(在</head>标记之前:

<script src="https://www.google.com/recaptcha/api.js?fallback=true" async defer></script>

然后在html的正文中,以及表单内的某个位置(在<form> ... </form>标记之间),您需要以下代码:

<div class="g-recaptcha" data-sitekey="....your site key here...."></div>

然后在PHP处理文件中(表单发布到的文件并接收表单变量,您需要以下代码:

$response_string = $_POST['g-recaptcha-response'];
$secret_key = "...put in your secret key here...";
$resp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret_key&response=$response_string");

if($resp != '{ "success": true }')
{   $problem = "failedreCAPTCHA";
    header("Location: http://www.yourwebsite.com/...pagetohandlefailedentry...php?problem=$problem");
    die('Sorry, you entered the wrong value in the Human CAPTCHA challenge. Please try again.'); 
}

除了“if($ resp!='{”success“:true}')”部分内容之外,此代码的效果很好。因为从谷歌填充的变量$ resp是“{”成功“:true}”,结果证明是JSON对象,我不知道如何使用PHP和JSON对象测试“true”。 所以...有人,请帮忙。

答案 1 :(得分:0)

这似乎对我有用,使用谷歌的新“无Captcha reCaptcha”。这很大程度上取决于布鲁克的答案,但包括ip,解析json,并测试成功。

<?php
  $gSecret = "...put in your secret key here...";
  $gResponse = $_POST['g-recaptcha-response'];
  $gRemoteIp = $_SERVER['REMOTE_ADDR'];
  $gResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$gSecret&response=$gResponse&remoteip=$gRemoteIp");
  $resp = json_decode($gResponse);

  if (!$resp->success) {
    // 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-codes . ")");
  } else {
    // Your code here to handle a successful verification
  }
?>