Возникла проблема с моим классом проверки длины - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь создать свой собственный класс валидатора, чтобы я мог проверить длину предоставленного пользователем значения.Я знаю, что существует множество уже созданных опций, но я пытаюсь выучить PHP, и создание собственной работы - это подход, который я хочу использовать.

Я постараюсь объяснить, что я здесь делаю, и, надеюсь,Я никого не теряю.Я постараюсь, чтобы код говорил за меня как можно больше.Я начну с показа моего многомерного массива, который я буду использовать для получения опубликованной информации:

$input_array = array('username' => array( 'value'=> $_POST['username'],
                                          'min'  => 3,
                                          'max'  => 20
                                         ),
                     'password' => array( 'value'=> $_POST['password'],
                                          'min'  => 8,
                                          'max'  => 16
                                         ),
                     'email'    => array( 'value'=> $_POST['email'],
                                          'min'  => 6,
                                          'max'  => 50
                                         )
                     );

создайте объект:

$obj = new Validate(array_map('mysql_real_escape_string',$input_array));
$vl  = $obj->ValidateLength();

Итак, здесь я покажу класс:

class Validate
{
    private $inputArray;
    public function __construct($inputAray)
    {
        $this->inputArray = $inputArray;
    }
    public function ValidateLength()
    {
        $larray = array('error'=>'','data'=> array());
        foreach($this->inputArray as $k => $i)
        {
            if(strlen($i['value']) < $i['min'])
            {
                $larray['error'] = true;
                $larray['data'][$k] = ' must be at least '.$i['min'].' characters long';
            }
        }
        return json_encode($larray);
    }
}

То, что делает класс, проверяет входное значение и определяет, соответствует ли оно значениям min и max, которые я поместил в массив.Если он находит ошибку, он изменяет значение ошибки на true и помещает все ошибки в массив для возврата в формате JSON.

Теперь у меня есть этот маленький парень:

$length = json_decode($obj->ValidateLength(),true);

, который будетпреобразовать JSON в другой многомерный массив, например, так:

var_dump ($ length)

array(2){
 ["error"]=>
 bool(true)
 ["data"]=>
 array(1){
 ["username"]=>
 string(35)" must be at least 3 charracters long"
 ["password"]=>
 string(35)" must be at least 8 characters long"
 }
}

Итак, вот где возникает проблема.У меня есть это условие, которое замечает, что есть ошибка, и должно распечатать сообщение об ошибке для username и password:

$key   = implode("\n",array_keys($length['data']));
$value = implode(", ",array_values($length['data']));
if($length['error'])
{
    print("Error :\n\n".strtoupper($key).$value);
}
else
{
    print('everything is within parameters');
}

Что я получаю, это:

Error:

USERNAME
PASSWORD must be at least 3 characters long, must be at least 8 characters long

Я хочу вот что:

Error:

USERNAME must be at least 3 characters long
PASSWORD must be at least 8 characters long

Несколько замечаний: я стараюсь избегать foreach(), если это вообще возможно в условных выражениях, чтобы сделать очистку легкой.Кроме того, помня о модульности, я хочу иметь возможность изменить username password email в первом начальном массиве, который получает пользовательский ввод для работы с другими проектами.

Если сам не объяснилслишком хорошо, и если вы потерялись в том, чего я пытаюсь достичь, пожалуйста, дайте мне знать, и я постараюсь лучше.Заранее благодарим за то, что у меня есть взгляд!

1 Ответ

1 голос
/ 05 марта 2012

Не могли бы просто добавить имя поля к ошибке?

$larray['data'][$k] = sprintf('%s must be at least %d characters long',$k,$i['min']);

Я не знаю, помогает ли это вообще?

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