作者:linjiabin43 | 2023-08-30 17:10
我在表单中有两个提交 按钮.如何确定哪个服务器被服务器端?
1> Parrots..: 您可以为每个输入赋予不同的值并保持相同的名称:
然后在代码中检查以查看触发的内容:
if ($_POST['action'] == 'Update') {
//action for update here
} else if ($_POST['action'] == 'Delete') {
//action for delete
} else {
//invalid action!
}
唯一的问题是你将逻辑绑定到输入中的文本.您也可以为每个人提供一个唯一的名称,并检查$ _POST是否存在该输入:
并在代码中:
if (isset($_POST['update_button'])) {
//update action
} else if (isset($_POST['delete_button'])) {
//delete action
} else {
//no button pressed
}
对于i18n目的,使用所选答案可能更好.
OP没有要求PHP.
@LaszloPapp作为答案本身说,如果您使用上面选择的答案,您可以将表格国际化(即翻译成不同的语言或方言)而不影响逻辑.如果您使用此答案中的第一个选项,则逻辑取决于表单实际呈现的语言.
i18n = i [nternationalizatio] n,18代表第一个和最后一个之间的18个字母.
@RobinGreen:请原谅?
如果你在jQuery中使用$(form).serialize(),这不起作用.
2> Greg..: 如果您为每个人命名,则点击的名称将作为任何其他输入发送.
还要确保按钮名称的名称正确!例如,"button-1"不起作用.可以为某些人节省很多麻烦,所以请记住这一点.
通常,表单中的所有输入都与表单一起发送.由于仅在单击时提交按钮的值,因此您必须搜索这些预定义名称的表单值.我认为另一个答案(http://stackoverflow.com/a/21778226/88409)涉及给它们所有相同的名称,具有不同的值,更有意义.然后,您只需获取单个已知表单字段名称下的值.它还使得更明显的是,仅为给定的输入名称发送一个值(单击的值),就像单选按钮的工作方式(相同的名称,不同的值)一样.
@Triynko,正如罗宾格林在回答的评论中所说,这个更适合国际化.例如,如果页面以西班牙语呈现,则按钮的文本可能会有所不同.因此,在这种情况下,拥有代码的逻辑取决于该按钮的文本将会中断.通过名称更安全,因为它是一个不向用户显示的值,因此可以更多地被视为"私有"变量而不是用户的消息.
3> kiril..: 更好的解决方案包括使用按钮标签提交表单:
这种方式对国际化和多种显示语言没有任何不便(在前一种解决方案中,按钮的标签也是发送给服务器的值).
显然浏览器行为不同; 一些提交值属性,其他提交标签之间的字符串......所以要小心这一点.
@Jeroen Bull.哪些浏览器在标签之间提交文本?输入或按钮应该只提交'value'属性.按钮可以在其标签之间包含任何内容,包括图像或其他HTML标签.这就是在输入元素上使用按钮的全部意义,并且您试图建议浏览器将所有内容转储为值?没门.
好的,你的权利.然后,我检查了HTML5 W3C工作草案.引用:>> value属性为表单提交提供元素的值.元素的值是元素的value属性的值(如果有),否则为空字符串.>>注意:如果按钮本身用于启动表单提交,则按钮(及其值)仅包含在表单提交中.
@kiril该链接的片段使用两种不同类型的`
`:`submit`和`reset`.请注意,`reset`不提交任何内容,只是重置表单.所以Jeroen的论点仍然存在. 4> Leo..: 有一个新的HTML5方法,formaction
属性:
First action
Second action
显然这在IE9及更早版本中不起作用,但对于其他浏览器,你应该没问题(参见:w3schools.com HTML 编队属性).
就个人而言,我通常使用Javascript远程提交表单(以获得更快的感知反馈),这种方法作为备份.在两者之间,唯一未被覆盖的人是IE <9且禁用Javascript.
当然,如果您基本上采用相同的操作服务器端,无论按下哪个按钮,这可能都是不合适的,但通常如果有两个用户端操作可用,那么它们也将映射到两个服务器端操作.
编辑:
正如Pascal_dher在评论中所指出的,该属性也可以在
标签上使用.
给Rails用户的注意:如果使用`form_tag`创建表单,添加此属性将无效。我使它起作用的唯一方法是切换到`form_for`并使用`f.submit formaction:'your_path'`。 5> Peter Bailey..: 这非常容易测试
只需将其放在HTML页面中,单击按钮,然后查看URL
在这里使用GET是一种有点不好的做法,应该尽可能使用POST. @Syncrossus这是出于测试目的。 6> MevlütÖzdemi..:
7> 小智..: 使用格式HTML属性
8> Joakim..: 也许建议的解决方案在2009年工作,但我已经测试了所有这些赞成的答案,没有人在任何浏览器中工作.
只有我找到工作的解决方案是这样的:(但我认为使用它有点难看)
服务器代码/服务器脚本 - 您提交表单的位置:
demo_form.php
资料来源:W3Schools.com
10> Shule..: 由于您未指定要使用的服务器端脚本编写方法,因此,我将为您提供一个使用CherryPy的适用于Python的示例(尽管它也可能对其他上下文有用):
Create a new account
Log into your account
您可以使用名称(使用
标记代替
)来代替使用值来确定按下了哪个按钮。这样,如果您的按钮碰巧具有相同的文本,则不会造成问题。所有表单项的名称(包括按钮)都作为URL的一部分发送。在CherryPy中,每个参数都是执行服务器端代码的方法的参数。因此,如果您的方法仅具有**kwargs
其参数列表(而不是乏味地键入每个表单项的每个名称),那么您可以检查查看按下了哪个按钮,如下所示:
if "register" in kwargs:
pass #Do the register code
elif "login" in kwargs:
pass #Do the login code
11> Thielicious..: 定义name
为array
。
服务器代码示例(PHP):
if (isset($_POST["submit"])) {
$sub = $_POST["submit"];
if (isset($sub["save"])) {
// save something;
} elseif (isset($sub["delete"])) {
// delete something
}
}
elseif
非常重要,因为如果没有解析,两者都会被解析。请享用。