0

我有一个提交给自身的表格。如果设置了 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>
4

2 回答 2

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");
    }
} 

?>
于 2013-01-23T16:12:04.677 回答
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)

还可以在调用 header 之前查看您是否正在打印一些东西或一些 html。

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

于 2013-01-23T16:37:13.370 回答