2012-07-24 85 views
1

我創建了一個留言板,用戶可以通過HTML表單添加條目。將數據提交到留言簿後,一些用戶刷新頁面。我知道的所有瀏覽器都會重新提交數據。之後。有沒有辦法告訴瀏覽器,數據不應該被重新提交?如何清除表單數據,使刷新不會在沒有轉發的情況下重複數據?

我以前有成功將數據存儲到數據庫後的重定向。但是,現在我想向用戶提供一些附加信息,例如「感謝您的參賽作品」......「。」或者「參賽作品中的一小部分已發送到您的電子郵件地址......」。我非常喜歡避免將所有值添加到GET參數以便能夠在轉發後使用這些信息。

在用戶點擊「刷新」按鈕後,還有另一種方式(沒有前進!)來阻止瀏覽器再次提交數據嗎?

+0

我不這麼認爲。這是瀏覽器行爲,我認爲它不能被修改。但是,您可以做的是顯示您想要在重定向頁面顯示的信息。 – asprin 2012-07-24 07:45:47

回答

3

也許你可以設置一個會話變量,並且發佈數據的散列,並在每次加載頁面時檢查它。如果該散列是相同的,該數據已經被提交:

<?php 
session_start(); //Start the session 

$dataHash = md5($_POST['name'].$_POST['comment'].$_POST['whatever']); //Get a hash of the submitted data 

if(isset($_SESSION['gbHash']) && $_SESSION['gbHash'] == $dataHash) { //Check if the data has been submitted before 
    //Do not save the data/show a warning message 
} else { 
    //Save the data/show a thank you message 
} 


$_SESSION['gbHash'] = $dataHash; 
?> 
+1

非常聰明!爲了更簡單的方法來檢查是否提交了相同的數據,我使用了'$ dataHash = md5(implode(「,」,$ _ POST));'以包含所有'$ _POST'變量。 – shshaw 2014-11-04 23:11:59

+1

如果你使用[PHP窗體中的數組](http://php.net/manual/en/faq.html.php#faq.html.arrays),那麼更好的選擇可能是使用'md5(json_encode($ _POST))'捕獲所有散列數據。 – shshaw 2014-11-05 17:11:38

0

重定向與附接到執行POST操作後重定向位置的自定義消息的用戶,例如

header("location: http://www.website.com/thankyou.php?msg=email_sent"); 

header("location: http://www.website.com/thankyou.php?msg=email_not_sent"); 

header("location: http://www.website.com/thankyou.php?success=0"); 

然後切換GET參數以顯示相應的消息類型。 或用戶AJAX的張貼:)

1

有另一種方式(不向前!),以prevnt從 的「刷新」按鈕 在用戶點擊後再次提交數據的瀏覽器?

是 - 阿賈克斯 - 你仍然可以查看您的所有成功/失敗的消息,甚至驗證....

閱讀本 - http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

例子:

var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone; 
//alert (dataString);return false; 
$.ajax({ 
    type: "POST", 
    url: "bin/process.php", 
    data: dataString, 
    success: function() { 
    $('#contact_form').html("<div id='message'></div>"); 
    $('#message').html("<h2>Contact Form Submitted!</h2>") 
    .append("<p>We will be in touch soon.</p>") 
    .hide() 
    .fadeIn(1500, function() { 
     $('#message').append("<img id='checkmark' src='images/check.png' />"); 
    }); 
    } 
}); 
return false; 

希望這可以幫助。

相關問題