无法修改标头信息 - 已发送的标头

时间:2013-02-17 14:06:10

标签: php session login header mysqli

亲爱的朋友们,我有一个奇怪的错误,我无法解决,需要你的帮助。当登录不正确时,代码工作正常,当登录正确时,它仍会创建一个会话,但不会重定向到index.php,而是抛出错误“无法修改标题信息 - 标题已经由......发送” 。我已经搜索了类似的帖子,但无法解决问题

这是代码

<?php include ("scripts/connection.php");
session_start();
$myusername = $_POST["myusername"];
$myusername = preg_replace('/[^a-zA-Z0-9\']/','',$_POST['myusername']);
$mypassword = $_POST["mypassword"];
$mypassword = preg_replace('/[^a-zA-Z0-9\']/','',$_POST['mypassword']);
$LoginQuery = "SELECT * FROM users WHERE username='$myusername' and password='$mypassword'";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Admin Login</title>
</head>
<body>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr><form name="form1" method="post">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<?php if($_SERVER["REQUEST_METHOD"] == "POST")
{ $result = $mysql->query($LoginQuery);
  if($result->num_rows ==1) 
{
$_SESSION['login_user']=$myusername;
header("Location:index.php");
exit();
}
else
{
echo '<tr><td width="78">&nbsp;</td><td width="6"></td><td width="294"><font style="color:#f00; font-weight:bold;">Invalid!</font></td></tr>';
}
}
?>
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
</body>
</html>

朋友们,你能找到我做错了什么,请帮我纠正。 谢谢

2 个答案:

答案 0 :(得分:0)

在编写任何其他文本之前,您应该使用函数header

答案 1 :(得分:0)

您必须了解HTTP:

通过HTTP-Header实现redirct。 在HTTP中,标题发送,之前任何输出(如网页本身)

因此,您尝试在发送有效负载后发送Redirect-Header。

这是不可能的。

简而言之,在页面上打印出来后,永远不要使用header()。

相关问题