代码点火器表单验证,所有字段都作为数组发布

时间:2011-04-27 09:59:35

标签: php arrays codeigniter post validation

我在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表单验证来验证数组内容的方法,感谢任何输入

2 个答案:

答案 0 :(得分:4)

您可以将数组用作具有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[]" />

这仅适用于每个字段的所有规则相同的情况。

答案 1 :(得分:1)

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

        $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视图中发布的值,并使验证工作得非常好