Php 表单中的多个提交按钮
嘿,我对网络编程非常陌生。在过去的几天里,我一直在学习PHP,但有一件事让我感到困惑 我的代码中有一个表单标记,它有两个提交按钮来操作数据。 因为我的表单标签上只能有一个动作定义,所以它只能引导我到一个页面。(不太确定) 现在,根据表单上单击的按钮,我想加载一个不同的页面。Php 表单中的多个提交按钮,php,html,forms,Php,Html,Forms,嘿,我对网络编程非常陌生。在过去的几天里,我一直在学习PHP,但有一件事让我感到困惑 我的代码中有一个表单标记,它有两个提交按钮来操作数据。 因为我的表单标签上只能有一个动作定义,所以它只能引导我到一个页面。(不太确定) 现在,根据表单上单击的按钮,我想加载一个不同的页面。 一种方法是检查在if-else构造中单击的按钮,然后在分支中使用echo“…”,并将其显示为一个不同的页面。但出于某种原因,它似乎并不正确。有人能给我一个更好的解决办法吗?谢谢。一种方法是使用Javascript根据单击的控
一种方法是检查在if-else构造中单击的按钮,然后在分支中使用echo“…”,并将其显示为一个不同的页面。但出于某种原因,它似乎并不正确。有人能给我一个更好的解决办法吗?谢谢。一种方法是使用Javascript根据单击的控件切换表单的操作。以下示例使用jQuery库:
<form id="theForm" action="foo.php">
...
<input id="first" type="submit"/>
<input id="second" type="submit"/>
</form>
$(document).ready(function() {
$("#theForm input").click(function(e) {
e.preventDefault();
if(e.target.id == 'first') {
$("#theForm").attr("action", "somePage.php");
} else {
$("#theForm").attr("action", "anotherPage.php");
}
alert($("#theForm").attr("action"));
$("#theForm").submit();
});
});
...
$(文档).ready(函数(){
$(“#表单输入”)。单击(函数(e){
e、 预防默认值();
如果(e.target.id=='first'){
$(“#theForm”).attr(“action”,“somePage.php”);
}否则{
$(“#theForm”).attr(“action”,“anotherPage.php”);
}
警报($(“#theForm”).attr(“action”);
$(“#表格”).submit();
});
});
此处演示:
但出于某种原因,它似乎并不正确
这是错误的假设。任何其他解决方案都将是最糟糕的 在服务器端进行检查是唯一可靠的解决方案。
但是,分支中的
echo
是不必要的。还有很多其他方法。使用
include
语句最明显。添加另一个基于@karim79的解决方案,因为它是用PHP标记的:
<form id="theForm" action="foo.php">
...
<input id="first" name="button" value="first" type="submit"/>
<input id="second" name="button" value="second" type="submit"/>
</form>
...
在foo.php中,执行以下操作:
<?php
$submit = isset($_GET['button']) ? trim($_GET['button']) : '';
if($submit == 'first')
{
header('Location: somePage.php');
}
else if($submit == 'second')
{
header('Location: anotherPage.php');
}
?>
总结:
能够阅读您的按钮(2个提交按钮),您需要在每个按钮上添加
名称
。为了简单起见,只需在两个按钮上使用相同的名称。然后,添加不同的值
。接下来,您需要通过检查特定按钮上发送的值来了解正在单击的按钮作为参考…int HTML5按钮可以重新定义表单的操作,method、type等。对我来说,这是控制表单的好方法:)问题在于,除了单击提交按钮之外,还有其他提交表单的方法-例如,当您在文本input
中按enter键时如何?我认为您应该在该行为的末尾有一个单选按钮/select/复选框,而不是两个提交按钮。如果JavaScript为n,这将完全中断ot可用(有足够多的人被一对多的JS炸弹绊倒,并在那里安装了NoScript,你不应该认为它会)。使用服务器端分支是正确的方法。@David-这是真的,我应该在回答中说明这一点。我的解决方案只有在他的应用程序要求用户具有Javascript的情况下才是好的。这太棒了!我会在某个时候使用JS!谢谢!但现在我刚刚制作了两个表单,以便获得两个操作。谢谢!这将在重定向时丢弃所有表单数据,但在其他方面与问题描述的方法相同。这个答案在2030年可能会有用,因为没有实现该功能的浏览器可能不太常见。我知道。这就是为什么我说“作为参考”…我认为这是一个很好的特性,但当我们谈到MVC架构时,我觉得这是不对的,而且这是一种蹩脚的做事方式。@Gooner LOL这是我见过的最有趣的评论。你不明白你在说什么:)谢谢你让我知道:)