PHP表单数据验证不起作用

时间:2016-11-23 18:11:00

标签: php

您好我在写入数据库之前尝试使用数据验证表单。但我不确定为什么数据验证不起作用。以下是我的代码

filename:bookoffer.php     

$NameErr = $EmailErr = $DescriptionErr = ""; 
//$Name = $Email = $Description;

        if (isset($_POST['Submit']))
            {        
       $errors = array();
            if (empty($_POST['Name']))
                {
                $NameErr = "**Name is required**";
                }
                else
                    {
                        $Name = ($_POST['Name']);
                        //check if name only contain letter and white space
                        if (!preg_match("/^[a-zA-Z ]*$/",$Name))
                            {
                            $NameErr = "**Only letters and white space allowed**";
                            }
                    }



        if (empty($_POST['Email']))
        {
            $EmailErr = "**Email is required**";
        }
        else
            {
                $Email = ($_POST['Email']);;
                //check if e-mail address is well-formed
                if (!filter_var($Email, FILTER_VALIDATE_EMAIL))
                    {
                    $EmailErr = "**Invalid email format**";
                    }
            }


        if (empty($_POST['Description']))
        {
            $Description = "**Description is required**";
        }
        else
            {
            $Description = ($_POST['Description']);
            }

     }  
    //if(count($errors)==0)

        include 'database_connect.php';  //make database connection

        $Name = $_POST['Name'];
        $Email = $_POST['Email'];
        $Description = $_POST['Description'];      

        $sql = "INSERT INTO books_offer (Name, Email, Description) values ('$Name', '$Email', '$Description')";
        $redirect = true;
        header('Location: Thank_you.php');        
        mysqli_query($conn, $sql) or die (mysqli_error($conn));
        mysqli_close($conn);

?>

这是html文件,它正在调用bookoffer.php

<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>

    <body>

        <h2>Please Offer Your Book</h2>
        <form id="bookoffer" method="post" action="bookoffer.php" > 
        <p><span class="error"> <font color="red">*required field.</font></span></p>

            Name<font color="red">*</font> <input type="text" name="Name" >
            <span class="error"> <?php echo $NameErr;?></span>
            <br></br>

            Email<font color="red">*</font> <input type="text" name="Email" >
            <span class="error"> <?php echo $EmailErr;?></span>
            <br></br>

            Description<font color="red">*</font><textarea name ="Description" rows="5" cols="40" ></textarea>
            <span class="error"> <?php echo $DescriptionErr;?></span>
            <br></br>
                <input type="submit" name="submit_form" value="Submit" /> 
        </form>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

您没有填充$errors数组,因此您注释掉的if语句将始终为true。您将错误存储在单个变量中。一种选择是改变

$errors = array();

$errors = false;

然后,当您设置错误变量时,为每个变量添加一行以将$errors设置为true,例如,

if (empty($_POST['Name']))
{
   $NameErr = "**Name is required**";
   $errors = true; // this line added
}

您现在可以将注释掉的if语句更新为

if ($errors) {
相关问题