1

これは少し複雑なので、この言葉が正しいことを願っています。

オプションのリストをロードし、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 の先頭に追加されます。

ユーザーは入力フィールドを動的に追加したり、既存のフィールドを削除したりできます。

これまでのところ、これはすべて正常に機能します。私の問題は、入力フィールドに含まれるデータにアクセスすることです。フォームが送信されたら、次の 3 つの機能を実行できる必要があります。

  1. ユーザーがオプションを削除した場合、これをデータベースから削除する必要があります
  2. ユーザーがフィールドを追加した場合、これをデータベースに挿入する必要があります
  3. ユーザーが既存のフィールドの値を変更した場合、データベースでこれを更新する必要があります

入力名 'keyword_name[]' を配列として使用して、入力フィールド内のデータにアクセスし、配列をループ処理できます。

ただし、これは特定の ID 番号を持つ既存のオプションには対応していません。Ajax 呼び出しから読み込まれたフィールドに ID 番号を割り当てることはできますが、静的フィールドとユーザーが追加したフィールドには ID 番号が必要ないため、ID 番号はありません。これらのフィールドは、データベースに挿入されるだけです。

したがって、私の質問は、どの既存のオプションがデータベース内のどの ID 番号に属しているかを判断するにはどうすればよいかということだと思います。オプションの名前は一意ではないことを付け加えておきます。

私は次のようなものを考えました:

  1. Ajax で読み込まれたフィールドにのみ ID 番号を提供する
  2. 送信時に、各入力をループし、ユーザーが提供しない区切り文字を使用して、名前の値の末尾に ID を追加します。IE: オプション 2---1
  3. PHPが配列をループし、「---」に一致する配列値を展開します
  4. 「---」で一致が見つかった場合はデータベースを更新し、そうでない場合はデータベースに挿入します

何かご意見は?

アップデート

入力フィールドを、existing_options[] と new_options[] の 2 つの配列に分割しました。

投稿する前に私の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

フィールドが 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 に答える
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 に答える