我在我正在建設的網站上有註冊表單。如果填寫正確,我希望用戶回到主頁面。如何在表單完成後在php中重定向到另一頁?
我試圖使用header
,但我得到「無法修改標題信息...」我想這是因爲我發佈到$_SERVER['PHP_SELF']
;
有關如何在表單正常時重定向用戶的建議? (除了帶按鈕的成功頁面)
我在我正在建設的網站上有註冊表單。如果填寫正確,我希望用戶回到主頁面。如何在表單完成後在php中重定向到另一頁?
我試圖使用header
,但我得到「無法修改標題信息...」我想這是因爲我發佈到$_SERVER['PHP_SELF']
;
有關如何在表單正常時重定向用戶的建議? (除了帶按鈕的成功頁面)
如果web服務器沒有向用戶瀏覽器輸出其他文本/字符串數據,則只能使用header()
函數。
你需要任何事情之前把邏輯重定向在你的腳本的頂部:
<?php
// Process form
// If processing was successful, redirect
if($success)
{
header("Location: http://www.main-page-url.com/");
}
?>
這樣做的原因是,當瀏覽器從Web服務器接收到信息後,收到HTTP標頭(其中header()
函數輸出重定向到),然後在HTTP標頭之後輸出HTTP響應的主體。如果您的腳本在標題命令之前有任何內容,您將繼續收到該錯誤。
我知道。我以爲我有另一個問題。現在我發現了一個require_once「file.php」;命令是問題 - 任何想法爲什麼? – AYBABTU 2011-01-26 13:04:27
由於您嘗試在內容已呈現到頁面後向瀏覽器發送新標題,因此您無法修改標題信息消息。如果在任何回顯/打印調用之前執行header()調用,它將重定向。否則,你需要一個元重定向。您發佈表單的位置無關緊要。
這不起作用的原因是標頭先於HTTP請求中的內容。當你輸出內容時,PHP通過發送所有頭文件和所有到目前爲止處理的內容來領先於遊戲。發送HTTP請求時沒有CTRL + Z,因此header()
函數在發送之後無法添加標頭。
但是,如果使用ob緩衝功能家族,則可以在回顯內容後調用header()
。調用ob_start()
緩衝頁面輸出,進行必要的標題調用或內容輸出,最後用ob_end_flush()
發送輸出。防爆。
<?php
ob_start(); //Start buffering
?>
<p>This is output!!!</p>
<?php
header('403 Moved Permanently'); //Fancy redirect is fancy
ob_end_flush(); //Send page content with redirect header
?>
唯一可能的缺點,使用緩衝的是,用戶將在接收所述內容,直到ob_end_flush()
命令稱爲感覺到輕微的掛斷。儘管這很可能不會引人注目,所以你不應該擔心!
在完成所有這些之前,您可能會考慮在代碼輸出內容之前將所有標題調用移動到某個位置。還要檢查前面空格的PHP標記,因爲它們會強制標題和內容發送。
如果你在屏幕上打印任何東西 - 任何東西 - 你都不能使用`header`。必須在任何輸出之前調用`header`,如果你向我們展示你的代碼,也許我們可以弄清楚什麼是錯誤的;即使你在第一個`<?php`前面有一個空格,它可能會導致這個問題。 – 2011-01-26 00:17:38