【问题标题】:Codeigniter Setting rules for form_validation isn't working properlyForm_validation 的 Codeigniter 设置规则无法正常工作
【发布时间】:2013-07-02 16:47:26
【问题描述】:

我在这里尝试验证 2 个字段,“标题”和“HTML”字段。

我有这个代码:

$this->form_validation->set_rules('title', $this->input->post('title'), 'required|min_length[5]|max_length[255]');
$this->form_validation->set_rules('html', $data['html'], 'required');
if ($this->form_validation->run() == FALSE){
    echo 'Fail';
}else{
    echo 'Success';
}
die();

我可以确认这两个变量都是有效的字符串。

该函数始终返回 false,即使两个字段都有效。如果我只为一个字段设置一个规则,那么如果成功,该函数将返回true。

有人可以建议吗?

非常感谢,

彼得

【问题讨论】:

  • 你能显示生成的标记代码吗?
  • $data 是什么,您可以在这里发布您的表格
  • $data 是所有具有 name="data[field_name]" 的字段

标签: php codeigniter validation


【解决方案1】:

验证规则的第二个参数应该是字段的可读名称,而不是实际数据。考虑以下代码。

$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]');
$this->form_validation->set_rules('html', 'HTML', 'required');

第一条规则将检查 POST 变量 $_POST['title'] 以确保它已设置并且介于 5 到 255 个字符之间。如果它不符合这些规则,则在错误消息中使用名称 Title。第二条规则将检查变量$_POST['html'] 以确保它已设置,如果未设置将使用错误消息中的名称HTML

查看CodeIgniter Documentation 了解更具体的实施细节。

根据您的代码,您似乎希望通过表单验证运行一些不属于$_POST 数组的变量。为此,您有两个选择。首先,您可以将要验证的所有数据放入一个数组中,并使用$this->form_validation->set_data($array) 来使用该数组而不是$_POST。或者,您可以将要验证的字段添加到 $_POST

set_data() 示例:

$formData = array('title' => $this->input->post('title'), 'html' => $data['html']);
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]');
    $this->form_validation->set_rules('html', 'HTML', 'required');
if ($this->form_validation->run() == FALSE){
    echo 'Fail';
}else{
    echo 'Success';
}

$_POST 示例:

$_POST['html'] = $data['html'];
$this->form_validation->set_rules('title', 'Title', 'required|min_length[5]|max_length[255]');
    $this->form_validation->set_rules('html', 'HTML', 'required');
if ($this->form_validation->run() == FALSE){
    echo 'Fail';
}else{
    echo 'Success';
}

我个人推荐$_POST方法。

【讨论】:

  • 我认为这不是问题,第二个参数仅用于显示字段错误,您的字段名称和规则与标题无关
  • 啊,我明白了。这就说得通了。如何在 set_rules 参数中使用数组?这可能吗?
  • @PeterStuart 更新了我的答案。这就是你要找的吗?
  • 是的,就是这样。一个简单的问题,$_POST 可以安全使用吗?为什么 CI 会创建一个 post 对象呢?
  • CI 提供了他们自己的 $_POST 接口,因为它允许他们实现其他中间代码,例如可选的 XSS 过滤器或不存在的密钥处理。但是,由于它不允许您通过该类设置 $_POST 值,因此您必须使用数组手动设置它们。
猜你喜欢
  • 2016-04-04
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多