Проверка нескольких полей в одной «маленькой» функции в PHP - PullRequest
2 голосов
/ 25 января 2012

Я хочу построить функцию проверки (или даже класс) в 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 <br/>";   break;
    case FALSE:return $output= "No field is empty!!! Hooray! <br/>";        break;
    endswitch;
    }
    }


Работает, но я не могу использовать его следующим образом:

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

Более того, было бы идеально, если бы код имел форму, не зависящую от того, сколько полей имеет каждая форма.Кто-то просто введет массив, например, $ fields = array ("first" => $ first и т. Д. ....).

Любые мысли ???????

1 Ответ

4 голосов
/ 25 января 2012

Я обычно делаю это таким образом, нахожу это чище и позволяет вам связать больше ошибок одновременно, чем одну:

$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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...