Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-setcookie();不工作(无法修改标题信息-标题已发送)_Php_Setcookie - Fatal编程技术网

PHP-setcookie();不工作(无法修改标题信息-标题已发送)

PHP-setcookie();不工作(无法修改标题信息-标题已发送),php,setcookie,Php,Setcookie,我得到这个错误: 警告:无法修改标题信息-标题已由第24行/removed/loginform.php中的/removed/loginform.php:2处开始的输出发送 我知道当我尝试设置cookie时会出现错误,这是因为setcookie之前不能有任何输出。。。问题是,之前没有输出(至少从我所看到的情况来看)。它说“

我得到这个错误:

警告:无法修改标题信息-标题已由第24行/removed/loginform.php中的/removed/loginform.php:2处开始的输出发送

我知道当我尝试设置cookie时会出现错误,这是因为setcookie之前不能有任何输出。。。问题是,之前没有输出(至少从我所看到的情况来看)。它说“<?php”是一个标题,我不明白这一点。如果setcookie只能在PHP中使用,并且<?PHP是一个标头,那么如何使用setcookie而不出现此标头错误

我的代码:

<!--Database Connections-->
<?php include "../../includes/dbpractice_con.php"; ?>

<?php 

//Declare variables
$username = "";
$password = "";
$message = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") { //Retrieve from form when submit is clicked.

    //Escape to prevent SQL injection.
    $username = mysqli_real_escape_string($connection, $_POST['username']);
    $password = mysqli_real_escape_string($connection, $_POST['password']);

    $check = mysqli_query($connection, "SELECT * FROM users WHERE username='$username' AND password='$password'");
    $rowCount = mysqli_num_rows($check);

    if ($rowCount == 1) {

        $cookieExpiration = time() + 757368000; //1 year

        setcookie("username", $username, $cookieExpiration);

    } else {
        $message = "Invalid username or password. <br/>Don't have an account? Click <a href=\"registerform.php\">here</a> to register.<br/><br/>";
    }

}


?>

<html>

是HTML输出,即使它只是一条注释。请将其删除,然后重试

编辑: PHP块之间还有一个空格。尝试将include放在主PHP块中。

是HTML输出,即使它只是一条注释。请将其删除,然后重试

编辑: PHP块之间还有一个空格。尝试将include放入主PHP块。

尝试以下操作:

<?php
// Database connections
include "../../includes/dbpractice_con.php";

//Declare variables
// ... proceed with code ...
试试这个:

<?php
// Database connections
include "../../includes/dbpractice_con.php";

//Declare variables
// ... proceed with code ...

一般来说,这意味着您在调用
setcookie()之前已经向客户端发送了一些内容

进行简单测试:

<?php

  ob_start();
  include "../../includes/dbpractice_con.php"; ?>

  # ... rest of your code... #
只是为了确保之前没有输出

之外的任何内容都是HTML,并发送给用户。那么这个

<!--Database Connections-->
<?php include "../../includes/dbpractice_con.php"; ?>
这些不是

something<?php ?>
什么

什么


(如果文件已另存为UTF-8)


查看您的dbpractice\u con.php,检查它是否保存为ANSI(使用“另存为”对话框的记事本检查),确保所有内容都在之间,并且标记前后没有一个字符。不要在同一个脚本中使用多个标记,因为这会增加不必要输出的风险。

通常这意味着您在调用
setcookie()
之前已经向客户端发送了一些内容

进行简单测试:

<?php

  ob_start();
  include "../../includes/dbpractice_con.php"; ?>

  # ... rest of your code... #
只是为了确保之前没有输出

之外的任何内容都是HTML,并发送给用户。那么这个

<!--Database Connections-->
<?php include "../../includes/dbpractice_con.php"; ?>
这些不是

something<?php ?>
什么

什么


(如果文件已另存为UTF-8)



查看您的dbpractice\u con.php,检查它是否保存为ANSI(使用“另存为”对话框的记事本检查),确保所有内容都在之间,并且标记前后没有一个字符。不要在同一个脚本中使用多个标记,因为这会增加不必要输出的风险。

PHP不知道它是什么,它只看到
标记中的文本,所以它将其作为输出发送。不起作用。对于我来说,这个错误几乎总是在php试图写入或更改响应头之前输出的空格或回车。谢谢。我把include放在主PHP块中,它工作了。PHP不知道它是什么,它只看到
标记中的文本,所以它将其作为输出发送。不工作。对于我来说,这个错误几乎总是在php试图写入或更改响应头之前输出的空格或回车。谢谢。我将include放在主PHP块中,它起了作用。@VBCPP这是同一个问题,但您引用的问题没有任何详细说明问题最初是如何在那里产生的。您不能在
完整输出之前有任何内容,也不能包含“./../includes/dbpractice\u con.PHP”的内容因为这可能包含可能导致问题的代码。@Irdrah dbpractice_con.php的内容:@mega-well这仍然没有包括在问题中,但您的问题似乎已经解决了,所以这并不重要。@VBCPP这是同一个问题,但是您提到的问题没有任何细节来解释问题最初是如何产生的。您不能在
完整输出之前有任何内容,也不能在您的问题中包含“../../includes/dbpractice\u con.php”的内容,因为这可能包含可能导致问题的代码。@Irrah dbpractice_con.php的内容:@mega-well这仍然没有包括在问题中,但您的问题似乎已经解决了,所以这并不重要。
<?php  ?>