我的长度验证课有问题

时间:2012-03-04 20:31:32

标签: php json multidimensional-array

我正在尝试创建自己的自定义验证器类,我可以检查用户提供的值的长度。我知道有很多已经创建的选项,但我正在尝试学习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);
    }
}

该类的作用是检查输入值,看它是否适合我放入数组的minmax。如果发现错误,则将错误值更改为true,并将所有错误放入数组中以JSON格式返回。

现在我有了这个小家伙:

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

将JSON转换为另一个多维数组,如下所示:

的var_dump($长度)

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"
 }
}

所以这就是出现问题的地方。我有这个条件,注意到有错误,应打印出usernamepassword的错误消息:

$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 个答案:

答案 0 :(得分:1)

可以只将字段名称添加到错误中吗?

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

我不知道这有什么用吗?