我正在建立一个包含登录页面的网站.我需要在用户成功登录后将用户重定向到他们的个人资料页面,但我不知道如何在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(),以及其他答案在此时遗漏的一些潜在错误.
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)
header 不适用于所有人
使用以下简单代码
<?php
echo "<script> location.href='new_url'; </script>";
exit;
?>
Run Code Online (Sandbox Code Playgroud)
假设您使用 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)