这有点复杂,所以我希望我说得对。
我有一个加载选项列表并以一个静态输入开始的表单:
<span id="keyword_list_out" class="input"><input class="keys margin-bottom" type="text" name="keywords[]" />
加载页面时,Ajax 调用会显示属于列表的其他输入字段,例如:
<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option One" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span>
<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option Two" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span>
这些选项附加在第一个静态输入字段 ID 的顶部:keyword_list_out。
用户可以动态添加更多输入字段,他们可以删除现有字段。
到目前为止,所有这些都运行良好。我的问题是访问输入字段中包含的数据。提交表单后,我需要能够执行三个功能:
- 如果用户删除了一个选项,我需要从数据库中删除它
- 如果用户添加了一个字段,我需要将其插入数据库
- 如果用户更改现有字段的值,我需要在数据库中更新它
我可以通过使用输入名称'keyword_name[]'作为数组来访问输入字段中的数据,然后我可以遍历数组。
但是,这并不涉及具有特定 ID 号的现有选项。我可以为从 Ajax 调用加载的字段分配 ID 号,但是静态字段和用户添加的字段不会有 ID 号,因为这些不是必需的。这些字段将简单地插入到数据库中。
所以我想我的问题是我将如何确定哪个现有选项属于数据库中的哪个 ID 号。我应该补充一点,这些选项不是唯一命名的。
我考虑过一些事情,例如:
- 仅为 Ajax 加载的字段提供 ID 号
- 在通过每个输入提交循环并使用用户不会提供的分隔符将 ID 附加到名称值的末尾。IE:选项二---1
- 使用 PHP 循环遍历数组并在匹配 '---' 的地方分解数组值
- 如果在 '---' 上找到匹配项,则更新数据库,否则插入数据库
有什么想法吗?
更新
我将输入字段分为两个数组:existing_options[] 和 new_options[]。
在发布之前我的 Jquery 脚本中,我添加了:
var existing_options = $('input[name=existing_options]').attr('value');
var new_options = $('input[name=new_options]').attr('value');
正在发送的 Ajax 数据是:
'existing_options[]=' + existing_options + '&new_options[]=' + new_options;
然而 PHP 返回这些值是字符串而不是数组。这里缺少一些东西......