【发布时间】: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