0

非常に多くのリスト ボックスを含むフォームを使用しています。フォームを送信した後、PHP を使用してすべてのリスト ボックスをループ処理しても問題ありません。しかし、処理時間を大幅に節約できるため、変更されたものだけを取得する方法を探しています。

100 個のリスト ボックスがあるとします。それらの ID は "lb_1" ... "lb_100" です。私はそれらを次のようにループします:

foreach($_POST as $key=>$value) {
   if (substr($key,0,3)== "lb_" ) {
      ...do something...
   }
}

ただし、そのループは、100 個のリストボックスの値すべてに対して何らかの処理を行います。実際に変更されたものだけをキャッチしたい。

何か案は?

4

2 に答える 2

0

わかりました、あなたのヒントのおかげで、私はこのクライアント側のソリューションを思いつきました:

元の値を含む各リストボックスの直前に非表示のフォーム テキスト フィールドを追加しました。隠しフィールドとボックス化されたリストには同じ一意の接尾辞が付いているため、どちらがどのフィールドに属しているかがわかります。

フォームが渡されると、PHP ループは次のようになります。

foreach($_POST as $key=>$value) {
   if (substr($key,0,3)== "lb_" ) {
      if ($_POST[hidden_name] != $value) {
         setNewValue($value);
      }
   }
}

値は $_POST 配列で既に使用可能であるため、比較ごとにデータベースにアクセスするよりもはるかに高速です。

ご協力いただきありがとうございます。

于 2013-04-03T16:33:51.647 に答える
0

@Tushar の提案を拡張するには、Javascript を使用して、変更されていないフィールドの Disabled 属性を true に設定できます。そうすれば、それらは POST に存在しません。無効にするものを知る唯一の方法は、初期値を保存することです(おそらく比較を容易にするためにJSで)。次に、フォームの送信時に、フィールドをループして、変更されていないすべてのフィールドを無効にします。

document.getElementById('lb_1').disabled = true;  // example of how to disable field

必要に応じて、より多くのサンプル コードを提供できます。

于 2013-04-02T22:36:55.987 に答える