2013-04-25 51 views
0

我在用javascript(和jquery)和php編寫的應用程序中有一個html表。該表的內容存儲在MySql表中。在Php頭重定向後提供反饋

當我希望用戶向表中添加一些數據時,他們會單擊一個按鈕並顯示一個jQuery UI對話框,並顯示一個用戶填寫的表單。

當用戶填寫表單,他們點擊保存,提交表單純PHP,將數據保存到表,然後重定向到與上表中的原始頁面的頁面,使用

$url = BASE_URL . '/admin/pages/finance/pricing/pricing_schedule.php'; 

header('Location: '.$url);  //Redirect to the right page 

exit();  

我這樣做,因爲我不希望消息:

確認重新提交表單 - 你正在尋找您輸入使用的信息頁面。回到頁面可能會導致您需要重複的任何操作。你想繼續嗎?

顯示用戶是否因任何原因而刷新刷新。

但是,由於我這樣做的方式,如果保存失敗,我很難提供一種向用戶提供反饋的方式。

當用戶點擊保存在jquery ui對話框中時,表單提交時該框關閉,所以我不能在那裏提供反饋,因爲錯誤還沒有發生。

當我們在php頁面中時,只要我們重定向到帶有表格的原始頁面,任何拾取的錯誤都會丟失。

任何人都可以提供任何建議嗎?

+2

難道你不會在'$ _SESSION'變量中存儲任何錯誤,並將它們打印在重定向的頁面上嗎? – verbumSapienti 2013-04-25 10:37:45

+0

非常感謝@verbumSapienti。如果你想把它放在答案中,我會接受它 – 2013-04-25 11:55:51

+0

很高興有幫助! – verbumSapienti 2013-04-25 17:21:57

回答

2

你可以存儲任何錯誤的$_SESSION變量並打印出來重定向的頁面上。

0

簡單的GET參數如何?

東西就行:

header('Location: ' . $url . '?success=false&reason=blah'); 

而在$url該網頁上,你會首先尋找的$_GET['success']值。如果它不是"success",請回顯附加的HTML,說明它不成功。

if ($_GET['success'] == "true") { 
    echo "<p>SUCCESS!</p>"; 
    .. 
} else { 
    echo "<p>FAILED!</p>"; 
    .. 
} 
+0

謝謝,我確實考慮過,但如果用戶刷新該頁面,錯誤仍會顯示。 – 2013-04-25 11:26:55

+0

和@ ganshjr的回答相同的評論 – SirDarius 2013-04-25 11:55:30

0

考慮通過AJAX提交表單以避免頁面刷新。

看看這個教程:http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

解決方案(未測試)

jQuery代碼:

var form_data = $('#save_period_form').serialize(); alert(form_data); 
$.ajax({ 
type: "POST", 
url: "period_submit.php", 
data: form_data, 
dataType: 'html', 
success: function(returninfo) { 
    if(returninfo=='1'){ 
    alert('finish'); 
    //will redirect to pricing schedule page after the user has pressed 'ok' on the alert popup. 
    window.location.assign('/admin/pages/finance/pricing/pricing_schedule.php'); 
} else { 
    alert('error occured'); 
} 
} 
}); 

PHP代碼:

//Commented header redirection code because it's being done in the javascript code now. 
//$url = BASE_URL . '/admin/pages/finance/pricing/pricing_schedule.php'; 

//header('Location: '.$url);  //Redirect to the right page 

//Assuming your save has been successful, we echo value '1'. Else echo something else.. 
echo '1'; 
exit(); 
+0

謝謝,這似乎是一個好主意,但似乎並不奏效。我的函數是var form_data = $('#save_period_form')。serialize(); \t \t \t \t alert(form_data); \t \t \t \t $阿賈克斯({ 類型: 「POST」, 網址: 「period_submit.php」, 數據:form_data, 成功:函數(){ 警報( '完成');} });它正確地提供了form_data,但發佈了「完成」警報。然後它轉到具有表單數據的html表格頁面作爲URL中的GET。 – 2013-04-25 11:24:56

+0

查看我上面的解決方案。它應該工作,但我沒有測試它。注意:我使用相對路徑重定向到pricing_schedule.php文件。糾正,如果錯誤。 – Mysteryos 2013-04-25 11:49:57

0

另一個想法是通過在URL中的散列消息的傳輸:

if (isset($_POST['submit'])) { 
    ... 
    header("Location: ".$_SERVER["REQUEST_URI"]."#".urlencode($msg)); 
    ... 
} 
+1

這種方法具有不希望的副作用,即如果生成的鏈接被共享,每個用戶都將看到錯誤消息,沒有任何理由。 – SirDarius 2013-04-25 11:54:22

+0

是的,我同意你的意見。 – 2013-04-25 11:54:52