Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP HTML表单数组-如何判断用户何时添加新条目_Php_Arrays_Forms - Fatal编程技术网

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对被添加。常识再次获胜:)谢谢,伙计们,这是真的,我已经把问题复杂化了,简单的解决方案是最好的:)无论你最终采用什么方法,这都很有意义。无论你最终采用什么方法,这都很有意义。