使用Codeigniter

时间:2016-05-11 10:20:45

标签: php codeigniter activerecord

我已经在Codeigniter更新中阅读了类似的问题和答案,但无法解决我的问题。

我有一个用户表和一个user_role表。 user表包含userid,name,address等信息,user_role表包含userid和role_id,其中role_id是条目的ID,如Entry,Edit,View等。

现在,管理员可以更改用户的角色并更新用户信息。角色显示为复选框。要更新用户的角色,我已在user_role表中删除了该用户的所有行并插入了新角色。我试过这个:

    if(!empty($_POST['role'])) {

            $this->db->where('user_id', $id);
            $this->db->delete('user_role');

    foreach ($_POST['role'] as $val) {

            $arr['user_id'] = $id;
            $arr['role_id'] = $val;                 
            $this->db->insert('user_role', $arr);
            }
    }
    else {
            $this->db->where('user_id', $id);
            $this->db->delete('user_role');
    }

如果取消选中所有复选框,则会删除所有行。它工作正常。但这似乎不是一个正确的方法。请指导。

2 个答案:

答案 0 :(得分:0)

 if($_POST['role']){
     foreach ($_POST['role'] as $val) {

        $arr['user_id'] = $id;
        $arr['role_id'] = $val;                 

      // You need to run Update query. do not need to delete the records every time.
        $where = array('user_id'=>$arr['user_id']);
        $this->modelname->updateRecord($tablename,$arr,$where);

         //It will update the records on post

    }
}

答案 1 :(得分:0)

首先。 $ id定义在哪里?

二。 Codeigniter有一个库,不需要使用$ _POST或$ _GET。

第三。一个用户有多个角色是必要的??我建议你使用如下选择:

<select name="role">
     <option value="user">User</option>
     <option value="employee">Employee</option>
     <option value="admin">Admin</option>
</select>

也许您需要在选项的值中使用角色的ID ...类似于

 <option value="1">User</option>
 <option value="2">Employee</option>
 <option value="3">Admin</option>

四。如果你想要更新...为什么不使用codeigneter ORM的更新方法。通过这种方式,我创建了一个名为general_model.php的文件放在models文件夹上(你使用的是这个文件夹和MVC模式吗?),我在ORM和控制器之间有一个类似于Facade的东西。其中一个功能是更新:

public function update($tablename, $data, $where)
{                   
    foreach($where as $key=>$value)
        $this->db->where($key, $value); 
    $this->db->update($tablename, $data);

    if ($this->db->affected_rows() >= 0)    return TRUE;
    else                                    return FALSE;
}

根据您的情况(仅使用用户的一个角色)从控制器使用的示例可以是:

$this->general_model->update("users_role", array("role_id"=>$this->input->post("")) , array("user_id"=>$id));

我希望它可以帮到你。

PS:如果你想我可以传给你general_model.php