Как сохранить форму ввода после неудачной отправки - PullRequest
0 голосов
/ 03 апреля 2019

Я довольно новичок в кодировании, и я строю контактную форму, используя PHP. Я включил reCaptcha, который должен быть проверен. Если пользователь заполняет форму и нажимает кнопку отправки, не проверяя reCaptcha. Форма сбрасывается, и пользователь должен будет заполнить все заново.

Как сохранить ввод, если reCaptcha не проверен и форма отправлена?

Я нашел здесь, чтобы использовать htmlspecialchars. Он работает, заменяя символы html, но пользователю все равно придется заполнять его снова, если они используют кавычки или <>.

Любой совет будет полезен в отношении мер безопасности XSS или SQL или, возможно, использования AJAX.

<label for="message"> Message:</label>
<textarea class="form-control" type="textarea" id="message" 
name="message" maxlength="6000" rows="5" value="<?php echo 
htmlspecialchars($message); ?>" required ></textarea>

Вот как у меня есть PHP

    ```            

   if(filter_has_var(INPUT_POST, 'submit')) 
    {



  $name = htmlspecialchars($_POST['name']);
  $email = htmlspecialchars($_POST['email']);
  $message = htmlspecialchars($_POST['message']);
  $phone = $_POST['phone'];



  $mail = new PHPMailer;

                                                            // Enable verbose debug output

 $mail->isSMTP();    // Set mailer to use SMTP
  $mail->SMTPDebug = 0; 
 $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;    // Enable SMTP authentication
 $mail->Username = EMAIL;                 // SMTP username
  $mail->Password = PASS;         // SMTP password
 $mail->SMTPSecure = 'tls';    // Enable TLS encryption, `ssl` also accepted
 $mail->Port = 587;    // TCP port to connect to

  $mail->setFrom($email, $name);
  $mail->addAddress('mail.com', 'Joe User');     // Add a recipient
 // Name is optional
   $mail->addReplyTo($email);   // Optional name
    $mail->isHTML(true);       // Set email format to HTML

   $mail->Subject = 'Client Contact Email';
    $mail->Body    = '<h2>Contact Request</h2>
                     <h4>Name</h4><p>'.$name.'</p>
                     <h4>Email</h4><p>'.$email.'</p>
                     <h4>Message</h4><p>'.$message.'</p>
                      <h4>Phone</h4><p>'.$phone.'</p>';

if ($decgoogresp->success == true)
 {
 // Success
   if(!$mail->send())
 {
       $msg = 'Message could not be sent.';
        $msgClass = 'Mailer Error: ' . $mail->ErrorInfo;
        } else {
             $msg = 'Your email has been sent';
              $msgClass = 'alert-success';
            }
            } else {
               $msg = "Please check the Captcha";
               $msgClass = 'alert-danger'; 
                   }
    }



1 Ответ

1 голос
/ 03 апреля 2019

Во-первых, вы можете провести некоторое базовое тестирование правильности формы на стороне javascript во время процесса отправки формы. Если, например, обязательное поле не заполнено, вы можете return false; - что остановит процесс отправки и вернет управление пользователю.

Специально для Google Recaptcha, Google добавил опцию обратного вызова, когда форма была проверена. См. Этот ответ о том, как реализовать.

Тем не менее, более безопасные проверки полей должны выполняться на стороне PHP (опытный пользователь с помощью DevTools может подделать проверки javascript и получить форму для отправки). Если какие-либо поля не проходят проверку на стороне PHP, есть только один вариант: отправить данные формы обратно на страницу и восстановить ввод пользователя.

Вот пример простой проверки формы на стороне javascript, для вашей справки.

Ссылки

Добавить обратный вызов в Google recaptcha, чтобы проверить, если пользователь установил флажок

Статья MDN о проверке формы - обратите внимание на ссылки SmashingMagazine внизу

TutorialsPoint - более лаконичный пример того же

Видеоурок того же самого (30 минут)

Javascript - проверить, была ли нажата Google Recaptcha

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...