0

テーブル内のアイテムと各アイテムのすべてのフィールドを表示するページを作成しようとしています。目的は、ユーザーがアイテムの詳細をオンラインで更新できるようにすることです。

私のテーブルには約14のフィールドがあり、次のように実行することを計画していました。それは理にかなっていますか?それとも、これを行うためのより効率的な方法がありますか?

<form>
(query all items in table)
while (...) {
    <span class="details">NAME: </span>
    <input name="name" value="<?php echo $info['name']; ?>">
    <span class="details">CATEGORY: </span>
    <input name="category" value="<?php echo $info['category']; ?>"
...
... and so on 12 more times
}
<button to submit the form>
</form>

次に、ユーザーが更新したフィールドのみをデータベースで更新したいと思います。各フィールドを1つずつ確認する必要がありますか?または、これを行う簡単な方法はありますか?

ありがとう!

4

2 に答える 2

1

私は現在、変更されていないすべてのフィールドを無効にするためにこのコードを使用しています。

<script>
$(function() {
    $('.input').change(function() {
        $(this).addClass('changed');
    });
    $('input[type=submit]').click(function(){
     $('form').find('.input:not(.changed)').attr("disabled", "disabled");
    });
});
</script>

すべてのフォーム要素(select、textarea、inputなど)に「input」クラスを追加し、それらが変更されたかどうかを監視するスクリプトは、「changed」という名前の別のクラスを追加し、後で送信ボタンがクリックされたときに、スクリプト変更されていないすべての要素を無効にします。

于 2013-02-27T17:15:17.597 に答える
0

Akamの答えは素晴らしいです-変更されていない入力要素にdisabled="disabled"を適用すると、実際にはそれらが送信されなくなり、変更された変数のみがサーバーに送信されます。

ここに追加する必要があるのは....changedここでは、送信/入力された値が元の値と異なるかどうかをすでに確認しています。ただし、送信時に元の値と値を簡単に比較することもできます(===たとえば、すでに何らかの衛生/検証を行いたい場合は、正規表現などを使用できます)

これはすべてエレガントなjavascript(またはjQuery)ソリューションですが、サーバー側(phpなど)でそのような比較を行っている人もいます(ばかげています;-)。ただし、元の値を前後にバウンスしている場合は、それほど悪くはありません(つまり、新しい値と古い値をサーバーに戻す必要がありますが、データベースから再度読み取らないでください)。データベース内のすべてのフォーム値を更新する場合よりも多くなります)。

于 2013-02-27T17:56:13.507 に答える