我有一个使用php创建的登录页面,在我正确登录后,我遇到了将其带到管理页面的问题。我知道我使用的登录是正确的,因为我刚创建它,如果它是错的,它应该告诉我。但是,一旦我登录,整个页面就会变成空白,网址显示我仍然在登录页面而不是管理员页面。
我检查了错误日志,它显示“PHP警告:无法修改标题信息 - 已在第4行的/admin/includes/functions.php中通过(输出/admin/login.php:6开始)输出的标题”
这是错误日志所指的代码:
function redirect_to($new_location) {
header("Location: " . $new_location);
exit;
}
我不明白错误指出了什么。在我学习如何创建登录页面和管理页面之前,我已经使用过这个确切的代码,当我测试它然后在我的计算机上使用WAMP时,我没有遇到任何问题。现在我把它放在我网站的服务器上,这个错误就出现了。我不知道从哪里开始排除故障,因为如果我取出该功能,那么它根本不会重定向。任何帮助都会非常感激!!
以下是我用于登录页面的主要代码,如果有帮助的话:
<?php require_once("includes/session.php"); ?>
<?php require_once("includes/db_connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/validation_functions.php"); ?>
<?php
$username = "";
if (isset($_POST['submit'])) {
// Process the form
// validations
$required_fields = array("username", "password");
validate_presences($required_fields);
if (empty($errors)) {
// Attempt Login
$username = $_POST["username"];
$password = $_POST["password"];
$found_admin = attempt_login($username, $password);
if ($found_admin) {
// Success
// Mark user as logged in
$_SESSION["admin_id"] = $found_admin["id"];
$_SESSION["username"] = $found_admin["username"];
redirect_to("http://thehummingbirdplace.com/admin/admin.php");
} else {
// Failure
$_SESSION["message"] = "Username/password not found.";
}
}
} else {
// This is probably a GET request
} // end: if (isset($_POST['submit']))
?>
<?php $layout_contect = "admin"; ?>
<?php include("includes/layouts/header.php"); ?>
<div id="main">
<div id="navigation">
</div>
<div id="page">
<?php echo message(); ?>
<?php echo form_errors($errors); ?>
<h2>Login</h2>
<form action="login.php" method="post">
<p>Username:
<input type="text" name="username" value="<?php echo htmlentities($username); ?>" />
</p>
<p>Password:
<input type="password" name="password" value="" />
</p>
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</div>
<?php include("includes/layouts/footer.php"); ?>
答案 0 :(得分:5)
问题是,在将任何输出发送到浏览器之前应该调用头函数。
尝试使用它代替header():
echo '<meta HTTP-EQUIV="REFRESH" content="0; url='.$new_location.'">';
答案 1 :(得分:2)
您的代码正在发送空白行,符合浏览器可呈现文字的条件。
要求在>> 任何要呈现的文本之前发送标题信息,并在标题中发送重定向指令。
看看这段代码。
<?php require_once("includes/session.php"); ?>
<?php require_once("includes/db_connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/validation_functions.php"); ?>
<?php
$username = "";
if (isset($_POST['submit'])) {
// Process the form
:
{
?>
代码段的第5行有一个空行。您必须删除它才能传递标题。
请注意包含文件中的输出。如果您不确定或无法控制,请在重定向后移动require_once()调用。
答案 2 :(得分:1)
每次关闭php代码时都会传递空行并输入新行,这会导致它被认为是echo的字符串,如果你没有在其余的include文件中回显任何内容,那么这应该可行还建议添加exit();重定向后。
<?php
require_once("includes/session.php");
require_once("includes/db_connection.php");
require_once("includes/functions.php");
require_once("includes/validation_functions.php");
$username = "";
if (isset($_POST['submit'])) {
// Process the form
// validations
$required_fields = array("username", "password");
validate_presences($required_fields);
if (empty($errors)) {
// Attempt Login
$username = $_POST["username"];
$password = $_POST["password"];
$found_admin = attempt_login($username, $password);
if ($found_admin) {
// Success
// Mark user as logged in
$_SESSION["admin_id"] = $found_admin["id"];
$_SESSION["username"] = $found_admin["username"];
redirect_to("http://thehummingbirdplace.com/admin/admin.php");
} else {
// Failure
$_SESSION["message"] = "Username/password not found.";
}
}
} else {
// This is probably a GET request
} // end: if (isset($_POST['submit']))
$layout_contect = "admin";
include("includes/layouts/header.php");
?>
<div id="main">
<div id="navigation">
</div>
<div id="page">
<?php echo message(); ?>
<?php echo form_errors($errors); ?>
<h2>Login</h2>
<form action="login.php" method="post">
<p>Username:
<input type="text" name="username" value="<?php echo htmlentities($username); ?>" />
</p>
<p>Password:
<input type="password" name="password" value="" />
</p>
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</div>
<?php include("includes/layouts/footer.php"); ?>