【问题标题】:(CRUD) How to know which database records to target from html rows(CRUD) 如何从 html 行中知道要定位哪些数据库记录
【发布时间】:2021-07-12 12:47:01
【问题描述】:

一直在谷歌上搜索并尝试各种事情,但仍然无法弄清楚。

假设我有一个 html 表单,其中有一个包含行(和输入字段)的表格。这些行已由数据库(mysql)数据填充。这是一本有日记帐行的日记帐。

当用户更改某些表行的一个或多个值并随后按下保存按钮时,我只想更改数据库中受影响的行。

已经使用 delete * from table 一段时间了,然后重新插入所有表行。粗鲁,但现在它有效。 (但自动增量 ID 快速上升,其他表中的相关行有时会引发问题)

整个问题是我不喜欢将记录的 ID 发送给客户端并在按下保存按钮时将其发回的想法。除其他想法外,我认为内部 SQL ID 不属于客户端。

肯定有另一种方法,而且以前一定有人这样做过,对吧?

当然,您可以执行以下操作,例如跟踪客户端中的更改、使用 UUID(将它们插入表中并将其作为临时 ID 发送到客户端)或在客户端和表中保留行号。但这需要大量的工作,而且感觉不是很慢(呃)就是很麻烦。

当你让用户在 html 表中添加或删除行并处理数据库中的更改时,情况会变得更糟

有没有人指点我?我将不胜感激。

【问题讨论】:

  • 在数据库中,“更新”操作不同于“删除”+“重新插入”。 (否则不需要像 update [tablename] set xxxx=xxxxx where [key]=xxxxxxx 之类的语法)
  • “我认为内部 SQL ID 不属于客户端。” - 为什么不呢?像这样的 ID 在客户端代码/标记中无处不在。这绝对是最好的方法。看一下这个问题的网址,你看到的数字,就是这个问题的ID。在此注释的标记中,数据库 ID 显示为数据属性。在指向我的个人资料的超链接中,会出现我的特定内部用户 ID。
  • Gareth,是的,我知道 get 字符串,当然,对于某些事情,它很有帮助,并且在暴露它时不会造成任何伤害。但是对于更敏感的数据,如果您将其发送给客户,我仍然有点奇怪。虽然:如果我的每个客户都在自己的环境中工作,并且安全迫使他们只在自己的环境中工作,那么不会造成任何伤害。感谢您与我一起思考
  • 你说它是一个auto_increment列,所以这不能代表敏感数据?如果您使用的是自然主键(即真实数据不是无意义的整数),那么我会按照 Simon 的建议为每一行创建一个新的无意义的唯一标识符,但这只有在您现有的唯一标识符具有某种意义时才值得。

标签: php html mysql database crud


【解决方案1】:

我这样做的方法是在我的架构中添加一个CLIENT_ID 列(或类似的东西),这将是一个生成的uuid 并将其与其余数据一起发送到客户端,然后发送它当用户点击Save 时返回。这样您就不必公开内部 SQL ID,但您仍然可以识别数据库中的某些条目。我不确定您是否可以在不向客户端发送某种 ID 然后返回服务器的情况下执行此操作,即使可以,是否值得付出努力?

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多