2011-06-02 126 views
1
<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']);用于防止页面刷新时多次插入数据库。我使用print_r($_POST['vendor_add_submit'])在未设置前后进行了测试,发现unset()函数不起作用。未设置表单提交按钮

我该如何达到unset函数的目的呢?

+0

@evolve 2,好,我会好好照顾 – 2011-06-02 17:25:50

+0

是这是什么意思,采摘绿色对号旁边为你的问题的正确答案..看到你的个人档案列表的问题,大多数人都没有接受答案。 – Fosco 2011-06-02 22:17:51

回答

3

未设置不会停止刷新已发布的数据到脚本的刷新。未设置的函数消除了该脚本的剩余执行,但刷新是新的执行。

您可以简单地将浏览器重新定向到插入页面之后进入入口页面,这样以后的刷新将是安全的。

//INSERT INTO DB 
//... 
header('Location: samepage.php'); 
exit(); 

我确信还有其他方法可以完成此操作。

+0

请在Johann du Toit看到我的评论 – 2011-06-02 17:21:16

+0

@sof_user我不得不说,请看我的答案的第一部分。 unset()'ing $ _POST与刷新完全没有关系。刷新会导致浏览器调用页面并重新生成新的填充的$ _POST。请按照我的建议添加重定向。 – Fosco 2011-06-02 17:45:07

+0

我认为,javascript window.location =“somepage”比header('location:somepage.php') – 2011-07-01 07:19:43

3

您的方法无法工作,您只需编辑PHP脚本收到的数据即可。如果用户刷新浏览器,那么它将再次提交相同的数据,PHP将使用浏览器发送的数据填充全新的$_POST

如果要停止刷新重新提交数据,请使用POST-REDIRECT-GET pattern

0

只有在服务器端才能删除$ _POST值这意味着在该请求上PHP将无法看到或使用它(您将其删除)。

但是,您正在页面的HTML上呈现提交按钮,因此每次有人访问该页面并提交表单时,他们都会再次提交该值。并且您将根据当前请求再次将其移除。所以每个请求都会将数据插入到数据库中。

您可能希望看看而不是检查记录是否已经存在(或者如果用户已经有一个,不知道您想要什么),然后使用header('Location: otherpage.php');将它们从页面重定向。

希望帮助...

+0

舒服得多,所以每次有人访问页面并提交表单时,他们都会再次提交值。“ - 如果有人点击提交按钮并提交数据,这是没有问题的。我只想阻止用户在第一次插入数据后刷新页面时向数据库中插入相同的数据。如果未设置$ _POST ['vendor_add_submit']删除其内容,则在页面刷新(而不是再次单击提交按钮)时,如何将相同的数据插入到数据库中? – 2011-06-02 17:19:25