在PHP中的一个“小”函数中验证多个字段

时间:2012-01-24 21:12:45

标签: php forms validation function object

我想在php中构建一个验证函数(甚至是类)来检查表单中的空字段。 问题是我想要一个接一个地检查字段,如果有一个空的要发送“-field_name-为空”。 如果没有空,则继续使用脚本的其余部分......

我已经使用多个嵌套的if-else语句创建了它....但我想知道是否有更紧凑和程序员友好的方式。 我尝试使用一个数组,我在foreach语句中传递,然后我使用开关循环。

嵌套的if-else:

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 ....)。

任何想法????????

1 个答案:

答案 0 :(得分:4)

我通常这样做,发现它更干净,允许你一次链接更多的错误:

$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

}