有没有办法在1列中保存多个选择或复选框到数据库表,然后解析才能在数组中获取它?
我有这个screnario:
我有正确的权限,而id 1,2,3和5可以访问某个页面。
id,username,password,right
1, admin, 123, 1
2, john, john, 2
3, doe, doe, array(1,2,3)
模型:
$insert_member = array(
'username' => $this->input->post('username'),
'password' => md5($this->input->post('password')),
'right' => $this->input->post('right')
);
$insert = $this->db->insert('members', $insert_member);
return $insert;
感谢任何帮助。
答案 0 :(得分:3)
使用json_encode:请尝试以下操作:
$right_value = $this->input->post('right');
$insert_member = array(
'username' => $this->input->post('username'),
'password' => md5($this->input->post('password')),
'right' => json_encode($right_value)
);
$insert = $this->db->insert('members', $insert_member);
return $insert;
希望这有帮助。
答案 1 :(得分:0)
对于权限,您可以使用bitwise operators。这些允许您使用二进制在一列中存储多个值。在标准的int(11)列中,您可以使用二进制最多32位的数字,或者十进制(无符号)中的4,294,967,295。
您所做的是在列中分配一些权限,例如,如果您有3个页面,并且您想要控制对每个页面的访问权限,则您具有以下权限:
| Page 3 | Page 2 | Page 1 | Right (Binary / Decimal)
User 1 | 0 | 0 | 0 | 000 / 0
User 2 | 0 | 0 | 1 | 001 / 1
User 3 | 0 | 1 | 0 | 010 / 2
User 4 | 0 | 1 | 1 | 011 / 3
User 5 | 1 | 0 | 0 | 100 / 4
User 6 | 1 | 0 | 1 | 101 / 5
等。你可以有任何组合,二进制位不会相互干扰。
然后,一旦从数据库中重新加载信息,您就可以使用bitwise operators来检查用户是否具有正确的权限。因此,要检查用户是否有权访问第2页,您需要执行以下操作:
// We use 2 here because page 2 is the second bit, which is 2 in decimal
if(($right & 2) == 2) {
// has access...
} else {
// doesn't have access...
}