2011-04-17 57 views
1

我有一個函數,將文件內容導入到mySQL中並返回結果。如果我刷新頁面並點擊「是」,它會再次執行,使輸出內容相同。PHP刷新,如何停止在刷新頁面時再次調用上一個函數?

我該如何阻止這種情況發生?在這種特殊情況下,地址欄中沒有URI,但有其他功能。

+0

讓腳本檢查該記錄是否已存在於數據庫中? – 2011-04-17 15:53:25

+0

可以,但唯一的方法是檢查文件名,如果文件名已存在,則重命名並添加它。 – Nicekiwi 2011-04-17 15:54:59

回答

2

您應該檢查數據庫中的內容是否存在,如果不存在,請填寫它們。否則,請不要運行該功能。

僞代碼:

if !database.containsRecords 
    fillDatabase() 
end 

在此之上,它始終是一個POST請求後重定向好的做法。所以你會想:

fillDatabase(); 
header("Location page.php"); 
exit(); 
+0

我可以傳遞成功消息嗎? – Nicekiwi 2011-04-17 16:17:46

+0

@Ezra:讓目標頁面顯示「成功」。 – 2011-04-17 16:19:55

+0

不是最有活力的過程。 – Nicekiwi 2011-04-17 16:21:00

1

查詢每個頁面加載的數據庫並查看它是否已經被填充。如果它已填充,則不要嘗試重新填充它。

1

你應該使用POST-redirect-GET pattern

更新數據庫後,將HTTP重定向發送到顯示結果的單獨頁面。
刷新瀏覽器將重新加載該單獨的頁面。

+0

無論如何,使用瀏覽器後退按鈕將會搞亂。是的,一些現代瀏覽器會阻止重新發送POST數據,但不是全部。 – 2011-04-17 15:58:43

+0

是的,你真的應該做一個成功的重定向。其實你應該爲所有形式做這個。這是最佳做法。 – PeeHaa 2011-04-17 16:00:06

+0

@Oliver:nopez。後退按鈕再次顯示空白表單。 – PeeHaa 2011-04-17 16:01:04

0

我假設你使用POST表單來上傳文件。 您可以在表單中包含帶有僞隨機唯一標識的隱藏輸入字段。 如果用戶通過POST重新發送數據,您可以檢查您是否已經處理了此請求。 隱藏字段不會保存,因爲用戶可能會編輯它們,但您可以檢測到意外重新提交。

相關問題