如何判断在PHP表单中单击了哪个按钮?

Son*_*Boy 74 php

我的页面上有几个按钮,但我不知道如何判断哪个按钮被点击了.这是我的两个按钮的标记:

<input type="submit" id="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" value="Delete" />
Run Code Online (Sandbox Code Playgroud)

goa*_*oat 136

使用html表单:

<input type="submit" name="btnSubmit" value="Save Changes" />
<input type="submit" name="btnDelete" value="Delete" />
Run Code Online (Sandbox Code Playgroud)

要使用的PHP代码如下所示:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Something posted

    if (isset($_POST['btnDelete'])) {
        // btnDelete
    } else {
        // Assume btnSubmit
    }
}
Run Code Online (Sandbox Code Playgroud)

您应始终假设或默认使用第一个提交按钮以显示在html源代码中.在实践中,各种浏览器在以下情况下可靠地发送带有发布数据的提交按钮的名称/值:

  1. 用户使用鼠标或指针设备逐字地单击提交按钮
  2. 或者重点关注提交按钮(它们标有选项),然后按下回车键.

存在提交表单的其他方式,并且某些浏览器/版本决定在某些情况下不发送任何提交按钮的名称/值.例如,当光标/焦点位于文本字段上时,许多用户通过按Enter键来提交表单.表格也可以通过javascript提交,以及一些更模糊的方法.

重要的是要注意这个细节,否则你的用户在提交表单时会真的感到沮丧,但"没有任何反应",他们的数据会丢失,因为你的代码未能检测到表单提交,因为你没有预料到提交按钮的名称/值可能不与发布数据一起发送.

此外,上述建议也应该用于具有单个提交按钮的表单,因为您应该始终采用默认提交按钮.

我知道互联网上充满了大量的表单处理程序教程,而且几乎所有这些都只是检查提交按钮的名称和值.但是,他们只是完全错了!

  • @Gorg如果你在谈论一个试图欺骗你的用户,那么你无能为力.这是您必须接受客户端/服务器编程的现实 - 客户端可以*轻松*向您发送*任何*所需的数据.用户服务器端存储(例如服务器端会话)通常存储您不希望用户能够篡改的数据. (2认同)

Mif*_*Fox 11

在HTML中:

<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" />
Run Code Online (Sandbox Code Playgroud)

在PHP中:

if (isset($_POST["btnSubmit"])){
  // "Save Changes" clicked
} else if (isset($_POST["btnDelete"])){
  // "Delete" clicked
}
Run Code Online (Sandbox Code Playgroud)

  • 对不起,得下来投票.使用回车键提交时表现不当的处理程序是我的一个小小的烦恼. (4认同)
  • @chris - 没关系,你提出了一个非常有效的观点.赞成你的回答. (4认同)