无法让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"); 
} 


} 
+0

我没有看到在您的PHP中重定向到“?CaptchaPass”。 – tilz0R

+0

@ tilz0R我没有添加在这个抱歉,但它在那里,没有工作,任何其他修复? ( – Bailee

+0

)为什么不检查Google的'$ data'对象?如果你使用了'var_dump'或'print_r',你可能会看到响应。 – tilz0R

您还可以使用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; 
+0

真的不回答一个问题。 – tilz0R

+0

你可以在PhP中做到吗?:) – Bailee

+0

当然在看完你的php代码后。if你在代码中稍作修改 $ data = j son_decode($响应);如果(isset($ data-> success)AND $ data-> success == true){ to $ status = json_decode($ response,true); if($ status ['success']){ –

我相信有这一行的一个问题:

if(isset($data->success) AND $data->success==true) 

它应该是:

if(isset($data->success) AND $data->success===true) 

除此之外,我建议使用谷歌作曲库(https://github.com/google/recaptcha)验证recaptcha。它会解决你的代码和头痛问题,因为它们会保持最新。