0

我在 PHP 上制作了一个简单的验证表单系统(通过我的原始 php MCV 框架),但我遇到了一个我无法解决的问题

我有这个代码

        $credentials = array('name' => 'required', 'password' => 'required|between');

    $validator = new Validation;
    if (!$validator->check($credentials, array(5, 10))) Redirect::to('/login', 'error', $validator->msg);

然后我的班级校准器看起来像

public function check($fields, $size)
{
    foreach ($fields as $key => $val)
    {
        $rule = explode('|', $val);

        if (in_array('required', $rule))
        {
            if (empty($_POST[$key])) 
            {
                $this->msg = 'Field '.$key.' is required';
                $this->final = false;
            }
        }
        elseif (in_array('between', $rule))
        {
            if (strlen($_POST[$key]) < $size[0])
            {
                $this->msg = 'Filed '.$key.' must be between '.$size[0].' and '.$size[1].' chars';
                $this->final = false;
            }

            if (strlen($_POST[$key]) > $size[1])
            {
                $this->msg = 'Filed '.$key.' must be between '.$size[0].' and '.$size[1].' chars';
                $this->final = false;
            }
        }
    }

    if (!$final)
    {
        return false;
    }
    else
    {
        return true;
    }
}

问题是当我像这样发送数组时(只有 1 条规则)

$credentials = array('name' => 'required', 'password' => 'between');

它工作正常,但如果我添加更多规则(必需|介于...),我的函数将仅适用于第一个规则,因此在这种情况下,忽略规则之间...

4

1 回答 1

1

将您的替换elseifif

if (in_array('required', $rule))
{
    if (empty($_POST[$key])) 
    {
        $this->msg = 'Field '.$key.' is required';
        $this->final = false;
    }
}
// Change this elseif
elseif (in_array('between', $rule)) 

这意味着elseif只检查第一条规则。如果您有'required|between',则将输入第一个 if 语句,因此该elseif部分不能。

于 2013-08-22T23:09:41.063 回答