Самый эффективный способ проверки формы в массиве? - PullRequest
2 голосов
/ 07 сентября 2010

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

//Clear all variables
$formCheck = '';
$rep = '';
$name = '';
$department = '';
$location = '';
$email = '';
$phone = '';
$type = '';
$drink = '';
$notes = '';
$lastVisited = '';
$nextVisit = '';

$clean_formCheck = '';
$clean_rep = '';
$clean_name = '';
$clean_department = '';
$clean_location = '';
$clean_email = '';
$clean_phone = '';
$clean_type = '';
$clean_drink = '';
$clean_notes = '';
$clean_lastVisited = '';
$clean_nextVisit = '';

function validateRep($rep){
...some code...
}

$formCheck = $_POST["formCheck"];
$rep = $_POST["rep"];
$name = $_POST["name"];
$department = $_POST["department"];
$location = $_POST["location"];
$email = $_POST["email"];
$phone = $_POST["phone"];
$type = $_POST["type"];
$drink = $_POST["drink"];
$notes = $_POST["notes"];
$lastVisited = $_POST["lastVisited"];
$nextVisit = $_POST["nextVisit"];

if (validateRep($rep)){
    $clean_rep = $rep;
}else{
    echo "Invalid Rep";
    exit();
}
//.....and so on......

Мне было интересно, будет ли эффективнее / чище проверять использование массива вместо отдельной переменной?Если так, как бы я поступил об этом, и как бы я написал разные функции проверки все в одном (например, сейчас у меня есть отдельная функция для проверки каждого поля), было бы возможно с циклом через массив?Я экспериментировал, и до сих пор это то, что у меня есть:

$unclean['formCheck'] = $_POST["formCheck"];
$unclean['rep'] = $_POST["rep"];
$unclean['name'] = $_POST["name"];
$unclean['department'] = $_POST["department"];
$unclean['location'] = $_POST["location"];
$unclean['email'] = $_POST["email"];
$unclean['phone'] = $_POST["phone"];
$unclean['type'] = $_POST["type"];
$unclean['drink'] = $_POST["drink"];
$unclean['notes'] = $_POST["notes"];
$unclean['lastVisited'] = $_POST["lastVisited"];
$unclean['nextVisit'] = $_POST["nextVisit"];


$clean = array(
        'rep', 'name', 'department', 'location', 'email', 'phone', 'type', 'drink', 'lastVisited', 'nextVisit',
);

, но я не уверен, что делать дальше.

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Я бы использовал что-то в этом духе ... Просто закодировал это очень быстро, в основном вы создаете функции проверки, которые соответствуют полям записи и возвращают true или false, если проверка прошла успешно.например, validate_department, validate_type, validate_drink и т. д. Будет работать, если в ваших данных поста нет каких-либо странных символов (которых пока нет)

$post_fields = array('rep',
                      'name',
                      'department',
                      'location',
                      'email',
                      'phone',
                      'type',
                      'drink',
                      'lastVisited',
                      'nextVisit'
               );

$validate = new Validate();

foreach ($post_fields as $post_var)
{
  if (isset($_POST[$post_var]))
   {
      $validate->validate_data($post_var, $_POST[$post_var]);
   }
}

if ($validate->all_fields_valid() === true)
{
  echo 'congrats, all validation passed!';
}
else
{
   echo 'oh no! error in validation process. please see below errors: <p>' .
         $validate->get_error_msg() . '</p>';
}

И класс проверки ... Использовать $errorMsg, чтобы увидеть сообщения об ошибках при возникновении любых проблем

class Validate
{
  var $valid = 0,
      $error = 0,
      $errorMsg = '';

  function validate_data($var, $data)
  {
    if (method_exists($this, 'validate_'.$var))
    {
      if (call_user_func(array($this, 'validate_'.$var), $data) === true)
      {
        $this->valid++;
      }
      else
      {
        $this->throwError('validation for: "'.$var.'" was not considered valid');
      }
    }
    else
    {
      $this->throwError('validation function for: "'.$var.'" does not exist');
    }
  }

  function throwError($msg = '')
  {
    if ($msg) $this->errorMsg .= $msg . '<br/>';
    $this->error++;
  }

  function all_fields_valid()
  {
    if (!$this->error) return true;
    return false;
  }

/***********************************************
*************************************************
 Custom validation functions go below here
   Function format: validate_<postFieldName>
   Returns: true or false if the data passed is valid or not
*************************************************
*************************************************/

  function validate_type($type)
  {
    if (is_numeric($type)) return true;
    return false;
  }

  function validate_lastVisited($data)
  {


  }

  //etc...............

}
1 голос
/ 07 сентября 2010

использование filter_input.

$rep = filter_input(INPUT_POST, "rep", FILTER_SANITIZE_STRING);
$name = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING);
$department = filter_input(INPUT_POST, "department", FILTER_SANITIZE_STRING);
$location = filter_input(INPUT_POST, "location", FILTER_SANITIZE_STRING);

if (filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL))
{
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
}

Вот так.

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