2011-09-20 235 views
1

我正在處理如何通過起訴header()函數來重定向到另一個頁面,但它不工作,並給我一個錯誤消息說帽子:無法修改標題信息 - 標題已發送......任何人都可以幫助,非常感謝。 這裏是我的PHP代碼登錄後重定向到另一頁

if(isset($_POST['email'])){ 
    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    $query = "select email, password from member where email = '$email' and password='$pass'"; 
    if(mysql_num_rows(queryMysql($query)) == 0) 
{ 
    echo "Email/Password invalid<br/>"; 
} 
else 
{ 
    $query1 ="select uniid from member where email = '$email' and password ='$pass'"; 
    $result1 = queryMysql($query1); 
     $row1 = mysql_fetch_object($result1); 
     $uniid = $row1->uniid; 
     $_SESSION['uniid'] = $uniid; 

     header("Location:View.php?view=$uniid"); 
    } 
    } 
+0

有可能就像這個問題遍佈在網上的100萬例... – animuson

+0

@tony:哇!等一下。我當然希望這不是真正的代碼......你有一個重大的安全缺陷。在查詢數據庫之前始終清理用戶輸入! 'mysql_real_escape_string()','mysqli_real_escape_string()'或甚至更好地使用'PDO'和準備好的語句。或'queryMysql()'處理? – PeeHaa

+0

Robert'); DROP TABLE STUDENTS http://xkcd.com/327/雖然這不是有效的MySQL漏洞利用:P – IslandCow

回答

1

考慮用ob_start()開始您的代碼。這會關閉輸出緩衝,簡而言之,您可以在任何地方使用header()setcookie()

+0

Cookie問題始終是一個難題。很容易忘記它是爲http數據包輸出的。 – IslandCow

3

標題必須發送你寫什麼都之前。將標題重定向到代碼的頂部,它應該可以工作。

0

在調用header()之前,您不能有任何輸出(甚至沒有空白)。

您可以搜索輸出的任何機會,也可以在腳本的第一行開始輸出緩衝。這會導致輸出被緩衝,直到腳本結束,或者顯式調用ob_flush()(或類似的函數)。請參閱ob_start()

0

此問題的最常見的原因是,一些地方正在打印東西,你把你的頭前到標準輸出。你可以像Kolink說的那樣使用ob_start,或者你可以在php.ini中打開全局輸出緩衝區,這將允許PHP自動發送頭部輸出。

0

確保PHP文件中沒有任何空格,特別是在打開PHP標記之前。這被視爲文本輸出,並且在發送標題之前不會發生。