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

时间:2018-01-14 01:37:34

标签: php html sql codeigniter checkbox

我在PHP和HTML复选框中遇到了挑战。你能帮我解决这个问题吗?

以下是我的情景:

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

我想要做的是遍历该复选框数组,然后保存每个复选框并检查它。

获取所有选中的复选框都没问题。我找到了一个代码。

现在,我选中了一个示例Delivery模块的复选框,然后将其保存,当然它将转到数据库。如果我编辑了用户角色,然后取消选中了Delivery模块并保存了它,我应该删除该行吗?因为我理解的每个复选框都将保存为数据库中的一行。

这是我无法想象如何实施的部分。你能帮帮我设计一下吗?

希望我能很好地解释自己。如果有不清楚的部分,请告诉我。谢谢你的任何建议,我很感激。

以下是一些细节希望它会有所帮助:

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

这是我的代码:

          <?php if ($this->session->userdata('portalModules')):
            $portalModules = $this->session->userdata('portalModules');
            $prevGroup = NULL;
            $firstGroup = TRUE;
          ?>
          <?php foreach ($portalModules as $moduleGroup): ?>
            <?php if ($moduleGroup['moduleGroup'] !== $prevGroup): ?>
              <?php if (!$firstGroup): ?>
                </div>
              </div>
            <?php else: ?>
              <?php $firstGroup = FALSE; ?>
              <?php endif ?>

              <?php $prevGroup = $moduleGroup['moduleGroup']; ?>
              <div>
                <div class="form-group"><input type="checkbox" name=""><?php echo $moduleGroup['moduleGroup']; ?></div>
                <div>
                  <?php foreach ($portalModules as $menu): ?>
                    <?php if ($menu['moduleGroup'] == $moduleGroup['moduleGroup']): ?>
                    	<div class="form-group">
                      	<p style="margin-left: 20px;"><input type="checkbox" name=""><?php echo $menu['moduleName']; ?></p>
                    		
                    	</div>
                    <?php endif ?>
                  <?php endforeach ?>
            <?php endif ?>
            
          <?php endforeach ?>

Here is the screenshot of check boxes.

1 个答案:

答案 0 :(得分:1)

我会创建一个名为权限的表,其中包含布尔列或枚举列,选项为1,0,默认选项为0:

enter image description here

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

如果管理员取消选中delivery_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
        }
    }