如何使用 PHP 重定向到另一个页面

php
2022-08-30 09:19:31

我正在建立一个包含登录页面的网站。一旦用户成功登录,我需要将用户重定向到他们的个人资料页面,但我不知道如何在PHP中执行此操作(这是我的第一个站点)。

我已经搜索了互联网,并被告知该功能应该可以解决问题,但是只有在我没有在使用它之前输出任何信息的情况下,它才会起作用。header()

这就是问题所在。我已经输出了一堆信息(包括构建登录页面本身的HTML)。

那么如何将用户从一个页面重定向到下一个页面呢?

我有哪些选择?此外,在这些情况下,最佳做法是什么?


编辑:这是我的整个页面:login.php

<?php 

session_start(); 

echo "<!DOCTYPE html> 
  <html> 
     <head> 
        <meta charset='utf-8'> 
        <title>Sprout</title>
    <link rel='stylesheet' href='stylesheet.css' type='text/css'>
     </head>
 <body>
    <div class='box'>
    <form action='login.php' method='post'>
       Name<br /> <input type='text' name='username' class='form'/><br />
       Password<br /> <input type='password' name='password' class='form'/>
       <input type='submit' value='Login' class='button' />
    </form>
    </div>
 </body>
  </html>";

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $username = $_POST["username"];
    $password = $_POST["password"];

    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "root";

    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");

    $dbname = "database";

    mysql_select_db($dbname);

    $query = "SELECT username FROM users WHERE username = '$username' AND password = '$password'";

    $result = mysql_query($query) or die ("Failed Query of " . $query);


    while($row = mysql_fetch_assoc($result))
    {
            $_SESSION["user"] = $username;
    }
}
?>

答案 1

您可以使用类似于以下内容的函数:

function redirect($url) {
    ob_start();
    header('Location: '.$url);
    ob_end_flush();
    die();
}

值得注意的是,您应该始终在函数的开头使用其中一个或,并且应始终在函数后面加上 or 函数以防止进一步执行代码。ob_flush()ob_start()header('location: ...');die()exit()

这里有一个比任何其他答案都提到的更详细的指南:http://www.exchangecore.com/blog/how-redirect-using-php/

本指南包括在重定向中使用 / 函数的原因,以及何时使用 vs ,以及其他答案此时遗漏的一些潜在错误。die()exit()ob_flush()ob_start()


答案 2

这就是问题所在。我已经输出了一堆信息(包括构建登录页面本身的HTML)。那么如何将用户从一个页面重定向到下一个页面呢?

这意味着您的应用程序设计非常糟糕。不应在业务逻辑运行时执行输出。使用模板引擎(如 Smarty)或使用输出缓冲快速修复它)。

另一种选择(虽然不是一个好的!)是输出JavaScript进行重定向:

<script type="text/javascript">location.href = 'newurl';</script>

推荐