我正在开发一个 php web 应用程序。
我有点好奇人们在检索对象时如何在 Web 表单中存储对象的主键值,以便他们可以通过使用检索到的键引用相同的记录来更新相关记录?
例如。我检索了 pk_id=10 的员工记录。当用户对对象进行更改时,我们需要更新 pk_id 10 的对象。所以我需要将 pk_id 存储在表单中。
我想将值存储在隐藏的输入字段中。这会是一个问题吗。
专业人士如何做到这一点?
rgds 里夫基
我正在开发一个 php web 应用程序。
我有点好奇人们在检索对象时如何在 Web 表单中存储对象的主键值,以便他们可以通过使用检索到的键引用相同的记录来更新相关记录?
例如。我检索了 pk_id=10 的员工记录。当用户对对象进行更改时,我们需要更新 pk_id 10 的对象。所以我需要将 pk_id 存储在表单中。
我想将值存储在隐藏的输入字段中。这会是一个问题吗。
专业人士如何做到这一点?
rgds 里夫基
Hidden input field is fine and a good solution.
Storing it in the session is also an option but if you're using the session a lot already you may as well use the hidden input, a session is almost the most secure option though.
One possible problem is that someone may change the value in their html form's hidden input before submitting the form; it's very unlikely though.
三种方式:
使用hidden input
,这就是它们的用途。
您可以在更新 url 的获取字段中携带 id。(如
update.php?pk_id=17
)因此,当您将表单发布到自身时,您仍然可以获得 id。
如果你想隐藏它,你可以在会话中存储 id。
有两种方式 - 由@marvin(即客户端)标识的方式,以及在会话中。
如果您使用客户端标识,请非常非常小心。在您的示例中,如果某人知道他们的主键,那么将他们的薪水设置为一百万美元将是非常容易的。@Thomas Hudspith-Tatham 说这不太可能——我不同意,尤其是对于一个面向公众的网站。在互联网的早期,有几个电子商务商店不得不以 0.01 美元的价格接受高端产品的订单,因为该应用程序使用客户端机制在页面之间传输数据。
顺便说一句,在修改数据时,使用 POST 而不是 GET 是一种很好的形式 - 因此隐藏字段在风格上比 URL 参数更好。
使用会话有点痛苦——您必须担心负载平衡和 cookie 过期,但攻击者要更改您不希望他们更改的数据要困难得多。
是的。你说的对。将主键 ID 存储在隐藏字段中是个好主意。如果您愿意,也可以从 URL 传递相同的内容。(获取参数)