提交失败后如何保持表格输入

时间:2019-04-03 00:03:49

标签: php html css ajax

我对编码还很陌生,我正在使用PHP建立联系表格。我已包括必须检查的reCaptcha。如果用户填写表格,然后按提交按钮,而不检查reCaptcha。 表单将重置,用户将不得不再次填写所有内容。

当未选中reCaptcha并提交表单时,如何保留输入?

我在这里发现要使用htmlspecialchars。确实可以通过替换html字符来工作,但是如果用户使用引号或<>,则用户仍然必须再次填写。

关于XSS或SQL注入安全措施或可能使用AJAX的任何建议都很棒。

\par

这是我拥有PHP的方式

<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>
    ```            

   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>';

1 个答案:

答案 0 :(得分:1)

首先,您可以在表单提交过程中在javascript方面进行一些基本的表单有效性测试。例如,如果必填字段为空白,则可以return false;-这将停止提交过程并将控制权返回给用户。

专门针对Google Recaptcha,Google在检查表单时添加了一个回调选项。 See this answer了解实施方法。

但是,更安全的字段验证必须在PHP方面进行(精明的用户使用DevTools可以伪造javascript验证并提交表单)。如果任何字段都无法通过PHP验证,则只有一个选择:将表单数据发送回页面并重建用户输入。

Here is an example(在javascript端进行简单表单验证),供您参考。

参考文献:

Add a callback to Google recaptcha to check if user checked the box

MDN article on form validation - note the SmashingMagazine links at bottom

TutorialsPoint - more concise example of the same

Video tutorial of same (30 min)

Javascript - check if Google Recaptcha was clicked