あなたのデータの検証

人間のエラーのために、人間の無理解や、単純な無知の人々も入力して不正な状態。場合は、データの問題の検証もプログラマが問題になることができるだけのデータエントリの問題ではない有効な状態ですので、知ることができるすべてのアプリケーションは、検証データを実装する必要があります。たとえば、人間は正常にデータを入力する可能性があるコードのいくつかの無効な操作を破損の状態に結果を実行することができます。あなたは、検証が正常にAjaxアプリケーションインチ理論の検証が発生したことを確認する必要がありますは、クライアントまたはサーバーにデータを検証することができます。の場合、有効な数値のいずれかのクライアント側またはサーバー側で実行することができますが入力されているを確認する検証。検証を考えてみると、クライアント側で実行される場合は、次の点を定義することができます:

•するにはJavaScriptのすべての検証を実装するために使用します。

行動することができますし、サーバにデータを送信する前に検証するクライアントは、これによりサーバーへの往復の保存•。

場合、クライアント側の検証のみの検証です•Webクライアントは、安全でないと見なされますので、サーバーが無効なデータを受信することができます。クライアント側の検証は、サーバー側での検証を行うと、クライアントのリソースを使用して処理能力を節約できます。欠点は、HTMLアプリケーションでは、クライアントの安全とみなされ、ハッカーたちは、常にaWeb開発者のセキュリティへの取り組みをバイパスすることができます。あなたの問題を最小限に抑えることができますが、あなたの問題を排除することはできません。対照的に、のサーバーを見てサイドの検証を聞かせ、ここでは、次の点を定義することができます:

  

•あなたが選択した言語のすべての検証をするかどうかのはJava、Cを実装することができます#、C + +のは、PHPやRubyも。

•サーバー側での検証は、ネットワークリソースの浪費は、クライアントとサーバ間のラウンドトリップが必要です。

この例のソースでは、HTMLのimgタグだけでなく、ターゲットとonload属性src属性があります。システムレベルの観点から、この3つの属性を意味します。サーバーフィルターでの問題は、1つの属性として、ターゲットとのonload属性を扱います。ため、アプリケーションレベルの検証をフィルタには、システムレベルでのデータを検証していないが作成されましたこれはおそらく発生します。検証ルーチンの両方を、システムレベルの検証、およびアプリケーションレベルの検証エラーは、ほとんど可能性が高い。状態キャッチされているだろうと検証を行っていたという単純な問題ではありません。状態と検証の両方を、クライアント側とサーバー側の関与、両方のシステムレベルの検証、およびアプリケーションレベルの検証を含む。提案の検証のアーキテクチャでは、1つの問題が残る:クライアントは安全と考えられていますが、サーバーの予想では、クライアントが正しいデータを送信します。これは、災害のための資料ではありませんので、どのようにアプリケーションを検証実装されてことができる。ほとんどの技術の実装により、アプリケーションの検証、システムレベルの検証を意味します。データのようにエラーがすでに削除されるまで、クライアントの修正。サーバー側はデータが正しいですが、想定していますが発生した場合はエラーをキャッチする機能があります。ソリューションを開始するために、HTMLページに2つの数値を追加するために使用を見てみましょう。

 ソース: /サイト/ルート/ Ajaxの記事/ DHTMLビューア/検証/ test.htmlの検証例
品番1
品番2
結果

 ソース: /サイト/ルート/ Ajaxの記事/ DHTMLビューア/検証/ test.htmlの検証例 
品番1
品番2
結果

•時の数字の場合は、参照する必要がnumber1とnumber2のためのテキストボックスの値のプロパティの状態を抽出します。

•ときの結果は、参照する必要がスパンのinnerHTMLプロパティの状態を抽出します。

•この場合、テキストボックスを検証する必要が数値1とされる数値としてnumber2が値です。

•場合は、検証が失敗した場合、生成する必要がありますので、ユーザーは是正措置を取ることができますエラーが表示されます。

•あなたが断片的にエラーが表示されない必要があります。検証ルーチンは、全体の状態を通過しなければならない、すべてのエラーを生成するデータが見つかりました。

