未设置表单提交按钮

时间:2011-06-02 14:46:38

标签: php html

<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?

3 个答案:

答案 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');将其重定向到页面。

希望有帮助...