Php 在一个提交按钮中传递多条数据

Php 在一个提交按钮中传递多条数据,php,html,forms,Php,Html,Forms,我有一个数据表,其中有一个网站上的实体列表。列表中有“操作”按钮,如“编辑”、“删除”和“启用/禁用”(这是一个切换按钮,但这在这里并不重要)。编辑按钮实际上是一个链接,假装是一个按钮,所以我们不必在意,但是删除和启用按钮需要传递回脚本,这正是需要删除或启用的内容。理想情况下,这需要在一个“动作”参数下。有一个包含整个表 在下面的代码中,我将非常详细地解释我的实际代码,我通常使用PHP框架和模板引擎。然而,对于这些示例,我将使用尽可能简单的PHP。(不过,这个问题与PHP没有直接关系,主要是HT

我有一个数据表,其中有一个网站上的实体列表。列表中有“操作”按钮,如“编辑”、“删除”和“启用/禁用”(这是一个切换按钮,但这在这里并不重要)。编辑按钮实际上是一个链接,假装是一个按钮,所以我们不必在意,但是删除和启用按钮需要传递回脚本,这正是需要删除或启用的内容。理想情况下,这需要在一个“动作”参数下。有一个
包含整个表

在下面的代码中,我将非常详细地解释我的实际代码,我通常使用PHP框架和模板引擎。然而,对于这些示例,我将使用尽可能简单的PHP。(不过,这个问题与PHP没有直接关系,主要是HTML和表单。)

以下是我的数据表中的一行示例:

<tr>
    <td><?php echo $item->name; ?></td>
    <td>
        <a href="edit.php?id=<?php echo $item->id; ?>" class="btn btn-default">Edit</a>
        <button type="submit" name="delete" value="<?php echo $item->id; ?>"></button>
    </td>
</tr>


只要代码正常工作,那么这两个选项都可以,尽管第二个选项看起来更好,因为您需要在其中编写更少的代码。如果您想添加更多操作,第二个选项也可以在以后轻松扩展。当您尝试第二个选项时,代码是否正常工作?您可能需要考虑输入验证和消毒,以防止XSS和SQL注入攻击。这两种方法都会很好,我想知道是否有更好的方法,2)如果不是,哪一种更好。实际上,我更倾向于第一个选项,因为它在语义上仍然符合键/值系统:这就像说
action[特别是delete]的id是:{id}
,是的,转义和XSS的东西都很好-正如我所说的,为了演示的目的,我简化了这段代码,不过,我只想说我在这方面做得很好,如果你想使用纯PHP(没有AJAX/JavaScript),这些方法是最好的。如果页面上有多个要编辑/删除的项,则会出现名称冲突(两种方法都有)。您可以为按钮元素指定唯一的名称,例如$item->id.“”.$action,然后完全删除值字段。然后,在处理表单的页面上,可以在下划线()上拆分输入名称,以获取数组中的项目id和操作,以便进一步处理。@Maximus2012感谢您的回答,我曾考虑通过命名约定进行此操作,在命名约定中可以拆分字段名称,但再次让人感觉有些不稳定。好吧,我想我们已经回答了这个问题,不管怎样——两者都可以,没有更好的办法。真倒霉
<tr>
    <td><?php echo $item->name; ?></td>
    <td>
        <a href="edit.php?id=<?php echo $item->id; ?>">Edit</a>
        <button type="submit" name="enable" value="<?php echo $item->id; ?>"></button>
        <button type="submit" name="delete" value="<?php echo $item->id; ?>"></button>
    </td>
</tr>
<button type="submit" name="action[enable]" value="<?php echo $item->id; ?>"></button>
<button type="submit" name="action[delete]" value="<?php echo $item->id; ?>"></button>
<button type="submit" name="action[<?php echo $item->id; ?>]" value="enable"></button>
<button type="submit" name="action[<?php echo $item->id; ?>]" value="delete"></button>