【问题标题】:PHP Web Form Error DisplayPHP Web 表单错误显示
【发布时间】:2014-02-14 22:57:57
【问题描述】:

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

  1. 以数组 (?) 的形式返回错误,以便我可以在每个输入下将错误显示为单独的行。

  1. 禁止表单提交两次。

任何帮助将不胜感激。

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

【问题讨论】:

    标签: php html forms submit


    【解决方案1】:

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

    示例错误检查

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

    【讨论】:

    • 迈克尔 是对的。错误消息应该在开始时初始化,因为它们无论如何都是静态的。
    • 感谢所有回答的人。我从你们每个人那里得到了我需要的一切。再次感谢。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。如何将 else echo error[] 从显示在表单上方移动并在各自的行中显示。我知道如何制作错误 div 以显示错误,但不知道如何将“else”附加到每个错误。 (我希望这是有道理的。)
    【解决方案3】:

    要将您的错误放入数组中,请在表单处理之前将其初始化为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 2014-04-23
      • 1970-01-01
      相关资源
      最近更新 更多