php表单验证和标题位置

时间:2013-01-23 15:58:09

标签: php forms validation header

我有一张提交给自己的表格。如果设置了post变量,那么我希望将它们重定向到 employee_profile.php 。目前,即使设置了post变量,标题位置也不起作用。有任何想法吗?

<?php 
    $email_error = $password_error = "";
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["email"])) {
            $email_error = "Missing Email";
        } else {
            $email = $_POST["email"];
        }

        if (empty($_POST["password"])) {
            $password_error = "Missing Password";
        } else {        
            $email = $_POST["email"];
            $password = $_POST["password"];
            header ('Location: employee_profile.php');
        }
    }  
?>

表格:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
  Email: <input type="text" name="email" value="<?php echo htmlspecialchars($email);?>">
  <span class="error"><?php echo $email_error;?></span><br />
  Password: <input type="password" name="password">
  <span class="error"><?php echo $password_error;?></span><br />
  <input type="submit" value="Submit">
</form>

2 个答案:

答案 0 :(得分:1)

PHP标头(使用HTTP / 1.1)重定向需要绝对URL。

尝试以下方法:

<?php 

// from PHP documentation, see http://php.net/manual/de/function.header.php
$host = $_SERVER['HTTP_HOST'];
// or:
// $host = $_SERVER['SERVER_NAME'];

$email_error = $password_error = "";

if($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST["email"])) {
        $email_error = "Missing Email";
    } else {
        $email = $_POST["email"];
    }

    if(empty($_POST["password"])) {
        $password_error = "Missing Password";
    } else {        
        $password = $_POST["password"];
    }

    // some additional fixes: finally check if both is valid
    if($email_error == $password_error) {
        header("Location: http://$host/employee_profile.php");
    }
} 

?>

答案 1 :(得分:0)

你可以试试这样的事情。即使在未设置电子邮件但设置了密码的情况下,当前在您的脚本中,也会调用标题函数。

$email = (isset($_POST['email']) && !empty($_POST['email'])) ? $_POST['email'] : "Missing Email";
$password = (isset($_POST['password']) && !empty($_POST['password'])) ? $_POST['password']   : "Missing Password";

if($email != "Missing Email" && $password != "Missing Password"){
    header ('Location: employee_profile.php');
}

(警告:此处作为电子邮件和密码传递的任何值都将使用户获得employee_profile)

在调用标题之前,还要查看是否要打印一些东西或一些htmls。

是否会抛出任何错误,如果是这样,您还可以在此处打印错误吗?