2010-12-09 37 views
0
<?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'); 
?> 

當我運行這一點,說: 警告:不能更改頭信息 - 頭已經發出(輸出開始爲XXXXX第6行PHP頭錯誤爲什麼這不起作用?

什麼是錯的

+1

whats in header.php? – 2010-12-09 16:50:39

+0

此外,未轉義的`$ _GET [id]`連接到查詢中是一種經典的SQL注入。危險。 – bobince 2010-12-09 17:07:04

回答

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標準要求位置標頭的值爲絕對URL。 因此,header('Location: index.php');將根據HTTP標準生成無效的HTTP響應。

0

你的PHP代碼發送內容從之前的報頭數據包含的文件從header('Location: index.php')。HTTP標頭必須始終先於其他任何內容爲了你自己發送出去。

並請,使用parametrized queries

0

你可能迴音/打印出來的東西在header.php或您die哪個您來電header('Location: index.php');

0

標題必須是由腳本發送的第一件事情前發送了頭信息。如果在調用header()函數之前有任何輸出到頁面,那麼您將會得到該錯誤。