检查带有验证的CakePHP验证alpha问题 - 我做错了什么?

时间:2011-06-08 19:51:51

标签: php arrays validation cakephp

请原谅我对这个问题的无知,但似乎是一个明显的解决办法并不是为了我......

我的验证工作得很好,除了当我在表单字段中输入任何字母字符时,我得到一个sql错误:

SQL Error: 1054: Unknown column 'abcde' in 'where clause'...

如你所见,我输入'abcd'作为测试..

但是,如果我输入一个数字字符并且我的验证一切正常..看来alpha值是作为列名读取的吗?

以下是我的验证规则:

        ...'Age' => array(
        array(
            'rule' => array('maxLength', 3),
        array(
            'rule' => 'numeric',
            'allowEmpty' => true,
            'message' => 'Age must be numeric.'
        ),
    ),

以下是我的控制器验证码:

        if ($this->RequestHandler->isAjax()) {
        if ($this->Plan->validates()) {
            $this->Plan->set($this->data);
            $errors = $this->Plan->invalidFields();
            $this->set('errors', $errors);
        } else {
            $this->Plan->set($this->data);
        }
    }

正如您所看到的,我将错误返回到我的视图中,并且正确的错误“年龄必须是数字”。实际上确实按预期显示,但只是显示SQL错误。

感谢有关为何发生这种情况的任何见解。

1 个答案:

答案 0 :(得分:2)

您是否阅读过手册?在CookBook中明确指出,如果要使用多个规则,则需要提供规则名称。

此外,您的数组嵌套完全错误。我不知道这是如何工作的,但无论如何,这就是你的验证应该是这样的:

var $validate = array(
    'Age' => array(
        'length' => array(
            'rule' => array('maxLength', 3)
        ),
        'numbers' => array(
            'rule' => 'numeric',
            'allowEmpty' => true,
            'message' => 'Age must be numeric.'
        )
    )
);