•ない場合複数の検証エラーは、呼び出し元に生成された状態を渡すが発生します。は、複数の状態のインスタンスが発生する場合があります。複数のエラーまたは複数の状態のインスタンスの生成を通知してください。たびにアルゴリズムを、複数の結果に直面して、その結果を一時的には、アルゴリズムの呼び出しによって処理される配列に格納されています。第2条のコードブロックの記事にも、コードブロックを使用できるのに示すように。コードブロックは、適切な選択肢があるためか、またはエラーが発生することができないとされるか、状態のインスタンスでない場合もありますがあります。複雑さを説明するためには、getStateを関数の呼び出しのそれぞれのアプローチを示して、次のコードを検討:

関数GenerateState()(ヴァールnoErrors =真;ヴァール結果= getStateを("識別子");用(int c1 = 0; c1"result.errors.length; c1 + +)(/ /エラーnoErrors = falseで何かをしないでください。 )の場合(int c1 = 0(noErrors ==がtrue)(; c1"results.state.length; c1 + +)(/ /結果)))何かする

最初の行に変数noErrorsの割り当てです。変数noErrorsかどうかエラーが発生する状態を抽出発生することを示すために使用されます。エラーがある場合、それ以降はない状態か、または存在されている状態にばかげていると処理している、それは不完全です。関数getStateを呼び出すと、2つのデータメンバー:エラーが発生し、状態を持つオブジェクトのインスタンスを返します。 2つのデータメンバを配列にし、生成された状態のインスタンスはエラーが含まれています。 getStateをするために呼び出しの後、ループし、必要に応じて、検証エラーが繰り返し応答を生成します。もしエラーが生成され、変数noErrorsの値が割り当てられているfalseの場合、エラーを示す。エラーがない場合は、生成された状態のインスタンスが繰り返されている。としてgetStateを、関数が呼び出されるコードされ、状態を処理します。エラーが発生した場合、getStateをの呼び出し元に、何が間違っていてどの呼び出し元にエラーを示すために分析する必要があります。もう1つのソリューションがどのように状態やエラー処理を簡略化コードブロックを使用しています。ため、彼らはあなたのコードを尊重すると付加価値に注力できるようにコードブロック、コードを簡素化します。次のコードをどのようにgetStateをのバージョンのコードブロックを使用して示しています:

関数GenerateState()(getStateを("識別子"、(エラー:(errorItem)(/関数* /)状態エラーで何かしない:(stateInstance)(/ /)))の結果で何かの関数;)

GenerateStateの変更の実装では、getStateを関数は、2つの方法:エラーが発生し、状態を持つオブジェクトのインスタンスが渡されます。たびにエラーが発生した場合、関数は、エラーと呼ばれます。ていない場合はエラーが発生した場合、この関数の状態と呼ばれます。これだけを例に、エラーまたは状態のインスタンスが発生することが世話をする必要がありますGenerateStateの発信者は、簡易実装しています。呼び出し元が、その後すべてのエラーは無視されますが発生すると、呼び出し側関数は、エラーのための実装を提供していない唯一の有効な状態のインスタンスを待ちます。 SetStateの詳細とその使用方法をgetStateを似ている。 SetStateとの違いは、状態の表現に割り当てられているが、今では、HTMLフォームの実装の詳細では今日も、1つの追加変更はまだ議論されていない場合は、それgetStateをの詳細を論じる前に、覆われている必要がありますを見てみましょうまたはSetState:

品番1
品番2
結果

太字のテキストは、いずれかのエラーは、データに関連付けられて表示するHTMLを使用するspan要素の追加を示します。過去のアプリケーションでは、エラーを示すためには、ダイアログボックスを使用している場合があります。ダイアログボックスで問題は、問題のあるデータについても話を特定しないことです。かなり複雑なフォームでは、ユーザーがどこにエラーです。ダイナミックHTML(DHTML)には疑問が残ることがありますが、これが必要]ダイアログボックスで不要な使用をすることの能力は、HTML要素を変更することができます。この記事は、HTMLのspan要素を使用してエラーが含まれています。あなたがあなたのアプリケーションには何でも使用することができます。たぶんあなたが点滅し、テキスト、または多分あなたがお好みのフォントを変更したい使用するようにします。これは、しかし、その場合は、ローカルのHTML要素を使用して、エラーを関連付けることが重要です。さて、これは少し長くすることができますgetStateをの詳細を説明しておきます:

