2010-08-22 226 views
3

嗨,我对Web编程非常陌生。过去几天我一直在学习PHP,但我陷入了一件事。表单中的多个提交按钮

我在我的代码中有一个窗体标签,它有两个提交按钮来操作数据。 由于我的表单标签只能有一个动作定义,因此它只能导向一个页面。 (不太确定)

现在取决于单击窗体上的按钮,我想加载一个不同的页面。 一种方法是检查在if-else结构中单击的按钮,然后在分支中使用echo'...'并显示为不同的页面。但由于某种原因,这看起来不正确。有人能给我一个更好的解决方案吗?谢谢。

+1

的问题是,有其他的方法好方法提交表单而不是点击一个提交按钮 - 例如,当你按下输入文本“输入”时如何?我认为你应该在最后有一个单选按钮/选择/复选框,而不是两个提交按钮。 – 2010-08-22 08:10:48

回答

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/

+0

如果JavaScript不可用,这将彻底破坏(并且有足够多的人绊倒了一对多的JS炸弹,并在那里安装了NoScript,你不应该假设它会)。在服务器端进行分支是正确的方法。 – Quentin 2010-08-22 08:44:03

+0

@大卫 - 这是真的,我应该在答案中说明。我的解决方案只有在他的应用程序*要求用户拥有Javascript的情况下才有用。 – karim79 2010-08-22 09:05:50

+0

这太棒了!我会在某个时候使用JS!谢谢! 但是现在我暂时只做了两种形式,以便得到两个动作。谢谢! – Gooner 2010-08-22 13:41:59

1

但它似乎不适合某些原因。

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

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

+0

当我们谈到MVC架构时,我认为这是不对的,除此之外它是一种蹩脚的做事方式。 – Gooner 2010-08-22 13:42:53

+0

@Gooner LOL这是我见过的最有趣的评论。你不明白你在说什么:) – 2010-08-22 14:00:52

+0

谢谢你让我知道:) – Gooner 2010-08-23 12:16:57

-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。接下来,您需要通过检查在特定按钮上发送的值来知道正在单击哪个按钮。

+0

这将丢弃所有的表单数据,当它重定向时,但它与问题描述的方法相同。 – Quentin 2010-08-22 08:45:30

0

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

+0

在2030年,当没有实现该功能的浏览器可能不足以担心时,此答案可能会有用。 – Quentin 2010-08-22 08:47:19

+0

我知道..这就是为什么我说“作为参考”...我认为这是一个很好的功能,虽然 – pleasedontbelong 2010-08-22 08:51:40