2017-04-12 102 views
0

我目前正在創建一個聯繫人表單,並且表單需要完成一個驗證碼以減少垃圾郵件,我遵循了關於如何在我的代碼中使用驗證碼的教程,但每次都沒有工作,希望有人可以幫助這裏。任何幫助,將不勝感激。無法讓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

回答

0

您還可以使用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']){ –

0

我相信有這一行的一個問題:

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

它應該是:

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

除此之外,我建議使用谷歌作曲庫(https://github.com/google/recaptcha)驗證recaptcha。它會解決你的代碼和頭痛問題,因爲它們會保持最新。