将 Primery 密钥值保留在 Web 应用程序表单中以供更新


keeping the primery key value in web application form for updation

我正在开发一个PHP Web应用程序。

我有点好奇人们在检索对象时如何在 Web 表单中存储对象的主键值,以便他们可以通过使用检索到的键引用同一记录来更新相关记录?

例如,我检索了 pk_id=10 的员工记录。 当用户对对象进行更改时,我们需要更新pk_id 10 的对象。 所以我需要将pk_id存储在表单中。

我想过将值存储在隐藏的输入字段中。 这会是一个问题吗?

专业的人怎么做?

RGDS里夫基

隐藏输入字段很好,是一个很好的解决方案。

将其存储在会话中也是一种选择,但如果您已经大量使用会话,则还可以使用隐藏的输入,会话几乎是最安全的选择。

一个可能的问题是,有人可能会在提交表单之前更改其html表单隐藏输入中的值;但这不太可能。

有两种方式 - 由@marvin(即客户端)标识的方式,以及在会话中标识的方法。

如果您使用客户端标识,请非常非常小心。在您的示例中,如果某人知道他们的主密钥,那么将他们的薪水设置为一百万美元将非常容易。@Thomas Hudspith-Tatham表示这不太可能 - 我不同意,尤其是面向公众的网站。在互联网的早期,有几次电子商务商店不得不以0.01美元的价格兑现高端产品的订单,因为该应用程序使用客户端机制在页面之间传输数据。

顺便说一下,在修改数据时,使用 POST 而不是 GET 是一种很好的形式 - 因此隐藏字段在风格上比 URL 参数更好。

使用会话有点痛苦 - 您必须担心负载平衡和 cookie 过期,但攻击者更难更改您不希望他们更改的数据。

三种方式:

  • 使用hidden input,这就是它们的用途。

  • 您可以在更新 url 的 get 字段中携带 id。喜欢
    update.php?pk_id=17 ) 因此,当您将表单发布到自身时,您仍然可以获取 ID。

  • 如果要隐藏 id,可以在会话中存储 id。

是的。你是对的。将主键 ID 存储在隐藏字段中是个好主意。如果您愿意,也可以从 URL 传递相同的内容。(获取参数)