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');

それは正常に動作しますが、さらにルールを追加すると (required| between ...)、私の関数は最初のルールで機能するため、この場合は between ルールは無視されます...

4

1 に答える 1

1

elseifを次のように置き換えますif

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これは、最初のルールのみがチェックされるという意味です。if you then have 'required|between'then 最初の if ステートメントが入力されるため、そのelseif部分は入力できません。

于 2013-08-22T23:09:41.063 に答える