如何清除表单数据,以便刷新不重复数据而不转发?

时间:2012-07-24 07:42:55

标签: php html browser refresh

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

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

在用户点击“刷新”按钮后,还有另一种方式(没有前进!)让浏览器再次提交数据吗?

3 个答案:

答案 0 :(得分: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 :(得分: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;  

希望这有帮助。

答案 2 :(得分: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 POSTING:)