表单中的多个提交按钮

3
嘿,我是一个刚接触Web编程的新手。我最近几天一直在学习PHP,但遇到了一个问题。
我的代码中有一个表单标签,其中包含两个提交按钮以操作数据。由于表单标签只能有一个操作定义,因此它只能导航至一个页面。(不太确定)
现在,根据表单中点击的按钮,我想要加载不同的页面。一种方法是在if-else结构中检查所点击的按钮,然后在各自的分支使用echo'...'来展示似乎是不同的页面。但出于某些原因,这种方法似乎并不正确。请问有没有更好的解决方案?谢谢!

1
问题在于,除了单击提交按钮之外,还有其他提交表单的方式 - 比如在文本输入框中按回车键怎么办?我认为你应该在最后放置一个单选按钮/下拉菜单/复选框来代替两个提交按钮。 - Yi Jiang
4个回答

2

一种方法是使用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(); 
    });
​});​

演示在这里:http://jsfiddle.net/CMEqC/2/

如果 JavaScript 不可用,这将完全崩溃(有足够多的人被 JS 炸弹绊倒并安装了 NoScript,因此您不应该假设它会存在)。使用服务器端分支是正确的方法。 - Quentin
@David - 这是真的,我应该在答案中说明。我的解决方案只适用于他的应用程序需要用户有Javascript的情况下。 - karim79
太好了!我会在某个时候使用JS!谢谢!但是现在我只是暂时制作了两个表单,以便我获得两个操作。谢谢! - Gooner

1
但是因为某些原因,这似乎不太对。
那是错误的假设。
任何其他解决方案都会更糟糕。
在服务器端进行检查是唯一可靠的解决方案。
但是分支中的回声并非必要。 还有很多其他方法。
使用include语句是最明显的方法。

当我们谈论MVC架构时,我觉得这不正确,而且这是一种无聊的做事方式。 - Gooner
@Gooner 哈哈,这是我见过最有趣的评论。你不明白自己在说什么 :) - Your Common Sense

0

这个答案可能在2030年很有用,因为那时还没有实现该功能的浏览器可能不太常见,不值得担心。 - Quentin
我知道,这就是为什么我说“作为参考”……不过我认为这是一个很好的功能。 - pleasedontbelong

-2

根据@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个提交按钮),您需要在每个按钮上添加name。为了简单起见,只需在两个按钮上使用相同的名称。然后,添加不同的value。接下来,您需要通过检查发送到该特定按钮的值来知道哪个按钮被点击


这将在重定向时丢弃所有表单数据,但它与问题描述的方法基本相同。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接