如何在成功提交表单时重置ReCaptcha框

时间:2018-05-21 12:47:47

标签: javascript recaptcha

我的网站上有一个使用ReCaptcha2的表单。表单成功完成并且您收到成功消息后,表单字段(名称,电子邮件,消息)将被清除,但ReCaptcha框仍保持勾选状态。成功提交表单后是否有任何方法可以清除此框,或者是否有永久显示成功消息的方法(而不是在几秒钟后淡出)并从页面中删除整个表单。理想情况下,成功消息将保留在页面上,直到刷新为止。我仍然希望现有的其他错误消息像现在一样淡入淡出。

目前最初的Captcha错误消息显示“您没有选中此框,检测到机器人或您已发送此表单。请选中此框或刷新此页面并再次尝试”。刷新建议是覆盖用户再次按下发送的实例,并且ReCaptcha已经从之前的成功提交中被勾选(即他们尝试两次发送表单)。因此,为什么我要实现我的问题中提出的解决方案之一。提前感谢您提供的任何帮助。这是表单的工作URL(在页面底部)

http://www.topolinowebdesigns.uk/test-site/aerocoat/index-v2.html

<?php

    /*
    +-----------------------------------------------------+
    | GOOGLE reCAPTCHA YOUR PUBLIC AND PRIVATE KEY        |
    | You can collect public and secret key from here:    |
    | https://www.google.com/recaptcha/admin              |
    +-----------------------------------------------------+
    */
    $recaptcha_secretkey = "My secret key";

    // GOOGLE reCAPTCHA Validation Check
    ini_set('display_errors',1);  error_reporting(E_ALL);


    $message = "";
    $status = "false";

    if( isset( $_POST['submit'] ) ) {
        $userIP = $_SERVER["REMOTE_ADDR"];
        $recaptchaResponse = $_POST['g-recaptcha-response'];
        $secretKey = $recaptcha_secretkey;
        $request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$recaptchaResponse}&remoteip={$userIP}");

        if( !strstr( $request, "true" ) ) {
            $message = '<p align="justify"><strong>Captcha Error!</strong> You did not check the box, a bot was detected or you have already sent this form. Please check the box or refresh this page & try again.</p>';
            $status = "false";


        } else {
            require_once('phpmailer/class.phpmailer.php');
            require_once('phpmailer/class.smtp.php');

            $mail = new PHPMailer();


            //$mail->SMTPDebug = 3; // Enable verbose debug output
            /*$mail->isSMTP();                // Set mailer to use SMTP
            $mail->Host = 'my hostname';      // Specify main and backup SMTP servers
            $mail->SMTPAuth = true;           // Enable SMTP authentication
            $mail->Username = 'my username';  // SMTP username
            $mail->Password = 'my password';  // SMTP password
            $mail->SMTPSecure = 'ssl';        // Enable TLS encryption, `ssl` also accepted
            $mail->Port = 465;                // TCP port to connect to*/


            if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
                if( $_POST['form_name'] != '' AND $_POST['form_email'] != '' ) {

                    $name = $_POST['form_name'];
                    $email = $_POST['form_email'];
                    $message = $_POST['form_message'];

                    $subject = 'New Message | Contact Form';

                    $botcheck = $_POST['form_botcheck'];

                    $toemail = 'my email address'; // Your Email Address
                    $toname = 'my name'; // Your Name

                    if( $botcheck == '' ) {

                        $mail->SetFrom( $email , $name );
                        $mail->AddReplyTo( $email , $name );
                        $mail->AddAddress( $toemail , $toname );
                        $mail->Subject = $subject;

                        $name = isset($name) ? "Name: $name<br><br>" : '';
                        $email = isset($email) ? "Email: $email<br><br>" : '';
                        $message = isset($message) ? "Message: $message<br><br>" : '';

                        $referrer = $_SERVER['HTTP_REFERER'] ? '<br><br><br>This form was submitted from: ' . $_SERVER['HTTP_REFERER'] : '';

                        $body = "$name $email $message $referrer";

                        $mail->MsgHTML( $body );
                        $sendEmail = $mail->Send();

                        if( $sendEmail == true ):
                            $message = '<p align="justify"><strong>Success!</strong> We have received your message and will get back to you as soon as possible.</p>';
                            $status = "true";
                        else:
                            $message = '<p align="justify"><strong>Attention!</strong> Your message could not be sent due to an unexpected error. Please try again later.<br /><br /><strong>Reason:</strong><br />' . $mail->ErrorInfo . '</p>';
                            $status = "false";
                        endif;
                    } else {
                        $message = '<p align="justify"><strong>Bot Detected!</strong> Your efforts are futile!</p>';
                        $status = "false";
                    }
                } else {
                    $message = '<p align="justify"><strong>Warning!</strong> Please complete all the fields and try again.</p>';
                    $status = "false";
                }
            } else {
                $message = '<p align="justify"><strong>Unexpected Error!</strong> Please try again later.</p>';
                $status = "false";
            }
        }
        $status_array = array( 'message' => $message, 'status' => $status);
        echo json_encode($status_array);
    }
    ?>

此外,这是在表单结束后在html页面上运行的验证脚本。

<script>
                           $("#contact_form").validate({
                             submitHandler: function(form) {
                               var form_btn = $(form).find('button[type="submit"]');
                               var form_result_div = '#form-result';
                               $(form_result_div).remove();
                               form_btn.before('<div id="form-result" class="alert alert-success" role="alert" style="display: none;"></div>');
                               var form_btn_old_msg = form_btn.html();
                               form_btn.html(form_btn.prop('disabled', true).data("loading-text"));
                               $(form).ajaxSubmit({
                                 dataType:  'json',
                                 success: function(data) {
                                   if( data.status === 'true' ) {
                                     $(form).find('.form-control').val('');
                                   }
                                   form_btn.prop('disabled', false).html(form_btn_old_msg);
                                   $(form_result_div).html(data.message).fadeIn('slow');
                                   setTimeout(function(){ $(form_result_div).fadeOut('slow') }, 8000);
                                 }
                               });
                             }
                           });
                        </script>

0 个答案:

没有答案