2010-11-27 14 views
4

現在、サーバー側(PHP)のユーザー入力を検証中です。クライアント側はXMLHttpRequest呼び出しを送信し、無効なフィールドに赤い枠線を付けます。クライアントがリクエストをして間違ったことを記入するのに時間がかかりすぎると思うことを除いて、他のすべては素晴らしいです。私は、クライアントが要求を完了するのを待つ必要がないように、いくつかのJavaScriptのバリデーションも行うべきだと思う。重複を最小限に抑えながらクライアントとサーバー側の検証を使用するにはどうすればよいですか?

ただし、検証ルールとコードを複製したくありません。誰もが両方のバリデーションを実装しているので、少なくともバリデーションルールを複製する必要はありませんか?

私はYiiと普通の古いJavaScriptをjQueryで使用しています。

編集:クライアントのコンピュータに間違った時間があって、JavaScriptベースの日時チェックが不正になっていることも面倒です。つまり、サーバーからスクリプトに適切な日時を与える必要があります。

+0

いいえ、まだではありません。しかし、HTML5スタイルの 'pattern = \ w +' regexesクライアントサイドを通知用に再利用し、サーバ側でフィルタリングを再利用する予定です。重複を減らす可能性があります(プログラマチックでないPHPフォームライブラリの場合)。 – mario

答えて

1

私は、PEARのクイックフォームでは、クライアント側とサーバー側の両方の検証を同時に行うことができると信じています。

Yiiフレームワークを使用しているため、Yiiはかなり堅牢な検証スキームを提供していますので、フォーム生成フレームワークを拡張してバリデータのフィールドを確認し、各検証クラスをjs非常に速く書くことができるはずの関数です。 http://www.yiiframework.com/extension/jformvalidate/

2

フィールドを検証して一般的な方法で設定する関数i PHPを作成します。したがって、クライアント側と同じようにサーバー側でも使用できます。

クライアント側では、jqueryを使用してAJAXのPHP検証関数を呼び出します。

+0

これは最善の方法+1 – methodin

+0

これは私が今やっていることです.XHRを作成し、無効なフィールドに赤い枠線を付けることです。私が見ている問題は、リクエストが長くなると、ユーザーがリクエストを完了するのを待たなければならないため、それは馬鹿げて使用できなくなるということです。 – Tower

-1

最初に私は...ユーザーがJavaスクリプトを変更することができます...ユーザーを信頼したことがないと言うことができますので、サーバー側の検証は

秒を必要としている:私たちは、クライアント側の検証を使用する理由?速度のために。

私はあなたが両方の方法を使うべきだと思います。あなたは無駄なユーザー時間を望まないでください。

jsと送信データで検証してください。管理者の場合、間違ったデータ出口ユーザがある場合。

+2

これは、OPが行う予定のものです。問題はそれをどうやって行うかです。 – casablanca

0

あなたの検証ルールを正規表現で記述できる場合は、それらを1つの場所で定義し、生成されたjavascriptで使用するPHPコードで同じ正規表現を使用できます。

+0

日付は受け入れられた範囲内にあることを確認するなど、それ以上のことが必要です。 – Tower

1

は確かに任意の目的のためにチェックするクライアント側の日時を使用していない:

もあなたのためにこれを行います拡張子があるように見えます。あなたはそれにぴったりです。

したがって、検証ごとに1つのコードを記述します。

したがって、電子メールの検証を行う関数をコードしてください。validate_email()

ユーザーがsubmitを押すと、すべてのデータをajaxを使用してPHPコードに送信し、それを検証することができます。

今すぐユーザーが送信フェーズに合格したら、validate_email()を使用して$ _POSTを検証できます。

このようにして1つのコードを書くことができ、管理しやすくなります。

これはjavascriptに比べて遅いですか?言いにくい。追加のjqueryバリデーションプラグインを追加すると、ページにも負荷がかかることに注意してください。 jqueryの場合はHere is a popular validation pluginですが、その縮小版では25KBです。今すぐあなたのコードはきれいで、維持しやすくなります。これがホームページで、プラグインを使用することを前提としている場合は、おそらく最も価値の高いリンク先ページに25KBの負荷を保存しただけです。 PHPで

+0

上記のjQuery検証プラグインは素晴らしいです。非常に使いやすく、カスタムルールで簡単に拡張できます。 –

0

可能なアプローチのようないくつかの擬似コードをJavaScriptで

function validate() { 
    // Use $_POST to validate whatever items in whatever fashion you want 
    // and echo a message or some JSON array etc... 
} 

(jQueryのを想定):

$('#formButton').click(function(event){ 
    event.preventDefault(); 
    $.post('/url/of/page', $(this).serializeArray(), function(response){ 
     // Assuming JSON data, but could just be a string or message, 
     // check for response.success or whatever from validation 
     if(response.success) $('#form').submit(); 
     else // Some error message or action 
    }); 
}); 

この、AJAX呼び出しにある間に、おそらくいくつかのオーバーヘッド実際のPOSTやAJAXを問わず、どのような検証方法を使用してもコードを正確に保持することができます。 PHPの$ _POST反復からの簡単な応答はそれほどオーバーヘッドではありません。また、必要に応じてクエリを実行することもできます。もちろん、すべてが2回実行されるため、単純なままにしたい場合もあります。

+0

PeeHaaのコメントをご覧ください。 – Tower

+0

ローカル?サーバー上で?フォーム検証のための簡単なPHPリクエストは、瞬間的に近くなるはずです。あなたがサブパールサーバを持っている、または検証の前に負荷のオーバーヘッドをかけている場合、これは問題を引き起こすでしょう。あなたのフォームはどれくらい大きいですか? – methodin

関連する問題