0

私はウェブサイトの構築に Codeigniter を使用しています。Web サイトには、ユーザーが 50 の異なる値を更新できる「更新レコード」というオプションがあります。更新ページには、古い値と、ユーザーが新しい値を入力するための空のテキスト ボックスがあります。ユーザーが実際には何も更新していないにもかかわらず、レコード全体を更新しても意味がありません (Web サイトは MySQL データベースを使用しています)。非表示のフォーム フィールドを元の値で使用して、変更されたフィールドのみを更新しようとしました。正常に動作していますが、古い値と新しい値を比較し、変更がある場合にのみ更新するたびに、プロセスが非常に長く見えます。

これを行うためのより良い方法はありますか (codeigniter を使用するかどうかにかかわらず)? 知りたいだけです。前もって感謝します。

4

2 に答える 2

0

JavaScript を使用して、更新された値のみをフィルタリングします

1 - I use hashes.js to calculate a sha1 when page loaded. store it in hidden or just a variable, or you can do sha in the server.
2 - I also do a snapshot of the form in array when page loaded. I put all my input in one class and use jQuery('forminputs').each to put them in array.
3 - when user click submit, first I do another snapshot of the form as No. 2 and compare the hash. if the hash diff, I use php.js get the updated value php.array_diff_assoc(newsnapshot, oldsnapshot). and post this to server.

これらは多くの計算のように見えますが、実際には、firefox や chrome ではまったく遅くありません (決して IE を試してはいけません)。

于 2013-04-22T07:45:12.807 に答える
0

post 配列を解析し、updated の値を持たないエントリを削除します (これは、入力が空で送信されたことを意味します)。

次に、変更されたレコードのみを更新できます

フォーム送信後にコードイグナイターがポスト配列をコントローラーに渡す方法はわかりませんが、次のようなことができます

<?php
foreach ($postData as $key => $value) {
    if (empty($value)) {
        unset($postData[$key]);
    }
}

これが失敗する唯一の場所は、空のレコードを更新された値として正当に保存したい場合です。

于 2013-04-22T07:28:10.023 に答える