1

我创建了一个留言簿,用户可以在其中通过 HTML 表单添加条目。向留言簿提交数据后,部分用户刷新页面。我知道的所有浏览器都会重新提交数据。然后。有没有办法告诉浏览器,数据不应该重新提交?

在成功将数据存储到数据库后,我曾经进行过重定向。但是,现在我想向用户提示一些附加信息,例如“感谢您输入标题为'...'。”或“条目的腼腆已发送到您的电子邮件地址...”。我真的很想避免将所有值添加到 GET-Parameters 以便能够在转发后使用信息。

在用户单击“刷新”按钮后,是否有另一种方法(没有转发!)防止浏览器再次提交数据?

4

3 回答 3

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;
?>
于 2012-07-24T07:51:09.523 回答
1

在用户单击“刷新”按钮后,是否有另一种方法(没有转发!)防止浏览器再次提交数据?

是的 - Ajax - 你仍然可以显示所有成功/失败消息甚至验证......

阅读这个 - 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;  

希望这可以帮助。

于 2012-07-24T08:11:36.253 回答
0

redirect the user with a custom message attached to the redirect location after POST action performed, for example

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

or

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

or

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

and then switch GET parameters to show corresponding message type. or user AJAX POSTING :)

于 2012-07-24T07:57:34.427 回答