<body>
<?php
if(isset($_POST['vendor_add_submit'])){
//INSERT INTO DB
unset( $_POST['vendor_add_submit'] );
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" >
<label>Email</label>
<input type="text" name="vendor_email" value="" />
<input type="submit" name="vendor_add_submit" value="SAVE" />
</form>
</body>
unset( $_POST['vendor_add_submit'] );
用于防止在页面刷新时多次插入db。我在未设置之前和之后使用print_r($_POST['vendor_add_submit'] )
进行了测试,发现unset()
函数不起作用。
如何实现未设置功能的目的,PLZ?
答案 0 :(得分:3)
您的方法不起作用,您只需编辑PHP脚本已收到的数据。如果用户刷新浏览器,那么它将再次提交相同的数据,PHP将使用浏览器发送的数据填充一个全新的$_POST
。
如果要停止刷新重新提交数据,请使用POST-REDIRECT-GET pattern。
答案 1 :(得分:3)
Unset不会阻止刷新将POSTed数据重播到脚本。未设置的函数为该脚本的剩余执行消除了它,但刷新是一个新的执行。
您可以在插入后简单地将浏览器重定向到输入页面,这样后续刷新将是安全的。
//INSERT INTO DB
//...
header('Location: samepage.php');
exit();
我确信还有其他方法可以实现这一目标。
答案 2 :(得分:0)
$ _POST值只会在服务器端被删除意味着在那一个请求上PHP将无法查看或使用它(您将其删除)。
但是您在页面的HTML上呈现“提交”按钮,因此每当有人访问该页面并提交表单时,他们将再次提交该值。并且您将在当前请求中再次删除PHP。因此,每个请求都会将数据插入数据库。
您可能希望更确切地检查记录是否已经存在(或者如果用户已经存在,但不确定您想要什么),然后使用header('Location: otherpage.php');
将其重定向到页面。
希望有帮助...