関数getStateを(識別子、CBの)( 場合(識別子=="")(/ toadd / 1ヴァールフォーム=("電卓")Document.getElementByIdにて; Document.getElementByIdにて("Number1Error")。innerHTML =""; / / 2Document.getElementByIdにて("Number2Error")。innerHTML =""; ヴァールOBJの=新しいObject(); / / 3 ヴァールdidError =偽; / / 4試し( obj.Number1 = Converter.convertToInteger()form.Number1.value; / / 5)(電子)(didError = trueをキャッチ; Document.getElementByIdにて("Number1Error")= e.toString innerHTML();場合(cb.error)( cb.error((セクション:""toadd、 項目:"数値1"、エラー:()}); e.toString / / 6))(obj.Number2 = Converter.convertToInteger(form.Number2.value);)(電子)(didError = trueをキャッチしよう; Document.getElementByIdにて("Number2Error")= e.toString();場合(cb. innerHTMLエラー)(cb.error((セクション:""、項目toadd:"number2が"エラー:()});))の場合(&&!didError)cb.state e.toString( cb.state((セクション:""、値):OBJの)toadd; / / 7))以外の場合(識別子=="結果")(var要素= Navigation.findChild("電卓"、"結果"); Navigation.findChild("電卓"、"resulterror")=""innerHTML;ヴァールOBJの=新しいObject();(= Converter.convertToInteger()element.innerHTML obj.Resultしよう;)(電子)(Navigation.findChild("電卓"をキャッチ、"resulterror")= innerHTML e.toString();場合(cb誤差)(cb.error((セクション:"結果"、アイテム:"結果"は、エラー:()});)を返すe.toString;))の場合(cb.state)(((セクション:"cb.state結果は"、値:OBJの));))他(場合(cb.error)(cb.error((セクション:識別子、エラー:"国家の識別子("+識別子+"が存在しません"));)))

コードが複雑ではありませんが、長いので、あなたを達成するために必要なタスクは長い。次のリストは、各コードの太字の行は説明する。リストは、コメントが強調表示されたコードで表示される番号に対応するの番号:

1。 getStateを決定表現の状態には、変換されるかを決定することができます。

2。 getStateをエラーメッセージの表現に関連付けられてリセットされます。この記事では、バッファが空には個々のHTMLのspan要素のinnerHTMLプロパティを割り当てることを意味します。あなたのアプリケーションでは、どういう意味がありますが点滅し、テキストをリセットしたり、テキストのフォントを変更します。このようには古いのエラーは、検証として表示されるエラー状態をリセットするために実行されていることが重要です。

3。 getStateをオブジェクトには、オブジェクトの型を使用してインスタンス化します。インスタンス化、およびオブジェクトの型の使用を目的としています。あなたは、定義済みのデータメンバとメソッドを持っている型をインスタンス化するが、誘惑されるかもしれないことをお勧めされていません。 DHTMLビューアを使用して想像して、動的にフォームを生成します。これは、生成されたフォームの1つのコンテキストは、別のコンテキストはないデータメンバーを持つことができる。状態の観点からすると、コンテキストではなく、何をすると、コンテキストにすべきだと思うが反映さの状態を知ってほしい。したがって、ときにオブジェクトのデータがないメンバーがいるとすると、あなただけでは、データコンテキストに関連付けられた存在であることを保証しているデータメンバを動的に割り当てるインスタンス化します。

4。 変数didErrorいるかどうかの検証エラーが発生したことを示すフラグです。このフラグは、ここでのクロスリファレンス以前の議論のコールバックではなく、ループを使用する理由については強調表示されます。は、getStateをアルゴリズムかどうかエラーが発生しましたを追跡する必要がありますdidError番組のイラスト。

5。 コンバータは、この例の場合には整数値は、要求されたタイプには、HTMLデータに変換します。変換には、アプリケーションによって異なります関数呼び出しが書き込まれている。変換の検証が含まれます。には、変換の例外ブロック内にカプセル化されます。ため、すべてのエラーをキャッチされる例外ブロックの使用は推奨されます。検証ルーチンが、いくつかのエラーを見落とす可能性が例外ブロックをキャプチャすることができますし、これらのエラーが表示されます。

6例外が生成され、catchブロックが例外をキャプチャします。いったん例外が捕捉されており、ユーザーと呼ばれ、エラーのコールバックを定義され、さらに、エラーを処理できます。

