PHP表单验证 - 在同一页面上显示错误

时间:2014-09-29 19:18:30

标签: php html

我有一个表单,如果没有正确填写,我想在每个输入上显示错误消息。

以下是目前的代码:

HTML:

<form id="contactForm" action="contact.php" method="post">
    <div>
        <input type="text" name="name" id="name" placeholder="Your Name" maxlength="65" tabindex="1">
        <label for="name">Name</label>
        <span class="error"><?php include 'contact.php'; echo "$nameErr";?></span>
    </div>
    <div>
        <input type="email" name="_replyto" id="email" placeholder="Your Email"  maxlength="30" tabindex="2">
        <label for="email">Email</label>
        <span class="error"><?php include 'contact.php'; echo "$emailErr";?></span>
    </div>
    <div>
        <textarea name="message" id="message" rows="10" placeholder="Your Message..." maxlength="1000" tabindex="3" ></textarea>
        <label for="message">Your Message</label>
        <span class="error"><?php include 'contact.php'; echo "$commentErr";?></span>
    </div>
    <div>
        <input type="submit" value="Send" tabindex="4">
    </div>
</form>

PHP:

<?php

// Check for form submission:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    /* The function takes one argument: a string.
    * The function returns a clean version of the string.
    * The clean version may be either an empty string or
    * just the removal of all newline characters.
    */
    function spam_scrubber($value) {

        // List of very bad values:
        $very_bad = array('to:', 'cc:', 'bcc:', 'content-type:', 'mime-version:', 'multipart-mixed:', 'content-transfer-encoding:');

        // If any of the very bad strings are in 
        // the submitted value, return an empty string:
        foreach ($very_bad as $v) {
            if (stripos($value, $v) !== false) return '';
        }

        // Replace any newline characters with spaces:
        $value = str_replace(array( "\r", "\n", "%0a", "%0d"), ' ', $value);

        // Return the value:
        return trim($value);

    } // End of spam_scrubber() function.

    // Clean the form data:
    $scrubbed = array_map('spam_scrubber', $_POST);

    $nameErr = $emailErr = $commentErr = "";
    $name = $email =  $comment =  "";

    // Form validation:

    if (empty($scrubbed['name'])){
        $nameErr = "Please tell me your name";
    }

} // End of main isset() IF.

?>

我在html中有一个包含PHP文件变量的span。如果字段未完成,则该变量用于显示错误消息。但是,如果我点击发送时没有填写任何字段,它只会转到空白页面。这个空白页面是contact.php。我希望它留在contact.html上并显示错误。

以上代码目前仅验证名称字段。

对此的任何帮助都将受到高度赞赏。

感谢。

1 个答案:

答案 0 :(得分:1)

您收到一个空白页面,因为表单正在提交。在验证完成之前,您需要阻止它提交。

在JavaScript中,使用onsubmit="return validateForm()"。如果字段有效,则使此函数返回true,否则返回false,并且在那里可以设置错误跨度的内容。

所以,

<form id="contactForm" action="contact.php" onsubmit="return validateForm()" method="post">

,您需要编写validateForm函数。

这应该是一个好的开始!