2011-06-08 92 views
0

请原谅我对这个问题的无知,但似乎是一个明显的修复不是为了我一起来..CakePHP验证阿尔法问题w /验证检查 - 我做错了什么?

我的验证工作完全正常,除了当我在我的表单字段中输入任何字母字符,我得到一个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

当'validates()'返回true时,你设置'$ errors'。你确定这就是你想要的吗? – Arjan 2011-06-08 20:01:13

+0

是否有可能你错过了一个括号? – alexdd55 2011-06-08 20:04:20

+0

没有托架错过,我可以看到。 – OldWest 2011-06-08 20:39:03

回答

2

你甚至读过手册吗?在CookBook中明确指出,如果要使用多个规则,则需要提供规则名称。

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

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

蒂姆,是的,我已经经历过许多次手册。过了一会儿,这些阵列开始看起来都一样!我明白你在阵列结构上的含义,并感谢你的建议。我要修改我的并进行进一步的测试。 – OldWest 2011-06-09 15:53:12