2013-12-18 285 views
3

我有一個網頁,其中包含一個使用POST方法的表單並引用它提交的同一頁面。我正在使用一個PHP包含文件,其中包含在設置提交值時運行的if語句。但是,由於某種原因,在一次提交之後,每次刷新頁面時,都會將表單提交之前提交的數據(在刷新頁面之前,瀏覽器會警告此信息)。是什麼導致了這種情況,我可能做錯了什麼?頁面刷新導致表單提交

+0

顯示一些代碼,我們只能推測到那時。 – Julio

+1

這是刷新表單提交結果頁面時的預期行爲。如果你鏈接到或導航到的網址而不是刷新你將得到沒有提交頁面。 –

+0

這是您通過** POST **提交表單時的預期行爲,然後刷新 – Leonardo

回答

1

這是預期的。您應該將表單提交給具有唯一URL的處理程序,無論它是查詢字符串還是不同的URI。一種解決方案(許多)是改變你的表單操作:

<form action="?action=submit" method="post"> 

,然後在PHP腳本處理表單,然後更改上下文回網址沒有查詢字符串

if (!empty($_POST['action']) && $_POST['action'] == 'submit') { 
    // do stuff 
    header('Location: '.$_SERVER['SCRIPT_NAME']); 
    die(); 
} 
+0

我會加入處理器,重定向到第三頁。否則,如果用戶刷新着陸頁,他們將再次提交他們的數據。 – Tim

+0

重定向到沒有查詢字符串的同一頁面是「第三頁」 – sjagr

0

我與我的一個網頁有同樣的問題。 原因是,當瀏覽器警告你它會再次提交表單時,這意味着當你點擊一個提交按鈕時,它會變成同樣的東西。

我做了2件事情,以避免它,但我相信有很多其他方式。 1.不要讓頁面在成功提交表單後再次回顯表單。 我的是這樣的

<?php 
if(!isset($_POST['submit'])) { 
include(form.php);// you can modify this according to your needs. 
} else { 
//display your message about what happened with the form. 
} 

?> 

這種做法,你的頁面將不會在一,容表單提交然而,這並不能阻止它從提交上刷新。 2.如果表單已提交,則創建一個控制器輸入,其中攜帶一個表示表單已提交的值。例如,把這個到您的形式:

<?=(isset($_POST['submit']))?"" :"<input type-"hidden" name="submit_stat" value="true" />" ; ?> 

,當你提交時處理您的表單與你的PHP檢查,並作出這樣的變量腳本行爲:

<?php 
if($_POST['submit_stat']==true) { 
//do not process the form here. 
//stop your script 
} 

?> 

另一個你可以做的事情是將頁面重定向到除了處理表單的頁面之外的其他頁面。我相信這是最安全的。

0

阻止這種情況的另一種方法是將發佈數據移至會話,重定向,從會話收集回發並刪除會話發佈數據。

if(!empty($_POST) && empty($_FILES)){ 
    // move post to session 
    // redirect to same url (don't forget possible get query) 
}else{ 
    // collect post from session 
    // unset post from session 
} 

將此設置爲默認設置,您不應該對發佈數據有任何問題。
只有文件上傳有例外。在這種情況下重定向* *後處理manualy。