使用php中的头重定向


redirect using header in php

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

我从一篇文档中读到,"在发送任何实际输出之前,必须调用标头"。这指的是什么样的输出?我想我没有输出任何东西。这是我的密码。提前谢谢。

<?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>

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

你的代码中有两个问题会阻止你的标题更改重定向:

require "index-header.html";

<div class="display">

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

正如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">';
....
?>
在发送任何实际输出之前,必须调用

标头。

但是,在这里,<div>是一个输入,并且您需要index-header.html,所以标头位置不起作用。

您可以使用JS:

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