2011-09-22 83 views
0

假設我有一個表單,用戶可以登錄,並且當用戶填寫表單時,它會回發到同一頁面,使用用戶名和密碼以及日誌檢查錯誤如果一切都膨脹的話。目前,我被這種條件下加載的形式這樣做:PHP - 處理POST和頭文件包括

if($_SERVER['REQUEST_METHOD'] != 'POST') { 

,如果這是不正確的,然後檢查是否存在錯誤並登錄等

的問題是,這一切發生在signin.php。在signin.php的頂部,我包括header.phpconnect.php,它們完全符合他們的名字。當我回發到頁面時,登錄狀態中的更改不會顯示在頭文件中(該文件中有一個用戶欄,與本站類似)。登錄工作,但我必須導航到不同的頁面,以顯示「登錄」而不是「登錄/註冊」或其他任何內容。

我是否以錯誤的方式解決了這個問題,還是隻是需要添加一些內容才能使標題更新?乾杯。

P.S:我很新的PHP,所以不要太複雜的東西會更好。

+0

重定向到其他頁面標題(「Location:」。$ url);或者你可以重定向同一頁面。它會被解決。如果重定向之前在瀏覽器中有輸出,請使用元刷新或JavaScript重定向。 – mahadeb

+0

@mahadeb不應該是瀏覽器輸出的東西。 –

+0

登錄完成後,使用 - header('Location:'。basename($ _ SERVER ['REQUEST_URI'])); 退出;用於頁面重定向。在這個代碼之前記住一件事,那就是不應該有任何輸出到瀏覽器,甚至沒有任何空間輸出。 – mahadeb

回答

1

有2個問題,你的設置違反了Web開發的非常基本但嚴格的規則

  1. 任何POST請求後都應該重定向。可以按照其他答案中所示完成。
  2. 在完成所有邏輯之前,不得顯示HTML。所以,你的header.php應該在形式檢查之後被調用,而不是在它之前。
+0

是的,我現在看到第2點是如何重要的,只要我按照正確的順序開始調用它,一切都按照我想要的方式工作。真的很明顯。乾杯! –

3

你可能需要(使用header())偵錯碼發生後重定向:

if($_SERVER['REQUEST_METHOD'] != 'POST') { 
    .. 
} 
else { 
    .. 
    header('Location: ' . basename($_SERVER['REQUEST_URI'])); 
    exit; 
}