如何使用两个提交按钮,并区分哪个按钮用于提交表单?

49

目前,我有一个HTML表单,在这个表单中用户将输入文章的标题和正文。当用户提交时,会出现两个按钮供选择。其中一个是“保存”文章而不发布,另一个是“发布”文章并使其公开。

我正在使用PHP,并且正在尝试弄清楚如何判断哪个按钮被使用了,以便将相应的值存储在数据库中。

<td>
<input type="submit" class="noborder" id="save" value="" alt="Save" tabindex="4" />
</td>
<td>
<input type="submit" class="noborder" id="publish" value="" alt="Publish" tabindex="5" />
</td>

可能我之前应该提到这一点,但是我无法给按钮赋值,因为按钮是一个图片,所以文本会显示在其上方。

4个回答

106

为每个元素添加一个name属性。只有被点击的name属性才会被发送到服务器。

<input type="submit" name="publish" value="Publish">
<input type="submit" name="save" value="Save">

然后

<?php
    if (isset($_POST['publish'])) {
        # Publish-button was clicked
    }
    elseif (isset($_POST['save'])) {
        # Save-button was clicked
    }
?>

编辑:将 value 属性更改为 alt。不确定这是否是图像按钮的最佳方法,您特别不想使用 input[type=image] 吗?

编辑:由于此回答一直受到赞同,因此我决定将奇怪的 alt/value 代码更改为真正的提交输入。我相信原问题要求某种形式的图像按钮,但现在有更好的方法来实现它,而不是使用 input[type=image]


2
我刚刚尝试使用!empty()方法。既然你提到了,isset()可能会起作用。编辑:它确实有效。感谢您的建议! - fvgs
我不记得为什么选择使用按钮而不是图像,但我相信这是因为我无法将悬停应用于图像提交。 - fvgs
使用多个提交按钮的完美简单解决方案。 - commnux
在Safari中无法工作 - sql-noob

9
请给提交按钮命名并赋值,例如:
    <td>
    <input type="submit" name='mybutton' class="noborder" id="save" value="save" alt="Save" tabindex="4" />
    </td>
    <td>
    <input type="submit" name='mybutton' class="noborder" id="publish" value="publish" alt="Publish" tabindex="5" />
    </td>

然后在您的PHP脚本中,您可以检查:

if($_POST['mybutton'] == 'save')
{
  ///do save processing
}
elseif($_POST['mybutton'] == 'publish')
{
  ///do publish processing here
}

1
我无法给按钮赋值,因为它们是图片。如果我分配值,那么该文本将显示在我的图像顶部。 - fvgs
1
如果是这种情况,您可以像@powerbuoy建议的那样拥有两个具有不同名称的不同按钮。然后在php脚本中检查哪个按钮已被提交。 - Dr. Dan
他说他无法在按钮上放置值,因为它们是图像。我认为那样也行不通。 - WatsMyName

2
今日免费次数已满, 请开通会员/明日再来
<td>

<input type="submit" name="save" class="noborder" id="save" value="Save" alt="Save" 
tabindex="4" />

</td>

<td>

<input type="submit" name="publish" class="noborder" id="publish" value="Publish" 
alt="Publish" tabindex="5" />

</td>

在PHP中,

<?php
if($_POST['save'])
{
   //Save Code
}
else if($_POST['publish'])
{
   //Publish Code
}
?>

2
如果您无法在按钮上放置值,我有一个简单的解决方案。可以添加一个隐藏字段,在提交之前,当其中一个按钮被点击时,将隐藏字段的值填充为1(如果是第一个按钮)或2(如果是第二个按钮)。在提交页面检查此隐藏字段的值以确定哪个按钮被点击。请注意保留HTML标签。

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