1

这有点复杂,所以我希望我说得对。

我有一个加载选项列表并以一个静态输入开始的表单:

<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。

用户可以动态添加更多输入字段,他们可以删除现有字段。

到目前为止,所有这些都运行良好。我的问题是访问输入字段中包含的数据。提交表单后,我需要能够执行三个功能:

  1. 如果用户删除了一个选项,我需要从数据库中删除它
  2. 如果用户添加了一个字段,我需要将其插入数据库
  3. 如果用户更改现有字段的值,我需要在数据库中更新它

我可以通过使用输入名称'keyword_name[]'作为数组来访问输入字段中的数据,然后我可以遍历数组。

但是,这并不涉及具有特定 ID 号的现有选项。我可以为从 Ajax 调用加载的字段分配 ID 号,但是静态字段和用户添加的字段不会有 ID 号,因为这些不是必需的。这些字段将简单地插入到数据库中。

所以我想我的问题是我将如何确定哪个现有选项属于数据库中的哪个 ID 号。我应该补充一点,这些选项不是唯一命名的。

我考虑过一些事情,例如:

  1. 仅为 Ajax 加载的字段提供 ID 号
  2. 在通过每个输入提交循环并使用用户不会提供的分隔符将 ID 附加到名称值的末尾。IE:选项二---1
  3. 使用 PHP 循环遍历数组并在匹配 '---' 的地方分解数组值
  4. 如果在 '---' 上找到匹配项,则更新数据库,否则插入数据库

有什么想法吗?

更新

我将输入字段分为两个数组: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 返回这些值是字符串而不是数组。这里缺少一些东西......

4

2 回答 2

1

我建议在数据库端使用自动增量 ID。当您加载页面时,将 id 放置在这样的位置,<span class="field-wrapper" id="$row[id]">而不是在删除时使用:

$('.remove-keyword').on('click', function(){
    var id = $(this).parents('span').attr('id');
    place ajax post here with data sent being this id.
});

基本上添加关键字是相同的,除了使用 ajax 发布到您的脚本,并mysql_insert_id();在您的脚本中用作返回 id,而不是动态创建下一行。

于 2012-05-24T03:56:50.357 回答
1

当通过 AJAX 加载字段时,为它们分配 ID

<input class="keys" type="text" id="keyword_11" name="keywords[]" value="Option Two" />
<input class="keys" type="text" id="keyword_12" name="keywords[]" value="Option Two" />

单击提交后,然后在 jQUery 中,您可以遍历关键字

var new_keywords=Array();
var existing_keywords=Array();
$("input[name^='keywords']").each(function(){
  var id = $(this).attr("id");
  var val=$(this).val();
  if(id=="" && val!="")
  {
   new_keywords.push($(this).val());
  }
  else if(id!="")
  {
    var keyword_id=id.split("_")[1];
    existing_keywords.push({"id":keyword_id,"val":val});
  }
});

 // call AjAX function add new_keywords to database
 // call Ajax function to update existing keywords

更新 1

在将 new_keywords 添加到数据库的成功功能中,请通过 AJAX 更新现有 dom,这样如果您添加新关键字,则编辑它并尝试保存它将具有与之关联的 ID。

于 2012-05-24T04:04:56.737 回答