acitvity.php
//Form start
<form action=''>
</form>
//Form End
//Get POST Values
<?php
$_POST[''];
?>
//End
如果我在提交表单后刷新页面,则会重新提交所有已发布的值,原因是所有值都在浏览器中,因此会重新提交。当我为此寻找解决方案时,我得到的信息是,如果表单和发布操作在单独的 php 文件中完成,那么刷新时发布值就不再有问题。
这是解决方案吗?但现在我必须在单个文件中同时执行,并且刷新时不应再次提交POST值..有什么办法可以做到这一点吗???
学习 PRG 模式,以便您可以正确地执行此操作:)
http://en.wikipedia.org/wiki/Post/Redirect/Get
例如,您正在尝试处理用户注册表单,因此您要做的是获取一堆POST
ed值,并将其保存到数据库中。
if(!empty($_POST)) {
// validate and save to db
// get last inserted user_id
}
执行此操作后,您不会返回具有先前POST
ed 值的同一页面,而是将新用户重定向到他的个人资料页面(假设您没有激活要求)
if(!empty($_POST)) {
// validate and save to db
// get last inserted user_id, say in $user_id
header("Location: /users/$user_id");
}
这样,浏览器就会重定向,每当用户点击刷新时,您就不会遇到重复注册的问题。
保存到数据库后,重新加载页面:
if ($_POST) {
// Save $_POST to database and other stuffs
// Reload current page to discard $_POST
header('Location: my_page.php');
}
这称为PRG或发布/重新加载/获取
您可以使用
unset($var)
来取消设置变量。但是,我认为问题出在浏览器上;他们中的一些人试图变得聪明,无论您何时刷新页面,都会记住表单数据。如果您在URL栏上点击"go"或"enter",它会进行"真正的"刷新。