我的PHP服务器端验证代码有问题

时间:2011-02-20 22:12:43

标签: php mysql validation server-side

我在register.php文件中有一个表单,它发布到registerPost.php。在registerPost.php中,我检查了一些验证规则,然后如果其中任何一个被标记,我将返回第一页并打印错误。从理论上讲,这应该有效。但即使我把所有内容都留空,验证也没有问题。

以下是相关代码:

        $_SESSION["a"] = "";
        $_SESSION["b"] = "";
        $_SESSION["c"] = "";
        $_SESSION["d"] = "";
        $_SESSION["e"] = "";
        $_SESSION["f"] = "";
        $_SESSION["g"] = "";
        if(empty($userEmail))
            {
                $_SESSION["a"] = "You must enter your email.";
            }
        if(!validEmail($userEmail))
            {
                $_SESSION["a"] = "Improper Email Format";
            }
        if(empty($password))
            {
                $_SESSION["b"] = "You must enter a password.";
            }
        if(strlen($password) < 5 || strlen($password) > 0)
            {
                $_SESSION["b"] = "Password must be at least 5 characters.";
            }
        if($password != $confPassword)
            {
                $_SESSION["c"] = "Passwords do not match";
            }
        if(empty($firstName))
            {
                $_SESSION["d"] = "First Name Required";
            }
        if(empty($lastName))
            {
                $_SESSION["e"] = "Last Name Required";
            }
        if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE email = '$email'")) > 0)
            {
                $_SESSION["f"] = "This email address already exists in our database.";
            }

        if(!empty($_SESSION["a"]) || !empty($_SESSION["b"]) || !empty($_SESSION["c"]) || !empty($_SESSION["d"]) || !empty($_SESSION["e"]) || !empty($_SESSION["f"]))
            {
                header('Location: register.php');
            }

也许有一种更简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:4)

我喜欢这种注册所有错误的方式:

$errors = array();

if (empty($foo1))
  $errors[] = "foo1 can't be left blank!";
else if (!preg_match(' ... ', $foo1))
  $errors[] = "foo1 was not filled out correctly!";

if (empty($foo2))
  $errors[] = "foo2 can't be left blank!";

// ...

if (empty($errors)) {
  // do what you need
} else {
  // notify the user of the problems detected
}

您真的需要按标题更改页面吗?

答案 1 :(得分:1)

我尝试了你的代码,它对我有用。 从$ username,$ email等猜测,我认为你正在对$ _POST数据做一些消毒。如果是这样,您应该转储$ username等,以查看该过程是否在这些变量中添加了某些内容。

无论如何,我更喜欢这种验证方式:

$errors = array();
if(empty($username))
{
    $errors['username'] = 'Username cannot be empty!';
}
...
$_SESSION['errors'] = $errors;
if(count($errors) > 0) //Redirect...