在php中使用标头重定向

时间:2015-02-17 15:29:19

标签: php html

我不明白我的代码中的问题。如果用户名和密码正确,我正在尝试重定向用户。

我从文档中读到“在发送任何实际输出之前必须调用标头”。这是指什么样的输出?我不认为我输出任何东西。 这是我的代码。提前谢谢。

<?php
require "index-header.html";
?>

<div class="display">
    <?php 
    if(isset($_POST["logout"])) {
        session_unset();
        session_destroy();
    }

    if(isset($_POST["login"])) {
        $name = $_POST["name"];
        $password = $_POST["password"];

        // connect to database
        $db = connect();

        $query = "SELECT admin_name, admin_password FROM login WHERE admin_name = :name AND admin_password = :password";
        $login = $db->prepare($query);
        $login->execute(array(
            ":name" => $name,
            ":password" => $password
        ));

        if($login->rowCount()) {
            // start session
            $_SESSION["admin"] = "Laura";
            header("Location:admin.php");
            exit;
        }
        else {
            echo "<p class='message'>Incorrect username or password</p><br>";
            require "login-form.html";
        }
    }
    else {
        require "login-form.html";
    }
    ?>
</div>

4 个答案:

答案 0 :(得分:3)

输出表示在浏览器中输出的任何HTML / CSS / JavaScript(或其他数据)。

您的代码中存在两个问题,可能会导致标题更改无法重定向:

require "index-header.html";

<div class="display">

对此基本术语的更好解释是只能在任何输出开始之前修改标题。每次访问网页时,标题都会在正文之前发送。标题可以提供字符集,响应代码(如404)或重定向信息等信息。如果您需要显示阿拉伯字符而不是英语,该怎么办?标题需要让浏览器知道如何处理传入的主体(或者你如何引用它:输出)。

答案 1 :(得分:2)

如rick6所述,在重定向之前,您无法使用HTML。 您可以在需要之前移动登录检查

<?php
/* check login */
// if admin redirect
// else
// $message = "<p class='message'>Incorrect username or password</p><br>";

require "index-header.html";
echo '<div class="display">';
....
?>

答案 2 :(得分:1)

必须在发送任何实际输出之前调用

标头。

但是,在这里,<div>是一个输入,您需要index-header.html,因此标题位置不起作用。

你可以使用JS:

    function nextpage() {
        document.location.href='nextpage.php';
    }
    nextpage();

答案 3 :(得分:0)

在页面的第一行写下ob_start它将清除标题,并且不会显示以前的标题消息。 。 。

<?php
    ob_start();
?>