我确信它很简单,但我看不到它。)
我正在尝试将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个空格?)
非常感谢。
答案 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
}
?>