1

概要

CodeIgniterを使用して複雑なマルチパートフォームを作成するのはこれが初めてです。

送信をAJAXPostに依存するCodeIgniterマルチパートフォームがあります(jQueryフォームプラグインを使用)。検証が成功した後、フォームをプレビューして、ユーザーの回答がすべて問題ないかどうかを確認します。[データベースに送信]ボタンまたは[フォームの編集]ボタンを使用してデータベースに送信し、戻って確認したいものを変更すると、サイクルが再開されます。

問題

私のマルチパートフォームにはファイル入力と動的に追加されたDOM要素があり(たとえば、ユーザーは複数のアドレスを宣言できるため、JavaScriptを介して4つのテキストボックスが追加されます)、1回の編集でこれらをそのままにします。

攻撃する方法はいくつかありますが、これまでのところどれも機能しません。

  1. ブラウザの戻るボタンをシミュレートしますindex()-効果的なようですが、コントローラが新しいフォームビューをロードするため、役に立たないことを思い出しました。
  2. プレビューフォームからすべてのデータを取得し、それらを配列に入れ、配列をに運び、index()動的に追加された要素の出現をカウントし、それらすべてを表示します-これは私にとってかなり退屈で複雑です。さらに、すべてのデータを配列に運ぶこと$_POSTが安全かどうかはわかりませんが、私が考えることができる最高のものです。

この種のプロセスを攻撃するための提案やより良い方法はありますか?

どんな助けでもいただければ幸いです。ありがとうございました。

4

1 に答える 1

0

おそらく、2番目のオプションに基づいたソリューションを実装する必要があります。そうです、面倒ですが、他に方法はありません。覚えておくべきいくつかのこと:

データを保存するための簡潔な方法を考える必要があります。アドレスは、次のように1つの配列要素として格納する必要があります。

<input type="text" name="addresses[1][street]">
<input type="text" name="addresses[1][city]">
<input type="text" name="addresses[1][county]">

これにより、フロントエンドプレゼンテーションのデータ構造を簡潔に繰り返すことができます。

<? foreach ($data['addresses'] as $number => $address): ?>
   <? foreach ($address as $address_item => $value): ?>
      <input type="text" name="addresses[<?=$number?>][<?=$address_item?>]" value="<?=$value?>">
   <? endforeach; ?>
<? endforeach; ?>

これにより、レイアウトを完全に制御できるようになり、DOMのストックに使用する必要のあるJavaScriptの量が削減されます(これはそれほど迅速でも効率的でもありません)。

于 2013-02-24T15:20:10.320 に答える