我在提交到同一頁面的php頁面上有一個表單。 我注意到,如果我重新加載/刷新頁面,表單會重新提交。 如何編碼以最簡單的方式避免此問題?在瀏覽器中重新加載/刷新頁面而無需重新提交表單?
回答
一種可能性是,實施後的重定向,獲得的方法。
簡而言之,POST請求將永遠不會傳遞給瀏覽器。相反,你執行所有必要的行動,並存儲在會話中所需要的信息,然後你與代碼303
$page = 'show_result.php';
header('Location: '.$page, true, 303);
exit;
重定向這樣做,這樣,瀏覽器會顯示「show_result.php」頁面( GET請求)而不是使用POST請求的頁面。這也是添加到歷史記錄中的頁面,因此刷新並使用後退按鈕將永遠不會執行另一個POST請求。作爲一個很好的副作用,你可以擺脫關於重發數據的瀏覽器警告,通常用戶無論如何都不能決定該怎麼做。
我認爲這種方法最大的問題是,你需要一個會話來存儲錯誤消息,這意味着你必須依靠cookie。如果您沒有重定向來顯示錯誤,瀏覽器將顯示關於重新發送數據的警告。
這對我有用 – Paul
Post-redirect-get不需要會話,我不確定你的意思是「POST請求永遠不會傳送到瀏覽器」 – j08691
@ j08691 - 每個POST請求都將被回答重定向(代碼303)。瀏覽器收到此答案並啓動一個新的GET請求,該請求顯示第一個請求的結果。當POST請求檢測到無效用戶輸入時,會話是必需的,並且以下GET請求需要顯示錯誤消息和最後一個用戶輸入。 – martinstoeckli
這假設了很多東西,但也許是你在找什麼:
if ($_POST)
{
$success = false;
/*
* if all goes OK managing POST data make $success = true;
*
*/
if ($success)
{
// this will redirects to your original
// form's page but using GET method
// so re-submitting will be no possible
header("location: {$_SERVER['PHP_SELF']}");
exit;
}
}
'PHP_SELF'將刪除任何GET參數。使用'REQUEST_URI'來保存它們。 – minipif
根據HTTP標準,您應該讓瀏覽器在發送POST後做GET請求。
這裏是一個草圖例子做表單處理:
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
$err = array();
//performing all validations and raising corresponding errors
if (empty($_POST['name']) $err[] = "Username field is required";
if (empty($_POST['text']) $err[] = "Comments field is required";
if (!$err) {
//if no errors - saving data and redirect
header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
// all field values should be escaped according to HTML standard
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
} else {
$form['name'] = $form['comments'] = '';
}
include 'form.tpl.php';
?>
- 1. 在瀏覽器中刷新頁面而無需重新提交表單
- 2. 在頁面刷新時重新提交表單 - 而在wordpress的預覽頁面
- 3. 在無需重新加載頁面的Rails中提交表單
- 4. 如何刷新頁面而無需在PHP中重新加載?
- 5. php簡單聯繫表單重新提交刷新瀏覽器
- 6. onclick jquery提交表單,無需重新加載頁面
- 7. 如何提交表單,並無需重新加載頁面
- 8. jquery提交表單無需重新加載頁面
- 9. 重新加載圖片而無需重新加載頁面?
- 10. Selenium WebDriver Python重新加載html而無需刷新頁面
- 11. 重新加載頁面重新提交表單(PHP)
- 12. 防止刷新瀏覽器時重新提交提交
- 13. 頁面重定向無需重新加載/刷新
- 14. Jquery/Ajax刷新無需重新加載或加載頁面?
- 15. 無需重新加載頁面重新加載數據表?
- 16. jQuery dataTable 1.7.6刷新表格無需重新加載頁面
- 17. 自動刷新顯示錶無需重新加載頁面
- 18. 表單提交瀏覽器刷新
- 19. 如何重新加載頁面而不用JavaScript重新提交表單?
- 20. 提交嵌入式表單而不重新加載頁面
- 21. jquery重新加載整個頁面而不是表單提交
- 22. 用ajax提交表單而不重新加載頁面?
- 23. 提交表單數據而不重新加載頁面
- 24. 停止瀏覽器/頁面刷新Html5表單提交
- 25. 表格重新加載頁面無需發送提交數據
- 26. HTML - 更新\更新頁面內容,無需刷新\重新加載頁面
- 27. 重新裝載jstree而無需刷新頁面
- 28. 提交表單到同一頁面複選框無需重新加載頁面
- 29. 頁面在提交後重新加載
- 30. AJAX:提交一個表單而無需刷新頁面
你可以嘗試重定向到一個頁面刷新。 – Blender
http://en.wikipedia.org/wiki/Post/Redirect/Get –
你不能......整個問題是,用戶輸入可能是必要的,以生成你當前所在的頁面。除非你有特殊的理由去改變它,否則我建議單獨留下這種行爲。如果你這樣做,你可以做Blender建議的事情,然後進入中間頁面,或者在進入下一頁之前通過AJAX發送你的數據。 – Brad