2012-03-04 9 views
0

私は自分のカスタムバリデータクラスを作成しようとしていますが、ユーザーが指定した値の長さを確認できます。そこには既に多くのオプションが用意されていますが、私はPHPを学びたいと思っています。長さ検証クラスで問題が発生しました

私はここで何をやっているのか説明しようとします。うまくいけば誰も失うことはありません。コードをできるだけ私に話してもらいましょう。私は、投稿情報を取得するために使用されます私の多次元配列を示すことから始めます:

$input_array = array('username' => array('value'=> $_POST['username'], 
              'min' => 3, 
              'max' => 20 
             ), 
        'password' => array('value'=> $_POST['password'], 
              'min' => 8, 
              'max' => 16 
             ), 
        'email' => array('value'=> $_POST['email'], 
              'min' => 6, 
              'max' => 50 
             ) 
        ); 

は、オブジェクトを作成します。

$obj = new Validate(array_map('mysql_real_escape_string',$input_array)); 
$vl = $obj->ValidateLength(); 

だからここに私はクラスが表示されます:

class Validate 
{ 
    private $inputArray; 
    public function __construct($inputAray) 
    { 
     $this->inputArray = $inputArray; 
    } 
    public function ValidateLength() 
    { 
     $larray = array('error'=>'','data'=> array()); 
     foreach($this->inputArray as $k => $i) 
     { 
      if(strlen($i['value']) < $i['min']) 
      { 
       $larray['error'] = true; 
       $larray['data'][$k] = ' must be at least '.$i['min'].' characters long'; 
      } 
     } 
     return json_encode($larray); 
    } 
} 

クラスが実行するのは入力値をチェックし、配列に入れたminmaxに収まるかどうかを調べます。エラーを検出した場合は、エラー値をtrueに変更し、配列内のすべてのエラーをJSON形式で戻します。だからここ

のvar_dump($長)

array(2){ 
["error"]=> 
bool(true) 
["data"]=> 
array(1){ 
["username"]=> 
string(35)" must be at least 3 charracters long" 
["password"]=> 
string(35)" must be at least 8 characters long" 
} 
} 

$length = json_decode($obj->ValidateLength(),true); 

そうのような別の多次元配列にJSONに変換します:

は今、私はこの小さな男を持っています問題が発生する場所です。

Error: 

USERNAME 
PASSWORD must be at least 3 characters long, must be at least 8 characters long 

は私がしたいことはこれです:

$key = implode("\n",array_keys($length['data'])); 
$value = implode(", ",array_values($length['data'])); 
if($length['error']) 
{ 
    print("Error :\n\n".strtoupper($key).$value); 
} 
else 
{ 
    print('everything is within parameters'); 
} 

私は何を得ることはこれです:私はそこにエラーであり、usernamepasswordため、エラー・メッセージをプリントアウトする必要があることに気付き、この条件持っています

Error: 

USERNAME must be at least 3 characters long 
PASSWORD must be at least 8 characters long 

ご了承ください。foreach()は、簡単に清潔にするために条件付きで可能です。また、モジュール化を念頭に置いて、他のプロジェクトで作業するためのユーザー入力を取得する最初の初期配列でusernamepasswordemailを変更したいと考えています。

あなた自身があまりにもうまく説明できなかった場合は、達成しようとしているものを紛失している場合はお知らせください。 lookieを持っていることを前にありがとう!

答えて

1

フィールド名をエラーに追加するだけでいいですか?

$larray['data'][$k] = sprintf('%s must be at least %d characters long',$k,$i['min']); 

これはまったく役に立ちますか?

+0

トマスありがとう、私はそのアイデアで遊んで、私が思いつくものを見ていきます。私はそれが私の頭の中に立ち往生しているバリエータークラスからの戻り値は返された情報をより制御するためにJSON形式でなければなりません。 – Mike

+0

JSONをそのまま使用して、エラーにフィールドを追加するだけで、実行する時間を短縮できます。 – Thomas

+0

あなたの考えはJSONのようになります - > '{" error ":" true "、" data ":{" username ":"ユーザー名は少なくとも3文字以上でなければなりません "、" password ":"パスワードは必須です少なくとも8文字の長さ "}}'? – Mike

関連する問題