Рефакторинг php фильтр / валидация - PullRequest
0 голосов
/ 11 февраля 2011

Я хочу провести рефакторинг этого фрагмента кода, он принимает входные данные из формы, затем очищает входные данные, а затем проверяет, является ли он пустым или слишком коротким.Это делается для заголовка, содержимого и тегов.В нем хранятся ошибки, встречающиеся в массиве с именем errors.

Я хочу создать функцию, что-то вроде этого:

function validate_input($args)

За исключением того, что я не уверен в том, как я собираюсьреализовать его, и как это будет создавать список ошибок.

(я знаю, что могу использовать что-то вроде PEAR QUICKFORM или php-form-builder-class, поэтому, пожалуйста, не упоминайте «о, используйте Class xyz»').

   $title = filter_input(INPUT_POST, 'thread_title',  FILTER_SANITIZE_STRING,
                                                      array('flags' => FILTER_FLAG_STRIP_HIGH|FILTER_FLAG_STRIP_LOW )); 
   $content = filter_input(INPUT_POST, 'thread_content');
   $tags = filter_input(INPUT_POST, 'thread_tags');

   #  title here:
   if (is_null($title) || $title == "")   #  is_null on its own returns false for some reason
   {
      $errors['title'] = "Title is required.";
   }
   elseif ($title === false)
   {
      $errors['title'] = "Title is invalid.";
   }
   elseif (strlen($title) < 15)
   {
      $errors['title'] = "Title is too short, minimum is 15 characters (40 chars max).";
   }
   elseif (strlen($title) > 80 )
   {
      $errors['title'] = "Title is too long, maximum is 80 characters.";
   }

   #  content starts here:
   if (is_null($content) || $content == "")
   {
      $errors['content'] = "Content is required.";
   }
   elseif ($content === false)
   {
      $errors['content'] = "Content is invalid.";
   }
   elseif (strlen($content) < 40)
   {
      $errors['content'] = "Content is too short, minimum is 40 characters.";    #  TODO: change all min char amounts
   }
   elseif (strlen($content) > 800)
   {
      $errors['content'] = "Content is too long, maximum is 800 characters.";
   }

   #  tags go here:
   if (is_null($tags) || $tags == "")
   {
      $errors['tags'] = "Tags are required.";
   }
   elseif ($title === false)
   {
      $errors['tags'] = "Content is invalid.";
   }
   elseif (strlen($tags) < 3)
   {
      $errors['tags'] = "Atleast one tag is required, 3 characters long.";
   }

   var_dump($errors);

1 Ответ

0 голосов
/ 11 февраля 2011

Должно быть довольно просто, если вы правильно поняли свою проблему и хотите проверить и санировать только эти три переменные.

function validateAndSanitizeInput(Array $args, Array &$errors) {
//validation goes in here
return $args;
}

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

$errors = array();
$values = validateAndSanitizeInput($_POST, $errors);
//print $errors if not empty etc.

Кстати, вы можете заменить "is_null ($ content) || $ content ==" "" на "empty ($ content)"

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