出现验证错误时,似乎无法让表单输入保持不变[重复]

Posted

技术标签:

【中文标题】出现验证错误时,似乎无法让表单输入保持不变[重复]【英文标题】:Can't seem to get form input to stay when there's a validation error [duplicate] 【发布时间】:2019-08-16 16:32:08 【问题描述】:

我刚刚经历了这个Traversy Media php crashcourse thing 并试图将它实施到我自己的项目中。现在,我基本上是在验证数据,当我点击提交时,输入到字段中的所有信息都会重置并变为空白。在链接的视频中,他谈到了使用 html 中的值来解决问题,到目前为止,它有效。唯一的问题是文本区域总是空白。我不知道为什么它适用于其他所有东西,但不适用于那个特定元素。我错过了什么?

<?php 
  // Message Vars
  $msg = '';
  $msgClass = '';
  // Check for Submit
  if(filter_has_var(INPUT_POST, 'submit'))
    //  get form data
    $name = htmlspecialchars($_POST['name']);
    $cname = htmlspecialchars($_POST['cname']);
    $email = htmlspecialchars($_POST['email']);
    $message = htmlspecialchars($_POST['message']);

    // check required fields
    if(!empty($email) && !empty($name) && !empty($message))
        // passed
        //check emails
        if(filter_var($email, FILTER_VALIDATE_EMAIL)=== false)
          // failed 
          $msg = 'Please use a valid email';
          $msgClass = 'error-fail'; 
         else 
          //Passed
          echo'passed';
        
       else 
        // Fail
        $msg = 'Please fill in all the required fields';
        $msgClass = 'error-fail'; 
      
  
?> 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Ravenfell</title>
    <link rel="stylesheet" href="./css/main.css" />
    <link rel="stylesheet" href="./css/contact.css" />
  </head>
  <body>
  <section id="sec5" class="lt-bg dk-txt desktop tablet">
      <div class="content-wrapper flex-container">
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" class="form-container">
          <div class="form-head">
            <h2>Connect with us</h2>
            <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem, expedita.</p>
          </div>
          <!-- Fullname -->
          <p class="col1">Full Name:</p>
          <input type="text" name="name" placeholder="Your Name" class="col2" value="<?php echo isset($_POST['name']) ? $name : ''; ?>">
          <!-- Company Name -->
          <p class="col1">Company Name <span class="optional">(optional)</span>:</p>
          <input type="text" placeholder="Company Name" name="cname" class="col2" value="<?php echo isset($_POST['cname']) ? $cname : ''; ?>">
          <!-- email -->
          <p class="col1">Email:</p>
          <input type="email" name="email" placeholder="example@company.com" class="col2" value="<?php echo isset($_POST['email']) ? $email : ''; ?>">
          <!-- Message -->
          <p class="col1">Message:</p>
          <textarea name="message" cols="30" rows="10" placeholder="Message" value="<?php echo isset($_POST['message']) ? $message : ''; ?>"></textarea>
          <!-- Button and Errors -->
          <?php if($msg != ''): ?>
            <div class="alert <?php echo $msgClass ?>"><?php echo $msg ?></div>
          <?php endif; ?>
          <button type="submit" name="submit" class="submit-btn">Submit &#8594;</button>
        </form>
      </div>
    </section>
  </body>
</html>

【问题讨论】:

“我错过了什么?” - textarea 没有 value 属性。 将您的文本区域更改为&lt;textarea name="message" cols="30" rows="10" placeholder="Message"&gt;&lt;?php echo isset($_POST['message']) ? $message : ''; ?&gt;&lt;/textarea&gt; 【参考方案1】:

textarea 没有价值。将您的文本区域更改如下:

<textarea name="message" cols="30" rows="10" placeholder="Message"><?php echo isset($_POST['message']) ? $message : ''; ?></textarea>

【讨论】:

对!我没有意识到这一点。解决了这个问题。谢谢!

以上是关于出现验证错误时,似乎无法让表单输入保持不变[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单:无法显示验证错误

用于数据输入的表单集尝试创建重复记录导致错误

输入空时jQuery文本输入实时验证清除错误[重复]

CodeIgniter 表单验证,无法获取验证错误

apache在发布请求时返回403错误,输入变量计数保持不变,值发生变化

AngularJS无法将表单输入输入指令