PHP HTML表单数组-如何判断用户何时添加新条目
我为标题的模糊性道歉,但我发现这很难用语言表达 我有一个表单,其中包含PHP HTML表单数组-如何判断用户何时添加新条目,php,arrays,forms,Php,Arrays,Forms,我为标题的模糊性道歉,但我发现这很难用语言表达 我有一个表单,其中包含key:value对,这些对从数据库中读取,作为值放入输入,然后重新读取(可能编辑、删除或添加到)。在服务器端,我需要弄清楚用户做了什么来破坏我的数据 例如: <input type='text' name='keyID[]' value='1'/> <input type='text' name='key[]' value='someKey'/> <input type='text' name=
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[]
)
我一直在对当前存储的keyID[]
s列表使用array_diff()
来确定要删除和更新什么,但是当新输入没有keyID[]
时(但同时会有键[]
和值[]
),我如何确定添加了什么
此外,我无法保证数组值的提交顺序,因此我不认为计数到keyID[]
数组的末尾,然后检查其他数组中的额外值,每次都能得到正确的值
有什么想法吗?我想你可能有点太复杂了。您可以在字段名称中传递ID,以便直接识别它。通常,这将是数据库中的记录ID或其他唯一标识符。让我们假设复选框打开/关闭“特色”标志-因此您可以执行类似于以下操作:
<input name="featured[<?php echo $record['id']; ?>]" value="<?php echo $record['value']; ?>">
我想你可能有点过于复杂了。您可以在字段名称中传递ID,以便直接识别它。通常,这将是数据库中的记录ID或其他唯一标识符。让我们假设复选框打开/关闭“特色”标志-因此您可以执行类似于以下操作:
<input name="featured[<?php echo $record['id']; ?>]" value="<?php echo $record['value']; ?>">
一个想法是稍微更改最后一个块,如下所示:
...
<input type='hidden' name='keyID[]' value='NEW'/>
<input type='text' name='key[]' value='aCompletelyNewKey'/>
<input type='text' name='value[]' value='aCompletelyNewValue'/>
。。。
这样,所有三个数组将具有相同数量的元素。此外,现在看一件东西是否是新的已经不重要了。一个想法是稍微改变最后一块,如下所示:
...
<input type='hidden' name='keyID[]' value='NEW'/>
<input type='text' name='key[]' value='aCompletelyNewKey'/>
<input type='text' name='value[]' value='aCompletelyNewValue'/>
。。。
这样,所有三个数组将具有相同数量的元素。此外,现在查看某个内容是否是新的已不再重要。如果您将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'/>
如果将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'/>
对于新输入,无论如何都应该包括keyID[]
,只需给它一个空白值value=''
。这样,当您循环时,您可以检查该值。如果它是空的,那么你知道这是一个新的k/v对被添加。常识再次获胜:)谢谢各位,这是真的,我已经把问题复杂化了,简单的解决方案是最好的:)对于新的输入,你应该包括keyID[]
无论如何,给它一个空白值value='
。这样,当您循环时,您可以检查该值。如果它是空的,那么你知道这是一个新的k/v对被添加。常识再次获胜:)谢谢,伙计们,这是真的,我已经把问题复杂化了,简单的解决方案是最好的:)无论你最终采用什么方法,这都很有意义。无论你最终采用什么方法,这都很有意义。