我正在尝试创建一个重定向到我的索引页面的登录表单。但我认为admin_login.php的第二个php脚本中使用的header()函数并不完全正常,因此如果用户名和密码也正确,那么浏览器不会重定向到index.php页面。我发现第一个audder()工作正常,因为在登录后我重新加载浏览器页面被重定向到index.php请帮我解释如何重新排列代码以获得所需的结果。提前致谢。
<?php
session_start();
if(isset($_SESSION["manager"])){
header("location: index.php");
exit();
}
?>
<?php
if(isset($_POST["username"]) && isset($_POST["password"])){
$manager = preg_replace('#[^A-Za-z0-9]#i','',$_POST["username"]);
$password = preg_replace('#[^A-Za-z0-9]#i','',$_POST["password"]);
include("../storescript/connect_to_mysql.php");
$sql = mysql_query("SELECT id FROM admin WHERE username = '$manager' AND password = '$password' LIMIT 1 ");
$existCount = mysql_num_rows($sql);
if($existCount == 1)
{
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
}
$_SESSION["id"] = $id;
$_SESSION["manager"] = $manager;
$_SESSION["password"] = $password;
header("location : index.php");
exit();
}
else
{
echo ("The given information is incorrect. Please <a href='index.php'>click here</a> to try again. ");
exit();
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>GROCERY WORLD STORE ADMIN</title>
<link href="../../css/structure/template.css" rel="stylesheet" type="text/css">
<link href="adminpage.css" type="text/css">
<link href="adminpage.css" rel="stylesheet" type="text/css">
</head>
<body>
<!--CONTAINER-->
<div class="Container">
<?php
include_once("../../template_header.html");
?>
<!--CONTENT AREA-->
<div class="Content">
<div style="margin: 10px;" align="left">
<form action="admin_login.php" method="post" name="adminLogin">
<table width="300" border="0">
<tr>
<td>username</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="Login"></td>
<td><input type="reset" value="Clear"></td>
</tr>
</table>
</form>
</div>
</div>
<!--FOOTER AREA-->
<?php
include_once("../../template_footer.html");
?>
</div>
</body>
</html>
<?php
$mysql_host = "myhostname";
$mysql_db = "mystore";
$mysql_user = "mybuilder";
$mysql_pwd = "123";
$conn = mysql_connect("$mysql_host","$mysql_user","$mysql_pwd") or die(mysql_error());//SETING UP CONNECTION WITH SQL DATABASE
mysql_select_db("$mysql_db", $conn) or die("No Database");//SELECTING DATABASE
?>
<?php
session_start();
if(!isset($_SESSION["manager"])){
header("location: admin_login.php");
exit();
}
$managerID = preg_replace('#[^0-9]#i','',$_SESSION["id"]);
$manager = preg_replace('#[^A-Za-z0-9]#i','',$_SESSION["manager"]);
$password = preg_replace('#[^A-Za-z0-9]#i','',$_SESSION["password"]);
include("../storescript/connect_to_mysql.php");
$sql = mysql_query("SELECT * FROM admin WHERE id='$managerID' AND username='$manager' AND password='$password' LIMIT 1");
$existCount = mysql_num_rows($sql);
if($existCount == 0)
{
echo "Your record is not present in our database.";
exit();
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>GROCERY WORLD STORE ADMIN</title>
<link href="../../css/structure/template.css" rel="stylesheet" type="text/css">
<link href="adminpage.css" type="text/css">
<link href="adminpage.css" rel="stylesheet" type="text/css">
</head>
<body>
<!--CONTAINER-->
<div class="Container">
<?php
include_once("../../template_header.html");
?>
<!--CONTENT AREA-->
<div class="Content">
<div style="margin: 10px;" align="left">
<h3 id="Style1">Hello ADMIN MANAGER. What would you like to do today?</h2>
<p>
<a href="#">Update products</a><br>
<a href="#">Logout</a>
</p>
</div>
</div>
<!--FOOTER AREA-->
<?php
include_once("../../template_footer.html");
?>
</div>
</body>
</html>
答案 0 :(得分:1)
来自manual:
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。
在我看来, admin_login.php 的第9行是一个空行。 此外, connect_to_mysql.php 可以在包含它时输出内容。
答案 1 :(得分:0)
发生这种情况的原因是,在发送标题之前,它已经发送了一些内容作为正文。这可能是一个额外的空白区域,也可能是另一个角色。我不久前有类似的问题。我使用的php
文件有点损坏,似乎在hidden
打开之前有一个<?php
字符(隐藏在文本编辑器中不可见)。
<强>解决方案:强>
试着找到它。如果您在<?php
之前找不到任何字符,您可能需要查看像this one这样的HEX编辑器。
答案 2 :(得分:0)
将其添加到页面顶部。它解决了我的问题:
ob_start();
祝你好运!
答案 3 :(得分:-2)
if(isset($_SESSION["manager"])){
include("index.php");
exit();
}
$_SESSION["id"] = $id;
$_SESSION["manager"] = $manager;
$_SESSION["password"] = $password;
include("index.php");
exit();
这可能是输出一些空格或换行。包含将在标题不会的地方起作用。
?>
<?php