PHP-循环复选框并将其保存到数据库

PHP-循环复选框并将其保存到数据库,php,html,sql,codeigniter,checkbox,Php,Html,Sql,Codeigniter,Checkbox,我在PHP和HTML复选框方面遇到了挑战。你能帮我做这个吗 以下是我的设想: 我有一个用户角色模块,您将在其中创建一个用户角色,然后使用复选框分配该角色可以访问的模块。我会附上一个截图 我要做的是循环遍历该复选框数组,然后保存每个复选框并在其上加一个复选框 选中所有复选框就可以了。我找到了一个密码 现在,我选中了一个复选框,例如deliverymodule,然后保存它,当然它会进入数据库。如果我编辑了用户角色,然后取消选中传递模块并保存了它,我应该删除该行吗?因为据我所知,每个复选框将保存为数据

我在PHP和HTML复选框方面遇到了挑战。你能帮我做这个吗

以下是我的设想:

我有一个用户角色模块,您将在其中创建一个用户角色,然后使用复选框分配该角色可以访问的模块。我会附上一个截图

我要做的是循环遍历该复选框数组,然后保存每个复选框并在其上加一个复选框

选中所有复选框就可以了。我找到了一个密码

现在,我选中了一个复选框,例如deliverymodule,然后保存它,当然它会进入数据库。如果我编辑了用户角色,然后取消选中传递模块并保存了它,我应该删除该行吗?因为据我所知,每个复选框将保存为数据库中的一行

这是我无法想象如何实现的部分。你能帮我看看这个设计是怎样的吗

希望我能解释清楚。如果有不清楚的地方,请告诉我。谢谢你的建议,我很感激

以下是一些细节,希望能有所帮助:

我使用CodeIgniter和MS SQL Server作为数据库

这是我的密码:



我将创建一个名为permissions的表,该表由布尔列或枚举列组成,选项为1,0,默认选项为0:

创建用户时,只需将其id添加到表中,如果将默认值设置为0,则不必担心在执行角色检查时处理空值

如果管理员取消选中
delivery\u detailed
复选框,则只需将值从1更改为0即可。禁止删除行。简单

   /**
     * Check to see if user is allowed for $cpermission
     * 
     * @param string $cpermission
     * @param int $uid User id
     * @return boolean
     */
    function check_user_role($cpermission, $uid) {
        $this->db->select($cpermission);
        $q = $this->db->get_where('user_roles', array('user_id' => $uid));
        if ($q->num_rows() !== 1) {
            return false;
        }
        return intval($q->row()->{$cpermission}) == 1; // is user allowed?
    }

    /**
     * Update a user role
     * 
     * @param string $cpermission
     * @param int $val ON/OFF 1,0
     * @param int $uid User id
     * @return boolean
     */
    function update_user_role($cpermission, $val, $uid) {
        $this->populate_user_roles($uid);
        $this->db->where('user_id', $uid);
        return $this->db->update('user_roles', array($cpermission => $val));
    }

    /**
     * Adds new user to user role table with all 0 permissions
     * 
     * @param int $uid
     * @return boolean
     */
    function populate_user_roles($uid) {
        $this->db->where('user_id', $uid);
        // user doesn't exist in user role table yet??
        if ($this->db->count_all_results('user_roles') < 1) {
            $columns = $this->db->list_fields('user_roles'); // get all columns
            $data = array_fill_keys($columns, 0); // fill with 0
            unset($data['user_id']); // remove user_id (we don't want [user_id] => 0
            $data['user_id'] = $uid; // add proper user_id to $data array
            return $this->db->insert('user_roles', $data);
        } else {
            return true; // user exists in roles table
        }
    }
/**
*检查是否允许用户使用$cpermission
* 
*@param string$cpermission
*@param int$uid用户id
*@返回布尔值
*/
功能检查用户角色($cpermission,$uid){
$this->db->select($cpermission);
$q=$this->db->get_-where('user_-roles',array('user_-id'=>$uid));
如果($q->num_rows()!==1){
返回false;
}
return intval($q->row()->{$cpermission})=1;//是否允许用户使用?
}
/**
*更新用户角色
* 
*@param string$cpermission
*@param int$val开/关1,0
*@param int$uid用户id
*@返回布尔值
*/
函数更新\用户\角色($cpermission、$val、$uid){
$this->填充用户角色($uid);
$this->db->where('user\u id',$uid);
返回$this->db->update('user_roles',array($cpermission=>$val));
}
/**
*将新用户添加到具有所有0权限的用户角色表
* 
*@param int$uid
*@返回布尔值
*/
函数填充用户角色($uid){
$this->db->where('user\u id',$uid);
//用户角色表中还不存在用户??
如果($this->db->count\u all\u results('user\u roles')<1){
$columns=$this->db->list_字段('user_roles');//获取所有列
$data=array_fill_keys($columns,0);//用0填充
unset($data['user\u id');//删除用户id(我们不希望[user\u id]=>0
$data['user\U id']=$uid;//将正确的用户\U id添加到$data数组中
返回$this->db->insert('user\u roles',$data);
}否则{
返回true;//角色表中存在用户
}
}

当有人回答你的问题时,最好的做法是respond@Alex,我很抱歉,但是你的答案给了我一个想法。所以,我会将你的答案标记为正确。非常感谢。嗨,我真的很抱歉这么晚才回来。这太粗鲁了。我可以用你给出的想法解决这个问题。但我所做的是我没有为你创建专栏模块列表中的每个模块都会随着时间的推移而增长。我只保存模块id和用户id,以检查用户是否具有模块权限。在编辑过程中,我删除了所有保存的模块id,然后再次插入。谢谢。