我正在創建一個表單並使用它來獲取數據輸入以通過php發送到MySQL數據庫。如果有人在頁面上點擊刷新,Firefox會將最後一組信息發送到php頁面,然後將其發送到數據庫。無論如何要防止這一點?刷新頁面將重新發送表單數據,是否可以防止這種情況? (PHP)
回答
爲了解決這個問題,存在Post/Redirect/Get pattern需要遵循:)
郵政/重定向/獲取(PRG)是Web開發人員共同 設計模式 幫助避免某些重複的形式提交 並允許用戶代理 更直觀地使用書籤 和刷新按鈕。
是的。插入數據後,您將執行重定向。
你需要做的重定向到同一頁:
$current_url = (empty($_SERVER['HTTPS']) ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header ('Location: ' . $current_url);
exit();
實際代碼的唯一答案,它變成醜陋的噩夢。請你選擇一個不那麼醜陋的建築?例如,不要重複整個字符串兩次來改變一個字母? – 2010-12-12 13:30:07
@Col - 這個怎麼樣:'$ current_url =「http」。 (!empty($ _ SERVER ['HTTPS'])?「s」:「」)「://」。$ _ SERVER ['SERVER_NAME']。 $ _SERVER ['REQUEST_URI'];' – AgentConundrum 2010-12-12 13:35:05
@Agent爲了便於閱讀,我會將整個https留在條件之內。儘管三元運算符本身是可讀性的一個巨大漏洞。並且還應該使用HTTP_HOST而不是SERVER_NAME – 2010-12-12 13:38:59
在一個隱藏的輸入使用代碼,並獲得由表代碼此代碼爲〔實施例,如果代碼發送從數據庫中,如果將其刪除未在表格中設置的代碼不接受查詢
通常的做法是使用重定向。
你得到請求,使用它包含的數據來加載你的數據庫或其他什麼,然後執行重定向(我認爲你是應該是爲此使用303重定向,但我聽說過很多人使用302s來避免某些瀏覽器故障)。
這樣做的最終結果是發生重定向時沒有發送POST數據,因此刷新不會導致它重新發送,並搞砸了您的應用程序/數據庫。
如果您不喜歡上述任何內容並正在使用JQUERY。你可以做一個簡單的加載或ajax函數將信息發送到你的腳本。
這將消除任何重複發送的機會,並且您無需重新加載頁面。我最喜歡這種方法,它快速簡單。
另一種解決方案,你可以做的是有你的形式發送到另一個頁面,有點像這樣:
<form action="chat_server.php" method="post">
Message: <input type="text" name="message" />
<input type="submit" />
</form>
在chat_server.php文件,你做你需要的數據,並在做什麼最後,你做
echo '<meta http-equiv="REFRESH" content="0; url=chat.php" />';
試試看,應該擺脫你的問題。
- 1. 刷新頁面重置輸入 - 是否可以避免這種情況?
- 2. Python和CGI:防止刷新時重新發送表單數據
- 3. 當用戶刷新頁面時,HTML表單被重新提交 - 我如何阻止這種情況發生?
- 4. 如何在不刷新頁面的情況下發送表單
- 5. php無法發佈數據的情況下刷新頁面
- 6. php表單刷新發送表格(防止)
- 7. 將表單數據發佈到php而不刷新頁面
- 8. 防止Javascript頁面刷新
- 9. 防止HTML頁面刷新
- 10. 防止頁面刷新PHP表單提交?
- 11. PHP發送表單數據不止一種形式/頁面
- 12. 停止重新提交頁面時刷新數據,php
- 13. 防止頁面刷新表單提交停止代碼執行
- 14. 避免重新發送頁面刷新數據
- 15. 刷新頁面,無需重新發送POST數據(ASP.NET)
- 16. 硒刷新頁面和重新發送數據
- 17. 如何防止刷新頁面重新提交表單不重定向
- 18. 從刷新重新發送窗體停止頁面
- 19. 將表單數據發送到外部表單而不刷新頁面
- 20. 防止在頁面刷新時重複插入數據庫 - Asp.net
- 21. 如何防止數據重新進入數據庫頁面刷新laravel
- 22. PHP刷新頁面防止數據插入
- 23. 防止刷新雙重表單提交
- 24. 頁面刷新後是否可以保留表單(html)內容數據?
- 25. 如何在發送電子郵件後防止頁面刷新?
- 26. 如何防止刷新後發送表單?
- 27. 在不刷新頁面的情況下提交表單
- 28. cookie不會更新,直到頁面刷新...如何避免這種情況?
- 29. 在這種情況下,@synchronize是否可以防止競態條件?
- 30. 發送刷新頁面
不是一種「方式」,而是嚴格的規則,來自HTTP標準。 – 2010-12-12 13:25:22