CodeIgniter - 将数组数据存储到数据库表

时间:2014-05-20 09:50:29

标签: php codeigniter

有没有办法在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;

感谢任何帮助。

2 个答案:

答案 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...
}