我在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 ?>
答案 0 :(得分:1)
我会创建一个名为权限的表,其中包含布尔列或枚举列,选项为1,0,默认选项为0:
创建用户时,只需将其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
}
}