2 回答
TA贡献1906条经验 获得超3个赞
<?php echo $_SERVER['PHP_SELF'];?>给出当前的 URL,因此因为它们位于同一页面,所以会导致问题。您可以通过检查页面Ctrl + Shift + i然后单击ElementsChrome 来检查这一点。
一种解决方案可能是为两个表单提供不同的 URL 或在发布请求上使用参数。例如<?php echo $_SERVER['PHP_SELF'].'?form=form1';?>-&<?php echo $_SERVER['PHP_SELF'].'?form=form2';?>
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(isset($_GET['form'])){
if($_GET['form'] == 'form1'){
//code for form1
}else{
//code for form2
}
}
}
TA贡献1825条经验 获得超6个赞
好吧,让我们开始讨论为什么会发生这种情况。
HTML 的参数action告诉浏览器使用表单数据发送 POST 请求的 URL。在您的例子中,它是$_SERVER['PHP_SELF'],这是当前的 PHP 脚本。您对这两种形式使用相同的内容。
当提交其中一份表单时,您的 PHP 脚本将被调用,并且脚本中的所有 PHP 都会被执行。第一部分(第一个表单之后的部分)检查if ($_SERVER["REQUEST_METHOD"] == "POST"),确定这是一个 POST 请求,并尝试继续。之后,第二部分(第二个表单之后的部分)使用完全相同的检查,确定是的,这是一个 POST 请求,并尝试继续进行。
理想情况下,使用两个不同的页面来处理两种不同的表单会更干净;但如果您希望将所有内容保留在同一页面中,则可以使用几个不同的选项来区分两者。
1) 按照@sauhardnc 的建议,在每个表单的操作属性中使用不同的查询参数。表格看起来像:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?form=form1">
...
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?form=form2">
而 PHP 端会做类似的事情
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_GET['form'] == 'form1') {
// code for form1
} else {
// code for form2
}
}
2) 在每个表单中使用不同的输入。表格看起来像:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
...
<input type="hidden" name="form" value="form1">
</form>
...
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
...
<input type="hidden" name="form" value="form2">
</form>
而 PHP 端会做类似的事情
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_REQUEST['form'] == 'form1') {
// code for form1
} else {
// code for form2
}
}
- 2 回答
- 0 关注
- 119 浏览
添加回答
举报