PHP标头错误为什么这不起作用?

时间:2010-12-09 16:49:05

标签: php mysql html

<?php
require 'header.php';
require 'connection.php';

mysql_query("DELETE FROM quotes WHERE ID = $_GET[id]") or die("didnt delete properly");
header('Location: index.php');
?>

当我运行时,它说: 警告:无法修改标头信息 - 已经发送的标头(输出从第6行的xxxxx开始

有什么问题?

4 个答案:

答案 0 :(得分:2)

header.phpconnection.php正在输出一些内容。发送内容后,您无法修改HTTP标头,因为此时已经发送了标头。

解决方案的黑客就是:

<?php

ob_start();

require 'header.php';
require 'connection.php';

mysql_query("DELETE FROM quotes WHERE ID = $_GET[id]") or die("didnt delete properly");

header('Location: index.php');

ob_end_flush();

?>

但是,您应该确定发送内容的位置并将其抑制,或者在header()调用之后将其重新排序。

如果我怀疑header.php输出了一个HTML标题,您可以删除require 'header.php';行 - 内容永远不会显示,因为这是重定向。

另请注意,HTTP标准要求,Location标头的值为绝对URL。 因此,header('Location: index.php');会根据HTTP标准生成无效的HTTP响应。

答案 1 :(得分:0)

您的php代码正在从header('Location: index.php')的标头数据之前发送包含文件中的内容。必须始终在任何其他内容之前发送HTTP标头。

请为了您自己,请使用parametrized queries

答案 2 :(得分:0)

您可能会在header.phpdie之前回复/打印一些内容,以便在您致电header('Location: index.php');之前发送标题信息

答案 3 :(得分:0)

标题必须是脚本发送的第一件事。如果在调用header()函数之前页面有任何输出,那么您将收到该错误。