使用Codeigniter从表格到数据库发布多个复选框

hri*_*riy 1 php mysql checkbox codeigniter

我的问题是将我的复选框发布到数据库.请帮我...

这是我的观点:

<table>
    <tr>
        <td>
            <input type='hidden' name='userid[]' value='1'>
            <input type='text' name='username[]' value='username1'> 
        </td>
        <td>
            <input type='checkbox' name='as_admin[]' value=1>
        </td>
    </tr>
    <tr>
        <td>
            <input type='hidden' name='userid[]' value='2'>
            <input type='text' name='username[]' value='username2'> 
        </td>
        <td>
            <input type='checkbox' name='as_admin[]' value=1>
        </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

$this->Model_user->insert_user();
Run Code Online (Sandbox Code Playgroud)

这是我的模特:

function insert_user(){
    $user_count = count($this->input->post('userid'));
    $userid     = $this->input->post('userid');
    $username   = $this->input->post('username');
    $as_admin   = $this->input->post('as_admin');

    for ($i=0; $i < $user_count; $i++){
        $info_user = array(
            'user_id'   => $userid[$i],
            'user_name' => $username[$i],
            'as_admin'  => $as_admin[$i],
        );
        $this->db->insert($info_user);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是'username2'标记为admin(选中第二行复选框),在数据库中将是这样的:

|user_id|user_name|as_admin|
|   1   |username1|   1    |
|   2   |username2|   0    |
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

|user_id|user_name|as_admin|
|   1   |username1|   0    |
|   2   |username2|   1    |
Run Code Online (Sandbox Code Playgroud)

现在有人如何保存这些东西,请...

提前致谢...

par*_*rth 5

试试这个,在您的视图中,使用用户ID作为as_admin的键

<table>
    <tr>
        <td>
            <input type='hidden' name='userid[]' value='1'>
            <input type='text' name='username[]' value='username1'> 
        </td>
        <td>
            <input type='checkbox' name='as_admin[1]' value=1>
        </td>
    </tr>
    <tr>
        <td>
            <input type='hidden' name='userid[]' value='2'>
            <input type='text' name='username[]' value='username2'> 
        </td>
        <td>
            <input type='checkbox' name='as_admin[2]' value=1>
        </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

在你的模型中

function insert_user(){
    $user_count = count($this->input->post('userid'));
    $userid     = $this->input->post('userid');
    $username   = $this->input->post('username');
    $as_admin   = $this->input->post('as_admin');

    for ($i=0; $i < $user_count; $i++){
        $info_user = array(
            'user_id'   => $userid[$i],
            'user_name' => $username[$i],
            'as_admin'  => isset($as_admin[$userid[$i]]) ? 1 : 0,
        );
        $this->db->insert($info_user);
    }
}
Run Code Online (Sandbox Code Playgroud)

你遇到了这个问题,因为你只需要勾选1个复选框,只会传递选中的值,所以如果你计算$ as_admin,你只能得到2个as_admin中的1个.

如果你只给admin这个username2

那么你的帖子将如下

Array
(
    [userid] => Array
        (
            [0] => 1
            [1] => 2
        )

    [username] => Array
        (
            [0] => username1
            [1] => username2
        )

    [as_admin] => Array
        (
            [2] => 1
        )
)
Run Code Online (Sandbox Code Playgroud)