2

多くの異なるフィールドを持つフォームがあります。このフォームのフィールドは2つのテーブルに関連付けられています。フォームが送信されたら、影響を受けるテーブルのみを更新するにはどうすればよいですか?

テーブルクレデンシャル

ID
username
password
question
answer

テーブルユーザー

    ID
    name
    surname
    age
    CredentialID

ユーザーが自分の名前を更新したとしましょう。フォームが送信されたら、ユーザーテーブルの名前フィールドを更新する必要があります。関連するフィールドは変更されていないため、クレデンシャルテーブルのフィールドは更新しません。提出された値をクラスで確認する方法が1つあることを知っていますが、他にオプションはありますか?パフォーマンスを向上させ、データベースのコストを削減するためにすべての値を更新したくない理由。さらに、クライアント側で比較を行う方法はありますか?私はprepareStatementを使用してデータベースを更新しています。

クラス

  public class User{
      ID
      CredentialID
      name
      surname
      age
      username
      password
      question
      answer
  }

  <s:form action="register" method="POST">
   ... name
   surname
   age
   username
   password
   question
   answer ...
 </s:form>
4

2 に答える 2

2

提出された値をクラスで確認する方法が1つあることを知っていますが、他にオプションはありますか?

私にとっては、クラスのすべての新しい変数を古い変数と比較することでサーバー側でこれを確認できることを知っているようですが、より高速でリソースをあまり消費しない方法が必要です。

したがって、これを実現するための私の基本的な考え方は、クライアント(ブラウザー)が「グループ」(資格情報またはユーザー)の値が変更されたかどうかを確認し、この情報をサーバーに送信する必要があるということです。Strutsを使用する場合のHTMLマークアップについてはよくわかりませんが、基本的には次のようになります。

<form>
   <!-- credential fields -->
   <input type="text" name="username" id="username" onchange="credentialChanged()"/>
   <input type="text" name="question" id="question" onchange="credentialChanged()" />
   ...
   <!-- indicates the server if credential fields have changed -->
   <input type="hidden" name="credential-changed" 
          id="credential-changed" value="false" />

   <!-- uer fields -->
   <input type="text" name="name" id="name" onchange="userChanged()"/>
   <input type="text" name="surname" id="surname" onchange="userChanged()"/>
   ...
   <!-- indicates the server if user fields have changed -->
   <input type="hidden" name="user-changed" 
          id="user-changed" value="false" />
</form>

次に、javascript関数を使用してcredentialChanged()userChanged()非表示フィールドを更新します。

function credentialChanged(){
  document.getElementById("credential-changed").value = "true";
}

function userChanged(){
  document.getElementById("user-changed").value = "true";
}

サーバー側では、非表示フィールドの値を取得して、値が変更されたかどうかを知ることができます。

:ユーザーがフィールドのをたとえば「UserXYZ」から「UserABC」に変更してから「UserXYZ」に戻すと、適切な非表示フィールドの値がtrueに設定されます。クライアント側で古い値と新しい値を比較するには、Javascriptを追加する必要がありますが、アイデアは明確である必要があります。

于 2013-02-27T06:12:10.913 に答える
1

次の選択肢があります。

  1. テキストフィールドと同じ値を含む非表示フィールドを維持し、フォームが送信されたときにテキストボックスの値を非表示の値と比較し、それに応じてテーブルを更新します。つまり、入力したユーザー名が非表示のユーザー名の値と一致しない場合は、その資格情報テーブルのみを変更します。

  2. ユーザー情報を更新するような形式の場合は、個々のフィールドセットを個別の形式に配置することをお勧めします。

于 2013-02-27T05:50:07.613 に答える