【问题标题】:Having trouble getting Google Captcha working无法让 Google Captcha 正常工作
【发布时间】:2017-04-12 13:03:53
【问题描述】:

我目前正在创建一个联系表单,该表单需要完成验证码以减少垃圾邮件,我已经按照教程介绍了如何在我的代码中使用验证码,但每次它都不起作用,希望有人能提供帮助这里。任何帮助将不胜感激。

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


}

【问题讨论】:

  • 我在你的 PHP 中没有看到重定向到 ?CaptchaPass
  • @tilz0R 我没有添加这个抱歉,但它在那里并且不起作用,还有其他修复吗? :(
  • 您为什么不检查来自 Google 的 $data 对象?如果您这样做var_dumpprint_r,您可能会看到响应。
  • @tilz0R object(stdClass)#1 (2) { ["success"]=> bool(false) ["error-codes"]=> array(1) { [0]=> string(20) "missing-input-secret" } } 有什么解决办法吗? :(
  • 是的。在 Google 验证码上阅读要发送的请求的文档。

标签: php html captcha


【解决方案1】:

您还可以在表单提交之前使用 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;

【讨论】:

  • 真的不会回答问题。
  • 你能用 PhP 做吗? :)
  • 当然是在阅读了您的 php 代码之后。如果您对代码稍作更改。 $data = json_decode($response); if(isset($data->success) AND $data->success==true) { to $status= json_decode($response, true); if($status['success']){
【解决方案2】:

我认为这行有问题:

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

应该是:

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

除此之外,我建议使用 Google Composer 库 (https://github.com/google/recaptcha) 来验证验证码。它将解决您的代码行和头痛问题,因为它们会保持最新状态。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2017-11-06
    • 2011-09-06
    • 1970-01-01
    • 2023-03-10
    • 2020-10-16
    相关资源
    最近更新 更多