Как сбросить окно ReCaptcha при успешной отправке формы - PullRequest
0 голосов
/ 21 мая 2018

У меня есть форма на моем сайте, которая использует 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>
...