使用PHP进行表单验证的问题

时间:2015-04-15 12:57:31

标签: php html forms validation

我的网站上有一个简单的表单,我需要进行服务器端验证。如果用户输入的数据不正确或将字段留空,则应重新向用户显示表单,并将其提交的数据预填充到字段中。

我的表单代码如下所示

<!--Contact form-->
        <form name="contactform" action="validate.php" method="post">
            Name: 
            <input type="text" name="name" value=""><br>
            <span class="error">* <?php echo $nameError; ?></span><br>

            Email: 
            <input type="text" name="email" value="">
            <span class="error">* <?php echo $emailError; ?></span><br>

            Category:
            <select name="category">
                <option value="" disabled selected>Select</option>
                <option value="shipping">Sales</option>
                <option value="returns">Returns</option>
                <option value="shipping">Shipping</option>
                <option value="other">Other</option>
            </select><br>

            <textarea rows="10" cols="40" name="message" placeholder = "Send us a message"></textarea><br>
            <input type="submit" name="submit" value="Submit" onclick="validate()">

        </form>

目前,我要进行的所有测试都是名称和电子邮件字段。我的问题是,当我加载页面时,我立即得到错误说&#34;注意:未定义的变量:nameError&#34;这与代码中的这些行有关

<span class="error">* <?php echo $nameError; ?></span><br>  
<span class="error">* <?php echo $emailError; ?></span><br>

但是我知道验证工作正常,因为我在我的validate.php文件中放置了echo语句来测试它。如果我提交的表格中包含不正确或正确的数据,我将转到一个空白的validate.php页面,该页面只显示echo语句

这是我的validate.php代码     

## Initialise varialbes to null ##
$nameError ="";
$emailError ="";
$categoryError ="";
$messageError ="";

$name = $_POST['name'];

## On submitting form below function will execute ##
if(isset($_POST['submit'])){
if (empty($_POST["name"])) {
    $nameError = "Name is required";
    echo "name required";
    echo " ";
} else {
    //$name = test_input($_POST["name"]);
    //check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
        $nameError ="Only letters and white space allowed";
        echo "Invalid name";
    }
}

if(empty($_POST["email"])) {
    $emailError = "Email is required";
    echo "email required";
} else {
    //$email = test_input($_POST["email"]);
    //check if email syntax is valid or not
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]/", $email)) {
        $emailError = "You did not enter a vaild email";
        echo "invalid email";
    }
}
}

?>

所以我知道我的验证工作正常,问题是它们没有显示在表单本身上。任何人都可以提供解决方案如何解决这个问题? 我已经包含了我在加载页面时收到的错误消息之一的图片Error message on page load

1 个答案:

答案 0 :(得分:1)

我猜你不会在初始页面调用时触发validate.php。在这种情况下,$nameError未定义。添加条件检查此变量是否已设置到表单代码中。

像这样:

if ( isset( $nameError ) ) { echo $nameError; }