【问题标题】:CakePHP validation alpha problem w/ validation is checked - what am I doing wrong?CakePHP 验证 alpha 问题 w/ 验证被检查 - 我做错了什么?
【发布时间】:2011-06-09 17:14:20
【问题描述】:

请原谅我对这个问题的无知,但似乎是一个明显的解决方案对我来说并没有在一起..

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

感谢您提供有关为什么会发生这种情况的任何见解。

【问题讨论】:

  • validates() 返回真时,您设置$errors。你确定这就是你想要的吗?
  • 有没有可能你只是漏掉了一个括号?
  • 没有遗漏的括号我可以看到。
  • 验证工作非常好,除了在字段中输入字母字符 - 只是出于某种原因搞砸了 SQL...
  • 你必须命名规则吗?例如'年龄' => 数组('ruleName' => array(), 'ruleName2' => array() )。我不能确定,但​​无论哪种方式,您的验证规则在我看来都嵌套得很奇怪。

标签: php arrays validation cakephp


【解决方案1】:

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

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

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

【讨论】:

  • 蒂姆,是的,我已经多次阅读手册。过了一会儿,这些数组开始看起来都一样了!我明白您对数组结构的意思,并感谢您的提示。我将修改我的并运行进一步的测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多