如何验证图片captcha.


How to validate picture captcha..?

这里我已经尝试过使用谷歌api给用户一个图片captcha。。但问题是,即使用户在没有提交captcha的情况下点击提交,用户也会注册。。!!这里有.html文件

<form method = "POST" name = "register" id = "register" class="m-t" role="form" action="login.html">
  <div class="form-group">
    <input type="text" name = "fname" id = "fname" class="form-control" placeholder="First Name" required="">
  </div>
  <div class="form-group">
    <input type="text" name = "lname" id = "lname" class="form-control" placeholder="Last Name" required="">
  </div>
  <div class="form-group">
    <input type="email" name = "email" id = "email" class="form-control" placeholder="Email" required="">
  </div>
  <div class="form-group">
    <input type="password" name = "password" id = "password" class="form-control" placeholder="Password" required="">
  </div>
  <div class="form-group">
    <input type="mobile" name = "mobile" id = "mobile" class="form-control" placeholder="Mobile No" required="">
  </div>
  <div  class="form-group" id="recaptcha_widget">
    <div class="required">
      <div class="g-recaptcha" data-sitekey="6Lc4vP4SAAAAABjhRjyoMguw66mNSBgdpBF398AG"></div>
        <!-- End Thumbnail-->
      </div>
      <?php include("js/captcha.php");?>
    </div>
    <div class="form-group">
      <div cle the terms and policy </label></div>
    </div>ass="checkbox i-checks"><label> <input type="checkbox"><i></i> Agre
    <button type="submit" name = "submit" id = "submit" class="btn btn-primary block full-width m-b">Register</button>
    <p class="text-muted text-center"><small>Already have an account?</small></p>
    <a class="btn btn-sm btn-white btn-block" href="login.html">Login</a>
</form>

这里有.php文件

<?php
  if(isset($_POST['submit'])){
    // Send data and get response
    $cap = $_POST['g-recaptcha-response'];
    $ch = curl_init('https://www.google.com/recaptcha/api/siteverify?secret=6Lc4vP4SAAAAAGOM8ERb1pYSBfHjiMGb9bnGVtog&response='.$cap);                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");                                                                                                                               
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    if($result = curl_exec($ch);
      curl_close($ch);
      print_r($result);
    }
?>

我用更清晰、更有序的代码行创建了演示。

HTML:

<html>
  <head>
    <title>Addweb solution Pvt Ltd Google recapcha demo - Codeforgeek</title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
  </head>
  <body>
    <h1>Google reCAPTHA Demo</h1>
    <form id="comment_form" action="verify.php" method="post">
      <input type="email" placeholder="Type your email" size="40"><br><br>
      <textarea name="comment" rows="8" cols="39"></textarea><br><br>
      <input type="submit" name="submit" value="Post comment"><br><br>
      <div class="g-recaptcha" data-sitekey="XXXXXXXXX_SITE_KEY_XXXXXXXX"></div>
    </form>
  </body>
</html>

PHP:

<?php
if(isset($_POST['submit']) && !empty($_POST['submit'])){
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
        //your site secret key
        $secret = 'XXXXXXXXXXXXX_SECRET_KEY_XXXXXXXXXXXX';
        //get verify response data
        $param = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$_POST['g-recaptcha-response'];
        $verifyResponse = file_get_contents($param);
        $responseData = json_decode($verifyResponse);
        if($responseData->success){
            //contact form submission code goes here
            $succMsg = 'Your contact request have submitted successfully.';
            //Your PHP stuff for use after captcha validate success.
        }else{
            $errMsg = 'Robot verification failed, please try again.';
        }
    }else{
        $errMsg = 'Please click on the reCAPTCHA box.';
    }
}
?>

请将您的站点密钥替换为'XXXXXXXX_site_key_XXXXXXXX',将密钥替换为'%XXXXXX_secret_key_XXXXXXXXXX'。还可以在成功验证块中使用与mysql相关的逻辑。

以后你需要检查错误消息,如果有的话,你可以在这里找到。

如果对此有任何担忧,请告诉我。希望得到帮助。!

只需在客户端对空的captcha字段进行JavaScript验证,并允许他们在没有填写表单的情况下提交表单!这里有一个很好的例子:ReCaptcha Validation