Google Invisible ReCaptcha на нескольких формах на одной странице - PHP

Я слежу за этим невидимым документом ReCaptcha на моем сайте php: http://www.pinnacleinternet.com/installing-invisible-recaptcha/ все работает хорошо. но хотя реализация реализована в нескольких формах на одной странице, тогда Captcha работает только в первой форме и не знает, что происходит со второй формой, мне интересно узнать, как она работает с несколькими формами на одной странице. Или кто-нибудь, пожалуйста, предложите рабочий документ для нескольких форм?

//this is @Geordy's javascript portion modified according to jquery.validate
    <script type="text/javascript">

    $().ready(function() {
    var demo1Call = 0;
    var demo2Call = 0;

        // validate and submit 1st form
        $("#demo-form1").validate({
            rules: {

                  pass: {
                    required: true,
                    pwcheck: true,
                    minlength: 5
                  },
            },
            messages: {
                  pass: {
                    required: "Please provide a password",
                    pwcheck: "<br />*Minimum length 8<br />*Maximum length 24<br />*Atleast a digit<br />*Atleast an upper case<br />*Atleast a lowercase<br />*Atleast a special character from these !@#$%",
                    minlength: "Your password must be at least 5 characters long"
                  },
            },
            success: function(error){
                console.log("Successfully validated");  
            },
            submitHandler: function(form) {

                demo1Call++;
                if(demo1Call==1){
                    widgetId1 = grecaptcha.render('recaptcha1', {
                    'sitekey' : '<?php echo $config['client-key']; ?>',
                    'callback' : onSubmit1,
                    'size' : "invisible"
                    });
                }
                grecaptcha.reset(widgetId1);
                grecaptcha.execute(widgetId1);
            },
        });

        //validate and submit 2nd form
        $("#demo-form2").validate({
            rules: {

                  pass: {
                    required: true,
                    pwcheck: true,
                    minlength: 5
                  },
            },
            messages: {
                  pass: {
                    required: "Please provide a password",
                    pwcheck: "<br />*Minimum length 8<br />*Maximum length 24<br />*Atleast a digit<br />*Atleast an upper case<br />*Atleast a lowercase<br />*Atleast a special character from these !@#$%",
                    minlength: "Your password must be at least 5 characters long"
                  },
            },
            success: function(error){
                console.log("Successfully validated");  
            },
            submitHandler: function(form) {

                demo2Call++;
                if(demo2Call==1){
                    widgetId2 = grecaptcha.render('recaptcha2', {
                    'sitekey' : '<?php echo $config['client-key']; ?>',
                    'callback' : onSubmit2,
                    'size' : "invisible"
                    });
                }
                grecaptcha.reset(widgetId2);
                grecaptcha.execute(widgetId2);
            },
        });



    });

    $.validator.addMethod("pwcheck", function(value) {
       var pattern = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]{8,24}$/;
       return pattern.test(value);
    });

function onSubmit1(token){
        document.getElementById("demo-form1").submit();
};

function onSubmit2(token){
        document.getElementById("demo-form2").submit();
};

</script>

1 ответ

Решение

Код ниже работает для меня

<?php
$config = require('config.php');
?>
<html>
  <head>
    <title>reCAPTCHA demo</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    <!-- Boostrap Validator --> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js" ></script>

    <script type="text/javascript">
    $(document).ready(function(){
        var demo1Call = 0;
        var demo2Call = 0;

        $('#demo-form1').validator().on('submit', function (e) {
          if (e.isDefaultPrevented()) {
            // handle the invalid form...
            console.log("validation failed");
          } else {
            // everything looks good!
            demo1Call++;

            e.preventDefault();         
            console.log("validation success");

            if(demo1Call==1)
            {
                widgetId1 = grecaptcha.render('recaptcha1', {
                'sitekey' : '<?php echo $config['client-key']; ?>',
                'callback' : onSubmit1,
                'size' : "invisible"
                });
            }

            grecaptcha.reset(widgetId1);

            grecaptcha.execute(widgetId1);          
          }
        });

        $('#demo-form2').validator().on('submit', function (e) {
          if (e.isDefaultPrevented()) {
            // handle the invalid form...
            console.log("validation failed");
          } else {
            // everything looks good!
            demo2Call++;

            e.preventDefault();
            console.log("validation success");

            if(demo2Call==1)
            {
                widgetId2 = grecaptcha.render('recaptcha2', {
                'sitekey' : '<?php echo $config['client-key']; ?>',
                'callback' : onSubmit2,
                'size' : "invisible"
                });
            }

            grecaptcha.reset(widgetId2);

            grecaptcha.execute(widgetId2);

          }
        });

    });

    function onSubmit1(token){
            document.getElementById("demo-form1").submit();
    };

    function onSubmit2(token){
            document.getElementById("demo-form2").submit();
    };

    </script>


  </head>
  <body>
    <div class="container">
    <br>
        <div class="row">
            <div class="col-md-5 col-md-offset-3">
                <form id="demo-form1" data-toggle="validator" role="form"  action="admin.php" method="POST" >
                    <div class="form-group">
                        <label for="inputName" class="control-label">Name</label>
                        <input type="text" class="form-control" id="inputName" placeholder="Geordy James" required/>
                    </div>
                    <div id='recaptcha1' ></div>
                    <button class="btn btn-block btn-primary"  type="submit">Submit</button>
                </form>
            </div>
        </div>

    <br>
        <div class="row">
            <div class="col-md-5 col-md-offset-3">
                <form id="demo-form2" data-toggle="validator" role="form"  action="admin2.php" method="POST" >
                    <div class="form-group">
                        <label for="inputName" class="control-label">Name</label>
                        <input type="text" class="form-control" id="inputName" placeholder="Geordy James" required/>
                    </div>
                    <div id='recaptcha2' ></div>
                    <button class="btn btn-block btn-primary"  type="submit">Submit</button>
                </form>
            </div>
        </div>  
    </div>
    <script src="https://www.google.com/recaptcha/api.js" async defer ></script>
  </body>
</html>

Я использовал неофициальную PHP-библиотеку Google Invisible reCAPTCHA в этой программе, и вы можете скачать ее с https://github.com/geordyjames/google-Invisible-reCAPTCHA. Если этот метод не работает для вас, пожалуйста, прокомментируйте ниже.

Другие вопросы по тегам