2017-04-12 3 views
0

현재 연락처 양식을 만들고 있으며 스팸을 줄이기 위해 양식에 captcha가 필요합니다. 코드에 captcha를 사용하는 방법에 대한 자습서를 따라 왔지만 잘하면 누군가 여기에서 도울 수 있습니다. 어떤 도움을 주시면 감사하겠습니다.Google 보안 문자 작업에 문제가 발생했습니다.

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

구글의'$ data' 객체를 검사하지 않는 것이 좋겠습니까? var_dump 또는 print_r을 사용하면 응답을 볼 수 있습니다. – tilz0R

답변

0

또한 양식 제출하기 전에 구글의 보안 문자 확인을 위해 자바 스크립트를 사용할 수 있습니다.

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

그것은해야한다 : 내가이 라인에 문제가있는 생각

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 ($ 응답); if (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) 

다른, 나는 것 구글 작곡가 라이브러리를 사용하여 (https://github.com/google/recaptcha을) 제안 recaptcha를 확인하십시오. 그들은 최신 정보를 유지할 것이므로 코드와 두통 라인을 해결할 것입니다.