2010-10-23 197 views
1

我試圖使用php登錄頁面,但是當我使用header()重定向到另一個頁面時,我的用戶/通過檢查我的數據庫以某種方式失敗。難道我做錯了什麼?php登錄:與標題問題

此外,我知道我錯過了安全衛士,我正在實施步驟,因爲我還是比較新的PHP。但一些技巧和建議,將不勝感激!

$dbc = mysqli_connect('localhost', 'root', 'admin', 'wamad') 
or die("Error connecting to MySQL server."); 

$query = "SELECT * FROM $table WHERE username = '$username' and password = '$password';"; 

$result = mysqli_query($dbc, $query) 
    or die("Login error"); 

if(mysqli_num_rows($result) == 1){ 

header("Location:login_success.php"); 
}else{ 
    echo "Wrong username or password."; 
} 

echo mysqli_num_rows($result); 
mysqli_close($dbc); 

回答

1

我不是100%正面你想要做的,但通常你需要在使用位置標題後殺死腳本。

header('Location: login_success.php'); 
die(); 

否則腳本在設置標題後繼續運行。

+0

我想檢查,如果用戶登錄嘗試是否有效。當我沒有header()行時,它可以正常工作,但是當它被包含時,它似乎無法正確檢查我的db。我打印出用戶/通過的搜索查詢,並且當包含該行時,我得到一個0。 – 2010-10-23 19:20:55

+0

哦,...殺死腳本也沒有工作 – 2010-10-23 19:22:30

2

你不需要分號。發送一個頭文件後,我從未使用過die();,並且它始終正常工作。

在發送標題之前,您是否將一些輸出發送到瀏覽器?如果是這種情況,您的標題將不會被設置。你是否顯示PHP錯誤?你有錯誤日誌嗎?有錯誤顯示嗎?

此外,標題應始終以斷行結束了,所以送header ("Location: login_success.php\n");

+0

不,我不會在發送標題之前輸出任何東西。這個問題主要與mysqli_num_row($ result)有關。當我包含標題時,它找不到我的查詢,否則它工作正常。 你能解釋爲什麼標題應該總是以換行符結束嗎? – 2010-10-25 08:26:13

+0

換行符分隔標題字段。你在error_log中收到任何錯誤消息嗎? – stpn108 2010-10-25 08:49:55

+0

關於錯誤的nvm,我知道我在做什麼錯誤...愚蠢的錯誤。謝謝! – 2010-10-27 06:26:24