PHP Web窗体错误显示

时间:2011-11-12 18:44:16

标签: php html forms submit

我是一个PHP新手。我有一个Web表单的以下代码。它工作正常,但我想做以下事情:

  1. 将错误作为数组(?)返回,这样我就可以在每个输入下将错误显示为单独的行。
    1. 禁止表单两次提交。
    2. 非常感谢任何帮助。

      <form id="form1"  method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
      <fieldset>
      <legend>Contact Me</legend> 
      <?php 
      
      
          if (isset($_POST['Submit'])) {  
      
              if ($_POST['firstname'] != "") {  
                  $_POST['firstname'] = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);  
                  if ($_POST['firstname'] == "") {  
                      $errors .= 'Please enter a valid first name.<br/><br/>';  
                  }  
              } else {  
                  $errors .= 'Please enter your first name.<br/>';  
              }
      
                 if ($_POST['lastname'] != "") {  
                  $_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);  
                  if ($_POST['lastname'] == "") {  
                      $errors .= 'Please enter a valid last name.<br/><br/>';  
                  }  
              } else {  
                  $errors .= 'Please enter your last name.<br/>';  
              }  
      
              if ($_POST['email'] != "") {  
                  $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);  
                  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {  
                      $errors .= "$email is <strong>NOT</strong> a valid email address.<br/><br/>";  
                  }  
              } else {  
                  $errors .= 'Please enter your email address.<br/>';  
              }  
      
      
              if ($_POST['message'] != "") {  
                  $_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);  
                  if ($_POST['message'] == "") {  
                      $errors .= 'Please enter a message to send.<br/>';  
                  }  
              } else {  
                  $errors .= 'Please enter a message to send.<br/>';  
              }  
      
              if (!$errors) {  
                  $mail_to = '***@****.com';  
                  $subject = 'New Mail from Web Site';  
                  $message  = 'From: ' . $_POST['firstname'] . " " .  $_POST['lastname'] . "\n";  
                  $message .= 'Email: ' . $_POST['email'] . "\n";                   
                  $message .= "Message:\n" . $_POST['message'] . "\n\n";  
                  mail($mail_to, $subject, $message);  
      
                  echo "<p>Thank you for your email!<br/><br/></p>";  
              } else {  
                  echo '<div style="color: #00CC00">' . $errors . '<br/></div>';  
              }  
          }
      
      ?>  
      
      <label>First Name:</label>   
      <input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" size="50" />
      
      <label>Last Name:</label>  
      <input type="text" name="lastname" value="<?php echo $_POST['lastname']; ?>" size="50" />    
      <label>Email Address:</label>  
      <input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/>    
      <label>Message:</label>  
      <textarea name="message" rows="5" cols="50"><?php echo $_POST['message']; ?></textarea>  
      <br/>  
      <input type="submit" class="moveright" name="Submit" value="Submit" /> 
      </fieldset> 
      </form> 
      

3 个答案:

答案 0 :(得分:2)

您可以使用数组来表示错误,而不是将它们连接成一个字符串。然后,您可以检查指定表单输入中的每个错误。

样本错误检查

// instead of: $errors .= 'Please enter a message to send.<br/>';
if ($_POST['message'] == "")
    $errors['message'] = 'Please enter a message to send.<br/>';

示例错误显示

<label>Message:</label>
<?php if ($errors['message'] != "") echo $errors['message']; ?>
<textarea name="message" rows="5" cols="50"><?php echo $_POST['message']; ?></textarea>  

答案 1 :(得分:2)

不要将每个错误附加到字符串,而是执行以下操作:     $ errors [] ='错误文字';

编辑:正如其他人所说,在开始设置值之前初始化数组是一个好习惯,如下所示:$ errors = array();

对于不允许两次提交的表单,需要javascript。这是一个帮助链接:http://www.webmasterworld.com/forum91/3781.htm

答案 2 :(得分:1)

要将错误转换为数组,请在表单处理之前将其初始化为:

$errors = array();
if (isset($_POST['Submit'])) {  
...

每次出现错误,而不是将其与.=连接时,请使用[]数组附加语法:

$errors[] = 'Please enter a message to send.'; 

为了防止表单被提交两次,我们经常使用$_SESSION中的变量来表明它已经完成。成功提交后,设置$_SESSION['success']标记。不要忘记在脚本开头初始化会话:

session_start();
$_SESSION['success'] = FALSE;
$errors = array();

// Only process the form if the session flag isn't set:
if (isset($_POST['Submit']) && !$_SESSION['success']) {  
...
// Later, on success, 
echo "<p>Thank you for your email!<br/><br/></p>";  
// Set the flag to prevent resubmission.
$_SESSION['success'] = TRUE;