2010-06-15 58 views
2

我正在設置一個PHP會話變量,其中包含我提交的HTML表單的成功消息。如果沒有表單錯誤,我將重定向到同一頁面(使用header())並顯示來自會話變量的消息。一切都很好,直到這裏,但如果我提交後再次訪問該頁面,該消息仍然存在。是否有可能只在成功提交後重定向時才顯示?提交表單後出現PHP會話變量

我對form.php的代碼如下所示:

if (isset($_POST['submit'])) { 
// some form processing here 
if (count($errors) == 0) { 
    // some data saving here 
    $_SESSION['status'] = 'Thank you for submitting the form'; 
    header('Location: /form.php'); 
} 

現在我的模板文件:

{if isset($smarty.session.status)} 
    <p><strong>{$smarty.session.status)</strong></p> 
{/if} 

<!-- form html code goes here --> 

謝謝。

回答

0

在顯示消息後清除會話變量就足夠了嗎?

這似乎是最直接的解決方案。您還可以:

A)檢查$ _SERVER變量中的信息,以檢測用戶如何進入頁面,只顯示消息是否來自路由。

B)讓重定向包含查詢字符串變量(例如'?messages = 1'),您在顯示會話消息之前使用$ _GET進行檢查。


編輯:我想操作的順序是:

1)形式提交 2)如果沒有錯誤,在會話 3設置消息)重定向 4)顯示後的消息重定向

我在說添加步驟5:刪除顯示後的消息。如同在回顯消息,就像你正在做的那樣,但是在echo之後添加代碼以刪除或清除會話變量。


編輯2:啊,現在我明白了...

我很好奇,如果你要直接從你的模板文件中引用會話變量。將模板參數作爲模板參數傳遞給PHP,調用模板可能會更好嗎?這使您能夠將會話管理與顯示分開,無論如何,這可能最符合您的最佳利益。

+0

我不認爲我可以這樣做,因爲我設置的消息,然後我重定向。 – Psyche 2010-06-15 23:22:49

+0

我不想使用任何$ _GET變量。 – Psyche 2010-06-15 23:28:27

+0

好吧,從上面的代碼中可以看到,在顯示消息後我無法執行任何操作。 – Psyche 2010-06-15 23:31:08

2

銷燬會話:

更改您的代碼看起來像這樣

if(isset($_SESSION['sentData']) 
{ 
echo "Your message"; 

//This 
session_destroy(); 
//or this 
unset($_SESSION['sentData']); 
} 

編輯:

其實也沒什麼,把這個在表格末尾。php /你的模板文件/在你顯示消息後:

unset($_SESSION['status']); 
0

在顯示消息之前,你可以檢查消息是否爲空。如果不是空的,則顯示該消息,然後立即顯式清空會話變量,以便下次檢查不顯示消息。

我希望我明白你的問題:)