【问题标题】:Multiple submit button in a form表单中的多个提交按钮
【发布时间】:2011-04-02 05:16:31
【问题描述】:

嘿,我对 Web 编程很陌生。过去几天我一直在学习 PHP,但我被困在一件事上。

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

现在,根据表单上单击的按钮,我想加载不同的页面。 一种方法是检查在 if-else 结构中单击的按钮,然后在分支中使用 echo '...' 并显示为好像它是不同的页面。但由于某种原因,它似乎不正确。有人可以给我一个更好的解决方案吗?谢谢。

【问题讨论】:

  • 问题在于,除了单击提交按钮之外,还有其他方法可以提交表单——例如,当您在文本input 中按下回车键时怎么样?我认为您应该在此行为的末尾添加一个单选按钮/选择/复选框,而不是两个提交按钮。

标签: php html forms


【解决方案1】:

一种方法是使用 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,你不应该假设它会出现)。使用服务器端分支是正确的方法。
  • @David - 这是真的,我应该在答案中说明这一点。我的解决方案只有在他的应用程序要求用户拥有 Javascript 时才有效。
  • 这太棒了!我将在某个时候使用 JS!谢谢!但是现在我暂时只是做了两个表格,所以我得到了两个动作。谢谢!
【解决方案2】:

但由于某种原因,它似乎不正确。

这是错误的假设。
任何其他解决方案都将是最糟糕的。

在服务器端检查是唯一可靠的解决方案。
但是分支中的echo 不是必需的。还有很多其他方法。
使用include 语句是最明显的一种。

【讨论】:

  • 当我们谈到 MVC 架构时,我觉得这是不对的,而且它是一种蹩脚的做事方式。
  • @Gooner LOL 这是我见过的最有趣的评论。你不明白你在说什么:)
  • 感谢您告诉我 :)
【解决方案3】:

添加另一个基于 @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。接下来,您需要通过检查特定按钮上发送的值来了解正在单击的按钮

【讨论】:

  • 这将在重定向时丢弃所有表单数据,但在其他方面与问题描述的方法相同。
【解决方案4】:

仅作为参考... int HTML5 按钮可以重新定义表单的操作、方法、类型等。http://w3schools.com/html5/tag_button.asp 对我来说,这是控制表单的好方法 :)

【讨论】:

  • 这个答案在 2030 年可能会很有用,因为尚未实现该功能的浏览器可能还不够普遍而无需担心。
  • 我知道......这就是为什么我说“作为参考”......我认为这是一个很好的功能
猜你喜欢
  • 1970-01-01
  • 2017-04-12
  • 2010-09-05
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多