【问题标题】:Having an issue with my length validation class我的长度验证课程有问题
【发布时间】:2012-03-04 20:31:32
【问题描述】:

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

所以这就是问题出现的地方。我有这个条件,它注意到有一个错误,应该打印出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,以便让用户输入与其他项目一起使用。

如果没有很好地解释自己,并且如果您对我正在努力实现的目标感到迷茫,请告诉我,我会做得更好。提前感谢您观看!

【问题讨论】:

    标签: php json multidimensional-array


    【解决方案1】:

    能否只在错误中添加字段名称?

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

    我不知道这是否有帮助?

    【讨论】:

    • 谢谢托马斯,我会尝试这个想法,看看我想出了什么。我一直在想,验证器类的返回必须是 JSON 格式,以便更好地控制返回的信息。
    • 您可以保留 JSON,只需将字段附加到错误中,因为无论如何这都是您想要的,从而减少了执行时间。
    • 所以你认为 JSON 应该是这样的 -> {"error":"true","data":{"username":"username must be at least 3 characters long","password":"password must be at least 8 characters long"}}?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多