2011-08-02 40 views
0

我工作的幾種形式,現在一個網站,我想有一個自定義的通過/在同一頁的形式提交後無法通知:print語句重定向

$get = $_GET; 
$post = $_POST; 

ob_start(); 
header('Location: ' . $_SERVER['PHP_SELF']); 
ob_end_flush(); 

submit_form($get, $post) ? print('passed') : print('failed'); 

提交表單功能正常工作,但打印語句沒有顯示出來 - 我不確定我的邏輯中存在什麼缺陷,並且非常感謝一些幫助。

回答

1

所以,基本上這是一個消息傳遞的問題。如果您的重定向位於同一站點,並且您可以訪問結尾頁面的php,那麼您應該執行以下操作:

使用$ _SESSION變量可以存儲名爲「system-message」的自定義變量或無論你想叫它什麼。 (記住,使用$ _SESSION,你需要調用「在session_start()」在每個PHP文件的開頭。)

在表單的成功,說

$_SESSION['system-message'] = "Form was successfully submitted"; 

然後調用你的頭重定向。

在最終頁,請有做這樣的事情尋找一個可能的系統消息:

if(isset($_SESSION['system-message'])) { echo "<div class="system-message">".$_SESSION['system-message']."</div>"; 

然後空出該變量,因此不會每次你去一個新的頁面時顯示...(你想讓它只顯示一個時間...)

unset($_SESSION['system-message']); 
1

我不認爲頭緩衝(http://php.net/manual/en/function.ob-start.php),所以一般在頭('Location:xyz')調用瀏覽器之後是立即發送到由Location指定的頁面。有時你需要調用exit();在標題('Location:xyz')調用後阻止進一步處理,但並非總是如此,不能依賴。

因爲在發送標題之前不能輸出任何內容,所以您需要使用某種非屏幕日誌來通知您成功,比如將消息存儲在數據庫,文本文件或通過電子郵件發送給自己通知。

+0

那麼我會假設'header(...'?form = login&success = yes')'也可以工作嗎?我希望有一個更簡單的方法,但我想不是 - 謝謝。 – mzhang

+0

是的,那將是另一種解決方案。 –

+0

如果使用輸出緩衝,只有在清空緩衝區或輸出緩衝輸出內容時纔會發送標題。 – Timur

0

默認情況下,PHP使用HTTP 302狀態碼由Location頭,它沒有「身體」來重定向。所以,你需要傳遞一些信息到腳本,你將使用GET(url),session,cookies或其他的東西輸出一些消息。