0

我找到了出现此错误的原因,我的代码没有任何问题,因此我将其从帖子中删除。

我的 php 页面被编码为 UTF-8,但它必须被编码为没有 BOM(字节顺序标记)的 UTF-8。

据我了解,BOM 被解释为输出,或者至少创建一个。

感谢您的所有回答,我的问题是重复的,对此我深表歉意,我查看了其他帖子,但还不够远。谢谢 !

4

2 回答 2

0

如果您在使用 setcookie 之前已经完成了 HTML 输出,您需要找到您的 HTML 输出开始的位置。在该行上方放置将开始输出缓冲的ob_start Docs函数。

启用输出缓冲后,您的程序仍然可以“输出” HTML,但不会立即发送。然后你应该可以毫无问题地调用 setcookie:

  <?php
  function login($username,$pwd)
    {   
        $mysqli=dbconnect(); //no output
        $query = "SELECT * FROM `users` WHERE `name`='$username' AND `password`='$pwd'";
        $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
        if($result->num_rows == 1) {
            while($row = $result->fetch_assoc()) {
                ob_start(); //set output buffering before setting cookies..
                setcookie("ID", $row['userid'], time()+3600*24*365);
                ob_end_flush(); // flush data
                if (isset($_COOKIE['UNIQUE_ID']))
                    {echo 'Connected';}
                else{echo 'No cookie today :(';}
            }
        }
        dbclose($mysqli); //no output
    }
    ?>

当你的脚本完成时,输出缓冲区将自动发送到浏览器,所以你不需要关心更多,其余的会自动工作。

于 2013-03-15T02:01:39.123 回答
0

在打开标签之前尝试删除所有空格。

结束标签是可选的,可能有助于将空格误解为输出

于 2013-03-15T02:26:08.353 回答