将所有字段发布为数组的 Codeigniter 表单验证

Posted

技术标签:

【中文标题】将所有字段发布为数组的 Codeigniter 表单验证【英文标题】:Code igniter Form Validation with All Fields Posted as an Array 【发布时间】:2011-08-13 17:23:04 【问题描述】:

我在 codeigniter 中遇到了有关常规表单验证的问题。就我而言,这些字段发布在数组$m_data = json_decode($this->input->post('data')); 中,需要在将它们发送到模型之前进行验证。看这个例子

        $m_data = json_decode($this->input->post('data'));          
        $validation_rules = array(
             $m_data['title']   => 'trim|xss_clean|required|max_length[50]',
             $m_data['code']    => 'trim|xss_clean|required|max_length[50]'
        );
        foreach ($validation_rules as $key => $value)
            $this->form_validation->set_rules($key,$key,$value);
        


        if ($this->form_validation->run()) 
            foreach ($validation_rules as $key => $value)          
                $m_data[$key] = $this->form_validation->set_value($key);
            
            // do insertion
        

这里的问题是表单验证将使用发布的值的“键”将每个字段分别作为发布的数据并对其运行规则。我试图创建自定义验证,它接收一组字段作为输入,但我不知道如何做到这一点。

您能帮我想出一种使用 CI 表单验证来验证数组内容的方法吗,欢迎提出任何意见

【问题讨论】:

【参考方案1】:

您可以使用数组作为 CI 表单验证的字段名称。

http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields

你需要做的是这样的事情。

$this->form_validation->set_rules('data[]', 'Data', 'trim|xss_clean|required|max_length[50]');

if ($this->form_validation->run()) 
// DO INSERT

else

// LOAD VIEWS

我很确定这些规则是通过您的数据递归应用的,但我会做一些测试来确定。我尝试了不同的字段类型(参见下面的 HTML),它至少适用于所需的规则。 (这只是快速的 HTML,我会使用 CI 表单助手)。

<input type="radio" value="Test data" name="data[]" />
<input type="radio" value=" More data " name="data[]" />
<input type="radio" value="3" name="data[]" />
<input type="input" value="" name="data[]" />

只有在每个字段的所有规则都相同时,这才有效。

【讨论】:

请注意,字段数组将使用 ajax ($.Post) 发布,在我的情况下,响应将只有 true 或 false。所以不需要视图调用。 那没用,或者对不起,我需要一种方法将 form_validation 从 $_POST['title'] 接收输入的方式替换为它自己的实际数据【参考方案2】:

希望我找到了真正有效的答案,但我认为这只是暂时的答案,所以不要依赖它,但它确实有效。

        $validation_rules = $this->config->item('class');
        foreach ($validation_rules as $row)
            $_POST[$row['field']] = $m_data->$row['field'];         
        

我在这里所做的是将$_POST['name_of_fields_in_the_array'] 设置为从视图发布的值$m_data,这使得验证工作得很好

【讨论】:

以上是关于将所有字段发布为数组的 Codeigniter 表单验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 CodeIgniter 将数组数据插入两个表中

如何在 Codeigniter 中插入动态数据?

在 PHP,Codeigniter 中提交带有空字段的表单时出现一些错误

将数组从控制器传递到 codeigniter 中的模型

CodeIgniter - 如何将表单中的值发布为 NULL 而不是 0

Codeigniter - 显示数组字段的单个错误消息