Php 为什么我能';不要通过取消选中CodeIgniter中的复选框来更改数据库中的数据?

Php 为什么我能';不要通过取消选中CodeIgniter中的复选框来更改数据库中的数据?,php,jquery,mysql,codeigniter,checkbox,Php,Jquery,Mysql,Codeigniter,Checkbox,所以我从这个网站上得到了这个简单的论坛项目: 但我无法用checkbox解决这个问题。问题来自网站的原始代码。现在我已经有两天没法解决这个问题了 问题其实很简单,当我想为某个角色(管理员、编辑等)添加权限时,我可以选中一些复选框来实现这一点。如果我想添加特权,它可以正常工作,但是我不能删除我已经添加到角色中的每个特权。代码如下: 控制器 public function role_edit($role_id) { if ($this->session->userdata('

所以我从这个网站上得到了这个简单的论坛项目:

但我无法用checkbox解决这个问题。问题来自网站的原始代码。现在我已经有两天没法解决这个问题了

问题其实很简单,当我想为某个角色(管理员、编辑等)添加权限时,我可以选中一些复选框来实现这一点。如果我想添加特权,它可以正常工作,但是我不能删除我已经添加到角色中的每个特权。代码如下:

控制器

 public function role_edit($role_id)
{
    if ($this->session->userdata('role_edit') == 0) {
        redirect('admin');
    }
    if ($this->input->post('btn-edit')) {
        $this->admin_model->role_edit();
        if ($this->admin_model->error_count != 0) {                
            $this->data['error'] = $this->admin_model->error;
        } else {
            $this->session->set_userdata('tmp_success', 1);
            redirect('admin/role_edit/'.$role_id);
        }
    }
    $tmp_success = $this->session->userdata('tmp_success');
    if ($tmp_success != NULL) {
        // role updated
        $this->session->unset_userdata('tmp_success');
        $this->data['tmp_success'] = 1;
    }
    $this->data['role'] = $this->db->get_where(TBL_ROLES, array('id' => $role_id))->row();
    $this->data['title']   = 'Admin Role Edit :: '.CIBB_TITLE;
    $this->load->view('header', $this->data);
    $this->load->view('admin/sidebar');
    $this->load->view('admin/role_edit');
    $this->load->view('footer');
}
模型

观点


编辑角色
角色更新!
错误!
- 
- 

在检查了更新角色的代码之后,我非常确定这是由于以下代码

    $row_reset = $row['roles'];
    foreach ($row_reset as $key => $value) {
        $row_reset[$key] = 0;
    }

    $this->db->where('id', $row['id']);
    $this->db->update(TBL_ROLES, $row_reset);
在这里,“所有角色”子列被重置为零,但问题是,如果您没有选中复选框,它将不会关联行['roles']post字段,因此$row['roles']将是选中复选框的数组,因此它将不会正确更新。去修理它。让我告诉你解决办法

     $row_reset = $row['roles'];
用以下数组替换此行

    $row_reset = array('admin_area','thread_create','thread_edit','thread_delete','post_create','post_edit','post_delete','role_create','role_edit','role_delete');

可能需要使用
$this->db->delete(TBL\u roles,$row\u reset)删除未选择的角色
     $row_reset = $row['roles'];
    $row_reset = array('admin_area','thread_create','thread_edit','thread_delete','post_create','post_edit','post_delete','role_create','role_edit','role_delete');