如何在代码点火器中插入方法之前过滤数据


How to filter data before insert method in CodeIgniter?

在Codeigniter上,如果使用注册表单创建成员并将数据发送到模型成员中的插入方法,则如何过滤数据?

正在寻找最好的MVC方法来做到这一点,因为我不想保存复选框"我同意..."的值,既不想保存安全问题的值,也不想保存此类内容。

在我的控制器中,可以执行(在发送到模型方法之前):

$posts = $this->input->post();
unset($posts['abcdef']);
...

但也可以在我的模型中执行此操作(在使用插入方法之前):

function insert($data){
unset($data['abcdef']);
...
}

那么,如何过滤数据呢?

您发布作品的两种方式 - 但它们是"黑名单"。

您应该在模型中使用"白名单"。这意味着您的模型将只查找所需的信息,并丢弃其余信息。这可以防止人们在您的表单中插入您意想不到的 $_POST 美元数据。

在模型中,我做了类似的事情

function insert($inputs)
{
    $white_list = array ('field1', 'field2', ... ,'field9');
    foreach ($inputs as $post_id => $input)
    {
        if ( ! in_array ($post_id, $white_list))
        {
            unset($inputs[$post_id]);
        }
     }
    // Now insert data here and sleep easy at night
 }