你能看出我简单的PHP代码有什么问题吗?

时间:2010-12-27 22:18:17

标签: php

我无法弄清楚为什么会收到此错误:

  

警告:无法修改标头   信息 - 已经发送的标题   (输出始于   C:\用户\网关\文件\ XAMPP \ htdocs中\ login.php中:3)   在   C:\用户\门户\文件\ XAMPP \ htdocs中\的login.php   第14行

以下是代码:

if (isset($_POST['submit'])) {

    $username = sanitize($_POST['username']);
    $password = sanitize($_POST['password']);

    if ($username) {
        if ($password) {
            $query = mysql_query(" SELECT * FROM users WHERE username = '$username' && password = '$password' ");
            if (mysql_num_rows($query) == 1) {
                $setCookie = setcookie('loggedIn', 1, time()+3600);
                echo 'user found';
            } else {
                $error = 'The username and/or password you entered is incorrect';
            }
        } else {
            $error = 'Please enter a password';
        }
    } else {
        $error = 'Please enter a username';
    }

}

我输入的用户名'admin'和密码'123',这个记录存在于users表中的数据库中。当输入正确的用户名/密码组合时,我正在回应的“用户发现”消息有效。

问题是,名为“loggedIn”的cookie没有设置,我得到的不能修改标题错误。

为什么?

6 个答案:

答案 0 :(得分:1)

问题不在于上面的代码。给你问题的代码可能在你发布之前。

这意味着您在设置cookie之前显示输出(echo,print_r,print,var_dump等)。这也可能是由标题空白字符引起的。

每个例子:

 <?php
setcookie('foo', 'bar'); // errors

或者...

<?php
echo 'foo';
setcookie('foo', 'bar'); // errors

检查login.php的第3行。根据错误消息,您可能正在那里输出内容。

答案 1 :(得分:0)

显然,在setcookie()函数之前,你的代码中有一个输出。我在这段代码中看不到它,但也许你之前做了一些“回声”,甚至在“之前”有一个空格

答案 2 :(得分:0)

如果在设置Cookie之前导致输出错误,例如来自mysql_query,则会收到标题警告。常见问题是<?php开始标记或编码数据之前的空格或文本。一些文本编辑器在文件的开头添加此信息。

答案 3 :(得分:0)

在setcookie部分之前,你可能会有一些空格或其他角色回响。使用输出缓冲来避免问题

答案 4 :(得分:0)

检查您之前是否有空白区域

答案 5 :(得分:0)

来自manual

  

setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标题一样,Cookie 必须在脚本输出之前发送(这是协议限制)

您的脚本可能会在发送一些输出后尝试设置cookie。