无法让Google Captcha正常工作
问题描述:
我目前正在创建一个联系人表单,并且表单需要完成一个验证码以减少垃圾邮件,我遵循了关于如何在我的代码中使用验证码的教程,但每次都没有工作,希望有人可以帮助这里。任何帮助,将不胜感激。无法让Google Captcha正常工作
HTML
<body>
<hgroup>
<h1>Contact Us</h1>
<?php if(isset($_GET['CaptchaPass'])){ ?>
<h3>Your message was sent, you should recieve an email back within 24
hours.</h3>
<?php } ?>
<?php if(isset($_GET['CaptchaFail'])){ ?>
<h3>Captcha Failed. Please try again!</h3>
<?php } ?>
</hgroup>
<form method='post' action='contactver.php'>
<div class="group">
<input type="text" name="name"><span class="highlight"></span><span
class="bar"></span>
<label>Name</label>
</div>
<div class="group">
<input type="email" name="email"><span class="highlight"></span><span
class="bar"></span>
<label>Email</label>
</div>
<div class="group">
<input type="phone" name="phone"><span class="highlight"></span><span
class="bar"></span>
<label>Phone No.</label>
</div>
<div class="group">
<input type="message" name="message"><span class="highlight"></span><span
class="bar"></span>
<label>Message</label>
</div>
<div class="g-recaptcha" data-
sitekey="My Key, want to keep private :)"></div>
<button type="submit" name="login" class="button buttonBlue">Submit Message
<div class="ripples buttonRipples"><span class="ripplesCircle"></span></div>
</button>
</form>
PHP
$firstname = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
if(isset($_POST['login'])) {
$url = 'https://www.google.com/recaptcha/api/siteverify';
$privatekey = "Want to keep this private :)";
$response = file_get_contents($url."?
secret".$privatekey."&response=".$_POST['g-recaptcha-
response']."&remoteip".$_SERVER['REMOTE_ADDR']);
$data = json_decode($response);
if(isset($data->success) AND $data->success==true) {
echo("Pass");
}else {
header('Location: contact.php?CaptchaFail=true');
echo("Fail");
}
}
答
您还可以使用JavaScript来谷歌验证码验证表单之前提交。
var v = grecaptcha.getResponse();
if(v.length == 0){
document.getElementById('captcha').innerHTML="You can't leave Captcha Code empty";
error = false;
}else{
document.getElementById('captcha').innerHTML="";
}
if(error !== false){
$('#yourformid').submit();
}
return false;
答
我相信有这一行的一个问题:
if(isset($data->success) AND $data->success==true)
它应该是:
if(isset($data->success) AND $data->success===true)
除此之外,我建议使用谷歌作曲库(https://github.com/google/recaptcha)验证recaptcha。它会解决你的代码和头痛问题,因为它们会保持最新。
我没有看到在您的PHP中重定向到“?CaptchaPass”。 – tilz0R
@ tilz0R我没有添加在这个抱歉,但它在那里,没有工作,任何其他修复? ( – Bailee
)为什么不检查Google的'$ data'对象?如果你使用了'var_dump'或'print_r',你可能会看到响应。 – tilz0R