我创建了一个留言簿,用户可以通过HTML表单添加条目。将数据提交到留言簿后,一些用户刷新页面。我知道的所有浏览器都会重新提交数据。然后。有没有办法告诉浏览器,不应该重新提交数据?
在成功将数据存储到数据库之后,我曾经有过重定向。但是,现在我想向用户提供一些额外的信息,例如“感谢您输入的标题为'......'。”或“条目的腼腆被发送到您的电子邮件地址......”。我真的想避免将所有值添加到GET-Parameters以便能够在转发后使用这些信息。
在用户点击“刷新”按钮后,还有另一种方式(没有前进!)让浏览器再次提交数据吗?
答案 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:)