2012-01-24 9 views
1

フォームの空のフィールドをチェックするために、PHPで検証関数(またはクラス)を作成したいと考えています。 事は、フィールドを次々にチェックしたいのですが、空のフィールドがある場合は、 "-field_name-は空です"というメッセージが表示されます。 どれも...PHPの1つの 'small'関数で複数のフィールドを検証する

スクリプトの残りを継続空でない場合は、私はすでにそれが複数のネストされた場合-else文を使用して作られてきた....が、よりコンパクトで、プログラマに優しい方法がある場合、私は思っていました。 私はforeach文で渡す配列を使ってみましたが、私はスイッチループを使います。

ネストされた場合は、他の人の私が説明した第二のケースはこれです

function no_empties($first_name,$last_name,$username,$password,$password2,$user_email,$user_email2) 
{ 
if (!empty($first_name)) 
{ if (!empty($last_name)) 
    {if (!empty($username )) 
{if (!empty($password )) 
    {if (!empty($password2)) 
    {if (!empty($user_email)) 
     {if (!empty($user_email2)) 
      {return TRUE;} 
     else{ js_msg("Please retype your email!");return FALSE;}; 
       } 
    else {js_msg("Please enter a -valid- email!"); return FALSE;}; 
      } 
else{js_msg("Please retype your password!");return FALSE;}; 
     } 
else {js_msg("Please enter a password!" ); return FALSE;}; 
    } 
else {js_msg("Pleas enter a username!"); return FALSE;}; 
} 
else { js_msg("Please enter your last name!"); return FALSE;}; 
} 
else { js_msg("Please enter your first name!"); return FALSE;}; 
} 

 


    $fields_array = array("first name"=>$first_name,"last name"=>$last_name,"username"=>$username,"password"=>$password,"retype password"=>$password2,"email"=>$user_email,"retype email"=>$user_email2); 

    function TEST($fields_array) 
    { 
    foreach ($fields_array as $field_name => $input) 
    { 
    switch (empty($input)) : 
    case TRUE: return $output="The -{$field_name}- field is empty 
"; break; case FALSE:return $output= "No field is empty!!! Hooray!
"; break; endswitch; } }

それが動作しているが、私はこのようにそれを使用することはできません。

if (TEST($fields_array)==TRUE): echo $output; else: echo $output; endif; 

さらに、コードが各フォームのフィールド数に無関係な形式であれば完璧です。誰かが $ fields = array( "first" => $ first、etc ....)のような配列を入力するだけです。

いずれかの考え???????

答えて

3

私は通常、このようにそれを行うクリーナーそれを見つけると、あなたはかつて単一のものよりも多くのエラー連鎖することができます:

$errors = array(); 
if(!isset($_POST['field1']) || !is_numeric($_POST['field1']) || $_POST['field1'] < 123){ $errors[] = 'Field1 is missing or has an invalid value'; } 
if(!isset($_POST['field2']) || !is_string($_POST['field2']) || strlen($_POST['field2']) < 20){ $errors[] = 'Field2 is missing or is not long enough'; } 
if(!isset($_POST['field3']) || !in_array($_POST['field3'], array('valid', 'values'))){ $errors[] = 'Field3 is missing or has an invalid value value not in list of (....)'; } 
if(!isset($_POST['field4']) || strtotime($_POST['field4']) == false){ $errors[] = 'Field4 is missing or has an invalid date value'; } 

if(count($errors) == 0){ 

    //Process 

} 
+0

本当にきれい。それは、異なる種類のバリデーションを多数保持することができ、6ヶ月後に読んで変更するのは本当に簡単です。しかし、どういうわけか、どういうわけか、すべてのフィールドで間違っていることを特定の情報をユーザーに返すことはできないと思います。多くのありがとう –

+0

エラーをどのようにエコーしますか?ありがとう。 – Khakali

関連する問題