我收到此错误:
警告:无法修改标题信息 - 第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>
答案 0 :(得分:3)
<!--Database Connections-->
是HTML输出,即使它只是一个评论。删除它,然后重试。
修改强> PHP块之间还有一个空格。尝试将include放在主PHP块中。
答案 1 :(得分:1)
通常,这意味着您在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数据,手动检查这些函数。
始终检查所有包含的脚本(包括include,require等)。
确保他们开始<?php
之前没有任何事情,并且在?>
之后没有任何事情。
这是一个很好的例子:
<?php
// some lines
?>
这些不是
something<?php ?>
或
<?php ?>something
或
<?php ?>
(如果文件已保存为UTF-8)。
查看你的 dbpractice_con.php ,检查它是否保存为ANSI(从带有另存为对话框的记事本检查),确保所有内容都介于两者之间,标签之前和之后没有任何一个字符。不要在同一个脚本中使用多个标签,因为这会增加不必要输出的风险。
答案 2 :(得分:0)
试试这个:
<?php
// Database connections
include "../../includes/dbpractice_con.php";
//Declare variables
// ... proceed with code ...
如果这不起作用,则问题可能在dbpractice_con.php