我得到这个错误:
警告:无法修改报头信息-报头已经由(output started at/removed/loginfo .php:2)在/removed/loginfo .php第24行
我明白,当我尝试设置cookie时,我得到了错误,这是因为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>
<!--Database Connections-->
是HTML输出,即使它只是一个注释。删除它,然后再试一次。
PHP块之间也有一个空格。
一般来说,这意味着您在setcookie()
调用之前已经向客户端发送了一些内容。
做简单测试:
<?php
ob_start();
include "../../includes/dbpractice_con.php"; ?>
# ... rest of your code... #
和setcookie()之前调用add line
ob_get_clean();
只是为了确保之前没有输出。
<?php ?>
之外的任何内容都是HTML并发送给用户。这
<!--Database Connections-->
<?php include "../../includes/dbpractice_con.php"; ?>
输出<!--Database Connections-->
作为HTML注释。另一个可能的输出在这里
<?php include "../../includes/dbpractice_con.php"; ?>
<?php ...
至少在两个PHP标记之间有新的行字符,这也是不想要的输出。
在cookieset()调用之前不能有任何东西要回显,print_r, var_dump数据,手动检查这些函数
总是检查所有包含的脚本(包括,要求等)。
确保它们以<?php
开头,前面无内容,以?>
结尾,后面无内容。
这是一个很好的例子:
<?php
// some lines
?>
这些不是
something<?php ?>
或
<?php ?>something
或
<?php ?>
(如果文件已保存为UTF-8)。
查看您的dbpractice_con.php,检查它是否保存为ANSI(从记事本检查另存为对话框),确保所有内容都在标签之间,并且在标签前后没有一个字符。不要在同一个脚本中使用多个标签,因为这会增加不必要输出的风险。
试试这个:
<?php
// Database connections
include "../../includes/dbpractice_con.php";
//Declare variables
// ... proceed with code ...
如果这不起作用,那么问题可能在dbpractice_con.php