【问题标题】:Insert/Update using Codeigniter使用 Codeigniter 插入/更新
【发布时间】:2016-05-11 10:20:45
【问题描述】:

我已阅读有关 Codeigniter 更新的类似问题和答案,但无法解决我的问题。

我有一个用户表和一个 user_role 表。 user 表包含 userid、name、address 等信息,user_role 表包含 userid 和 role_id,其中 role_id 是 Entry、Edit、View 等角色的 id。

现在管理员可以更改用户的角色并更新用户信息。角色显示为复选框。为了更新用户的角色,我删除了 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');
    }

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

【问题讨论】:

  • 你需要更新user_role来传递用户id
  • 如果您想了解有关 codeigniter 上角色权限的更多信息,您可以在此处查看我的答案:stackoverflow.com/questions/37126013/…
  • 很清楚 - 如果没有选中任何复选框,您的代码将删除所有用户角色 - 您期望什么?所以唯一困扰你的是 else 块只是以不同的方式处理它

标签: php codeigniter activerecord


【解决方案1】:

首先。 $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 的文件(您使用的是这个文件夹和 MVC 模式吗??)在 ORM 和控制器之间我有类似外观的东西。其中一个功能是更新:

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 传给你

【讨论】:

    【解决方案2】:
     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
    
        }
    }
    

    【讨论】:

    • 那就错了,如果 db 中有未在表单中检查的值怎么办?这个值应该被删除 - 他的方法很好
    • 在 Db 中他可以默认取值为 NULL 即使他删除它也会变为 Null。
    • 你甚至不明白我写了什么,你的例子只是处理所有检查的属性 - 但是那些在数据库中并且没有被检查的属性呢?
    • 比诺德,你没有明白我的问题。我不得不删除记录,因为 user_id/role_id 对必须是唯一的。 @sintakone,你是对的。我想用更简洁的方式解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多