2012-12-12 47 views
0
<?php 
echo $_REQUEST['uname']; 
echo $_REQUEST['pass']; 

$res= $mysql_query("select * from `sec` where uname='$_REQUEST['uname']' AND `pass`='$_REQUEST['pass']'"); 

if(mysql_num_rows($res)>0) 
{ 
header('location:home.php') 
} 
else 
{ 
header('location:index.php') 
} 

?> 

這是什麼錯誤:header information cannot modify... 甚至用戶名和密碼是正確的它不重定向到另一個頁面,並給予此警告.. 爲什麼這個錯誤來了?頭位置信息不能修改

+0

不能相信沒有人注意到這一塊還沒有,但'$ mysql_query'?真? *元* -mysql查詢? PHP應該拋出一個* fit *。請確保你已經把'error_reporting'完成了。 – Charles

+1

**警告!**您的代碼包含[SQL注入漏洞](http://en.wikipedia.org/wiki/SQL_injection) - 您直接傳遞未經過濾的未經過驗證的原始用戶輸入($ _REQUEST)* *轉換爲SQL字符串!請[切換到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli),以便您可以使用[帶有參數化查詢的預準備語句](http: //en.wikipedia.org/wiki/Prepared_statement)。 – Charles

回答

1

所有PHP的工作應該發送任何數據到瀏覽器之前完成。 如果您正在使用自己的代碼,你應該這樣寫代碼

<?php 
include "action/home.php"; //don't echo anything here 
include "view/home.php"; 
?> 

OR

如果您有重定向報頭信息已經設置之後,你應該使用JavaScript函數作爲

重定向
if(mysql_num_rows($res)>0) 
{ ?> 
    <script type="text/javascript"> 
    window.location="home.php"; 
    <script> 
<? 
} 
1

將數據回顯到頁面後,您無法進行PHP標頭重定向。

拿出回聲,它應該工作。另外,在這些頭函數的末尾加上分號。

1

發送任意輸出到瀏覽器後無法發送標題。你在前兩行做到這一點。您可以使用output buffering來解決此問題。

1

從您的代碼的第一和第二行中刪除echo,不要把echoprint_r語句之前header('location:.....');

+0

thankxx,它的工作原理 – surya

0

不能使用header()一旦事情被輸出到瀏覽器,你已經迴盪$_REQUEST['uname'];$_REQUEST['pass'];,這就是爲什麼你的代碼爆發的原因。

你有兩種可能的解決方案: 要麼刪除那些echoes或 使用ob_start()

1

這個錯誤主要是來當我們用很多時間頭部位置, 爲了避免這種錯誤,你必須使用另一個函數,而不是header('location:home.php') 這裏是不同的功能。

<meta http-equiv='Refresh' content='0; url=home.php'> 

同爲header('location:index.php') 換成<meta http-equiv='Refresh' content='0; url=index.php'>