7。 ていない場合はエラーが生成され、ユーザーがフォームの状態で呼び出されるコールバックの定義は、太字ではないコードのいずれか7の詳細のための機能やサポートのコードを複製されます。は、getStateをとsetstate機能を自己完結型のを思い出してください。たとえば、検証は失敗し、エラーを生成した場合は、コールバックを表示するメッセージの作成のオプションがあります。これは、状態コードの表現の詳細について知る必要がありますしかし、このアプローチは、望ましくありません。表現のモーフィングごとのパターンとしては、getStateをまたはSetStateの呼び出し元がどのように表現実装されて知っていることが望まれていません。これは、getStateをとsetstate関数と同様に、データ表現の状態を割り当てるために使用の起源は分からないが、デカップリング推進していますイラスト目的のためには、次のコードでは、完全なSetState機能およびクロスリファレンスの詳細は、実装が表示されますgetStateを関数の7つの定義の詳細と同様の機能:

関数SetState(識別子、objは、CBの)( 場合(識別子=="")(/ toadd / 1ヴァールフォーム=("電卓")Document.getElementByIdにて; Document.getElementByIdにて("Number1Error")。innerHTML =""; / / 2Document.getElementByIdにて("Number2Error")。innerHTML =""; 場合(typeof演算(obj.Number1)!="番号")(/ / 5ヴァールバッファ="obj.Number1、数字を期待して"+ typeof演算(obj.Number1である);("Number1Error")。innerHTML =バッファ;場合(typeof演算(CB)のDocument.getElementByIdにて!=""&住宅銀行undefinedです。エラー)( cb.error((セクション:""、toadd識別子:"数値1"、 エラー:バッファ)); / / 6))))element.innerHTML = obj.Result;)他(場合(typeof演算(CB)を!=""&&cb.error)(cb.error不定((セクション:識別子、エラー:"国家の識別子("+識別子+""))が存在しない;))

時の状態との表現を割り当てると、ロジックの同じような、3行目の例外および7は、上記のコードのリストからで実施されます。なぜなら、状態を割り当てるこれらの数字はここに、あなたならその状態を格納するオブジェクトのインスタンスが渡さ参照されていません。サーバー側の検証が示されていないため、この記事は、クライアント側のソリューションに焦点を当てます。ソリューションを完了するには、 Ajax要求を使用し、送信、またはサーバー側の検証が示されていない状態を受け取るため、この記事は、クライアント側のソリューションに焦点を当てます。表現は、読み取り専用モードでの状態を示しています。この記事は、使用して、リモートで、読み取り専用モードでは、編集して表示し、状態を取得する可能性があるサーバーに返送します。一緒にこのすべてを置く場合、検証については、以下のことを覚えておく必要があります:

•検証されていないいくつかのデータの検証について。検証し、何よりもまずについては表現と関連付けられている状態を定義することです。の検証を目的としたときの状態に転送されるようにされると、状態が一致している。

場合は、状態サーバーに、次に転送されます•場合は、検証を実行するほとんどのクライアントに頼ることができない可能性が高い。クライアントの安全、そのためには、""ダムのエラーを削除する場合期待するほとんどのシステムレベルの検証と見なされます。これは、アプリケーションを実行することができないレベルの検証だけでは、検証の場合は、アプリケーションの高いセキュリティが必要に盲信入れていないと言うことではない。

•クライアントは、サーバーからこれは、サーバーのセキュリティを考慮すると、それが検証される必要はなく、状態を受け取ります。比喩的に言えば、銀行に行くようなものです:銀行の出納係し、信頼していないため、個々の、安全を考えている。として使用すると、出納係を信頼する係の言うこと、またはあなたが受け取る金銭の問題ではないが、逆に該当しない場合です。

•時のエラーを検証する場合、DHTMLビューアでは、発生した場所の近くにエラーを表示するために使用。たとえば、そのため、暗号のようなエラーメッセージにつながることができるダイアログボックスを生成しないでください。

•ときは、状態と設定状態の機能ので、getを使用する検証を実装するには、国家、表現、およびメカニズムの状態を互いから分離することができます転送するために使用されます。

•使用してコードブロックのように、そのユーザーの機能を必要なときに呼び出されると、コードを分離。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"あなたのデータ"自動ソフトウェアによって翻訳されたの検証。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 224 users browsing the articles directory