PHP 重定向在登录页面上不起作用
PHP redirection not working on login page
我创建了一个 login.php 页面并使用 php 代码检查数据库中的凭据。如果输入的凭据不正确,它会显示错误(这很完美)。但如果输入的凭据正确,它不会重定向到 index.php 页面。
请检查login.php的php代码:
<?php
if (isset($_POST['submit'])){
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysql_query($query)or die(mysql_error());
$num_row = mysql_num_rows($result);
$row=mysql_fetch_array($result);
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
header('location:index.php');
}
else{ ?>
<div class="alert alert-danger">Access Denied</div>
<?php
}
}
?>
Kindle 参考错误截图:
我认为数据库中的 user_id 没有正确分配给 $_SESSION['id']。如果有人可以指导解决这些错误,我将不胜感激。
提前致谢。
如果您收到 "headers already sent" 错误,则重定向将不起作用。
尝试像下面这样更改您的代码,
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';
}
尝试将代码更改为如下所示(注意 $_SESSION 在 header() 之前):
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
header('location:index.php');
}
错误消息准确地说明了问题所在:在给定 php 文件的给定行,已经生成了输出。开始输出后,不能再设置headers,因为它们必须在任何文档数据之前设置。
为了解决问题,请检查给定行产生的输出。您也许可以将其删除。如果没有,您可以使用缓冲。如果直接输出到缓冲区,则可以随时添加 headers。
检查 http://php.net/manual/en/function.ob-start.php 以了解如何使用缓冲。这很简单:您只需在开始时将其打开,然后在完成后刷新缓冲区。
请注意,session id 不会自动附加到 header() 中的 URL。您将必须手动执行此操作。另请注意,根据 RFC,URL 实际上需要是绝对的(尽管相对 URL 通常会起作用)。所以使用:
header("Location: ". $_SERVER['HTTP_HOST'] ."/index.php?". SID);
有关详细信息,另请参阅 http://php.net/manual/en/session.idpassing.php and http://php.net/manual/en/session.constants.php。
我创建了一个 login.php 页面并使用 php 代码检查数据库中的凭据。如果输入的凭据不正确,它会显示错误(这很完美)。但如果输入的凭据正确,它不会重定向到 index.php 页面。
请检查login.php的php代码:
<?php
if (isset($_POST['submit'])){
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysql_query($query)or die(mysql_error());
$num_row = mysql_num_rows($result);
$row=mysql_fetch_array($result);
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
header('location:index.php');
}
else{ ?>
<div class="alert alert-danger">Access Denied</div>
<?php
}
}
?>
Kindle 参考错误截图:
我认为数据库中的 user_id 没有正确分配给 $_SESSION['id']。如果有人可以指导解决这些错误,我将不胜感激。
提前致谢。
如果您收到 "headers already sent" 错误,则重定向将不起作用。 尝试像下面这样更改您的代码,
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';
}
尝试将代码更改为如下所示(注意 $_SESSION 在 header() 之前):
if( $num_row > 0 ) {
$_SESSION['id']=$row['user_id'];
header('location:index.php');
}
错误消息准确地说明了问题所在:在给定 php 文件的给定行,已经生成了输出。开始输出后,不能再设置headers,因为它们必须在任何文档数据之前设置。
为了解决问题,请检查给定行产生的输出。您也许可以将其删除。如果没有,您可以使用缓冲。如果直接输出到缓冲区,则可以随时添加 headers。
检查 http://php.net/manual/en/function.ob-start.php 以了解如何使用缓冲。这很简单:您只需在开始时将其打开,然后在完成后刷新缓冲区。
请注意,session id 不会自动附加到 header() 中的 URL。您将必须手动执行此操作。另请注意,根据 RFC,URL 实际上需要是绝对的(尽管相对 URL 通常会起作用)。所以使用:
header("Location: ". $_SERVER['HTTP_HOST'] ."/index.php?". SID);
有关详细信息,另请参阅 http://php.net/manual/en/session.idpassing.php and http://php.net/manual/en/session.constants.php。