我为标题的模糊性道歉,但我发现很难用语言表达。
我有一个包含key:value
对的表单,这些表从数据库中读取,在输入中作为值放置,然后再次读回(可能已编辑,删除或添加)。在服务器端,我需要弄清楚用户用什么来破坏我的数据。
示例:
<input type='text' name='keyID[]' value='1'/>
<input type='text' name='key[]' value='someKey'/>
<input type='text' name='value[]' value='someValue'/>
<input type='text' name='keyID[]' value='2'/>
<input type='text' name='key[]' value='someOtherKey'/>
<input type='text' name='value[]' value='someOtherValue'/>
<input type='text' name='keyID[]' value='3'/>
<input type='text' name='key[]' value='yetAnotherKey'/>
<input type='text' name='value[]' value='yetAnotherValue'/>
<input type='text' name='key[]' value='aCompletelyNewKey'/>
<input type='text' name='value[]' value='aCompletelyNewValue'/>
提交表单时,我删除原始数据,通过键执行foreach循环(将其他数组的第n个值作为我的新数据),然后将其添加到数据库中。
这直到我遇到了更新的数据库设计 - 现在我需要能够告诉尚未提交的内容(在页面上删除),还有什么(已更改或保留原样)什么是新的(没有keyID[]
)。
我一直在使用array_diff()
对照当前存储的keyID[]
列表来确定要删除和更新的内容,但是如何确定在不存在时添加的内容新输入keyID[]
(但key[]
和value[]
会同时出现?
此外,我不能保证数组值的提交顺序,所以我不认为计数到keyID[]
数组的末尾,然后检查其他数组的额外值会给我每次都是正确的值。
有什么想法吗?
答案 0 :(得分:2)
一个想法是稍微改变最后一个块,如下所示:
...
<input type='hidden' name='keyID[]' value='NEW'/>
<input type='text' name='key[]' value='aCompletelyNewKey'/>
<input type='text' name='value[]' value='aCompletelyNewValue'/>
这样,所有三个数组都将具有相同数量的元素。此外,现在看看是否有新事物是微不足道的。
答案 1 :(得分:1)
我认为你可能会稍微复杂一点。您可以在字段名称中传递ID,以便直接识别。通常这将是来自数据库的记录ID,或一些其他唯一标识符。让我们假设复选框打开/关闭'特色'标志 - 所以你可以做的是类似的事情:
<input name="featured[<?php echo $record['id']; ?>]" value="<?php echo $record['value']; ?>">
$ record ['value']总是会保存一些数据(可能只是一个空白字符串),它会在提交时更新/处理。
当你提交时,你需要迭代你的$ _POST ['featured']数组作为$ key =&gt; $ value并将记录的值设置为$ value,其中记录id等于$ key 。如果要更新的记录不存在,可以使用INSERT ON DUPLICATE KEY UPDATE sql命令创建一个新记录。
我希望有所帮助!
答案 2 :(得分:1)
如果将keyID放在每个记录[]中,您可以在数据库中查看更新的记录,以及如何更新。
例如:
<input type='text' name='key[1]' value='someKey'/>
<input type='text' name='value[1]' value='someValue'/>
<input type='text' name='key[2]' value='someOtherKey'/>
<input type='text' name='value[2]' value='someOtherValue'/>
<input type='text' name='key[3]' value='yetAnotherKey'/>
<input type='text' name='value[3]' value='yetAnotherValue'/>
<input type='text' name='key[n]' value='aCompletelyNewKey'/>
<input type='text' name='value[n]' value='aCompletelyNewValue'/>
请注意,[n]
,如果通过javascript生成,则需要自动递增。
另一个建议是反转keyID和key|value
名称,以便您可以接收每个数组元素并将其与数据库进行比较。但这需要一个前缀(如表名):
<input type='text' name='tablename[1][key]' value='someKey'/>
<input type='text' name='tablename[1][value]' value='someValue'/>