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

jas*_*ton 36 php

我正在建立一个包含登录页面的网站.我需要在用户成功登录后将用户重定向到他们的个人资料页面,但我不知道如何在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;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

Joe*_*yer 30

您可以使用类似于以下的功能:

function redirect($url) {
    ob_start();
    header('Location: '.$url);
    ob_end_flush();
    die();
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,您应该始终使用ob_flush()ob_start()header('location: ...');函数的开头使用,并且应始终使用die()exit()函数跟随它们以防止进一步执行代码.

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

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

  • 更新了上下文。 (2认同)

Thi*_*ter 24

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

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

另一种选择(虽然不是很好!)会输出JavaScript来重定向:

<script type="text/javascript">location.href = 'newurl';</script>
Run Code Online (Sandbox Code Playgroud)


小智 20

您可以有条件地重定向到php文件中的某个页面....

if (/*Condition to redirect*/){
  //You need to redirect
  header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
  exit();
 }
else{
  // do some
}
Run Code Online (Sandbox Code Playgroud)


Kir*_*ddy 8

header 不适用于所有人

使用以下简单代码

<?php
        echo "<script> location.href='new_url'; </script>";
        exit;
?>
Run Code Online (Sandbox Code Playgroud)


pt2*_*ph8 5

假设您使用 cookie 进行登录,只需在setcookie调用之后调用它即可 - 毕竟,您也必须在任何输出之前调用它。

无论如何,一般来说,您可以检查脚本开头是否存在表单的提交按钮名称,执行逻辑,然后输出内容:

if(isset($_POST['mySubmit'])) {
    // the form was submitted

    // ...
    // perform your logic

    // redirect if login was successful
    header('Location: /somewhere');
}

// output your stuff here
Run Code Online (Sandbox Code Playgroud)