Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单中的多个提交按钮_Php_Html_Forms - Fatal编程技术网

Php 表单中的多个提交按钮

Php 表单中的多个提交按钮,php,html,forms,Php,Html,Forms,嘿,我对网络编程非常陌生。在过去的几天里,我一直在学习PHP,但有一件事让我感到困惑 我的代码中有一个表单标记,它有两个提交按钮来操作数据。 因为我的表单标签上只能有一个动作定义,所以它只能引导我到一个页面。(不太确定) 现在,根据表单上单击的按钮,我想加载一个不同的页面。 一种方法是检查在if-else构造中单击的按钮,然后在分支中使用echo“…”,并将其显示为一个不同的页面。但出于某种原因,它似乎并不正确。有人能给我一个更好的解决办法吗?谢谢。一种方法是使用Javascript根据单击的控

嘿,我对网络编程非常陌生。在过去的几天里,我一直在学习PHP,但有一件事让我感到困惑

我的代码中有一个表单标记,它有两个提交按钮来操作数据。 因为我的表单标签上只能有一个动作定义,所以它只能引导我到一个页面。(不太确定)

现在,根据表单上单击的按钮,我想加载一个不同的页面。
一种方法是检查在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这是我见过的最有趣的评论。你不明白你在说什么:)谢谢你让我知道:)