これは少し複雑なので、この言葉が正しいことを願っています。
オプションのリストをロードし、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 つの機能を実行できる必要があります。
- ユーザーがオプションを削除した場合、これをデータベースから削除する必要があります
- ユーザーがフィールドを追加した場合、これをデータベースに挿入する必要があります
- ユーザーが既存のフィールドの値を変更した場合、データベースでこれを更新する必要があります
入力名 'keyword_name[]' を配列として使用して、入力フィールド内のデータにアクセスし、配列をループ処理できます。
ただし、これは特定の ID 番号を持つ既存のオプションには対応していません。Ajax 呼び出しから読み込まれたフィールドに ID 番号を割り当てることはできますが、静的フィールドとユーザーが追加したフィールドには ID 番号が必要ないため、ID 番号はありません。これらのフィールドは、データベースに挿入されるだけです。
したがって、私の質問は、どの既存のオプションがデータベース内のどの ID 番号に属しているかを判断するにはどうすればよいかということだと思います。オプションの名前は一意ではないことを付け加えておきます。
私は次のようなものを考えました:
- Ajax で読み込まれたフィールドにのみ ID 番号を提供する
- 送信時に、各入力をループし、ユーザーが提供しない区切り文字を使用して、名前の値の末尾に ID を追加します。IE: オプション 2---1
- PHPが配列をループし、「---」に一致する配列値を展開します
- 「---」で一致が見つかった場合はデータベースを更新し、そうでない場合はデータベースに挿入します
何かご意見は?
アップデート
入力フィールドを、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 は、これらの値が配列ではなく文字列であることを返しています。ここに何かが欠けています....