为什么我每次都会收到我已发送标题的错误消息

时间:2010-05-10 16:57:28

标签: php mysql html header

我还有一个关于网络编程的问题。

我编写了一个登录脚本,但每当我尝试登录时都说我已经发送了标题信息。

以下是2个文件:

<?php
if($_GET['logout'] == 1) {
    setcookie('authorized', 1, time()-3600);    
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Login - photoAdminSite</title>
</head>

<style type="text/css"> 
    body {
    text-align: center;
    font-family: helvetica;
    }

    #loginForm {
    padding: 1em;
    background: #e3e3e3;
    width: 260px;
    margin: 3em auto 0;
    text-align: left;

    }
</style>

<body>

<div id="loginForm">
<form method="post" action="confirm_login_credentials.php">

<h2>LOGIN</h2>
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="password" name="password" /></p>
<p><input type="submit" value="Login" name="submit" /></p>

</form>
</div>
</body>
</html>





<?php
$username = $_POST['username'];
$password = $_POST['password'];

require 'database.php';

$q = "SELECT id FROM users_photoadminsite WHERE user_name = '$username' AND password = '$password'";

$result = $mysqli->query($q) or die(mysqli_error());

if (mysqli_num_rows($result) == 1) {
    setcookie('authorized', 1, 0);
    header("Location: index.php");
} else {
    header("Location: login.php");  
}
?>

我会对一些有用的答案感到高兴。

6 个答案:

答案 0 :(得分:3)

在将任何输出发送到浏览器之前,必须设置Cookie和标头。尝试将登录脚本移动到页面顶部。您可能还想考虑清理查询以防止恶意活动。

答案 1 :(得分:1)

您可能在该php文件的开头有一个空行。也许在开始PHP脚本之前的空间

答案 2 :(得分:0)

请参阅第60,61和63行,以及所有HTML后的来源?把它们放在前面。

答案 3 :(得分:0)

当PHP说它已经发送了标题时,这意味着脚本(或调用它的脚本)已经输出了一些文本。这包括任何和所有错误消息。

当PHP输出第一段文本时,它会发送标题,但之前不会发送。为了获取HTTP cookie(标题的一部分),必须在输出任何文本之前发送cookie。

您可以使用ob_startob_end_flush以及其他输出控制功能启用输出缓冲。

您还可以将php.ini variable设置为在输出文本时自动发送Cookie标头。

答案 4 :(得分:0)

如果你的php.ini中没有启用output_buffering,你会收到此错误,因为它会立即开始发送html。您需要编辑php.ini以启用输出缓冲。

答案 5 :(得分:0)

这是在Windows上吗?检查物料清单。在记事本中打开它并将其保存为ANSI以查看它是否有帮助。