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

时间:2016-08-28 15:30:06

标签: php mysql codeigniter checkbox

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

以下是我的观点:

<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>

这是我的控制者:

$this->Model_user->insert_user();

这是我的模特:

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);
    }
}

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

|user_id|user_name|as_admin|
|   1   |username1|   1    |
|   2   |username2|   0    |

它应该是这样的:

|user_id|user_name|as_admin|
|   1   |username1|   0    |
|   2   |username2|   1    |

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

提前致谢...

2 个答案:

答案 0 :(得分: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>

在您的模型中

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);
    }
}

您遇到此问题是因为,如果您只选中1个复选框,则只会检查已检查的值,因此如果您计算$ as_admin,则只能获得2个as_admin中的1个。

如果您将admin设为仅限用户名2

然后你的帖子将如下

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

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

    [as_admin] => Array
        (
            [2] => 1
        )
)

答案 1 :(得分:1)

问题是未发布未选中的复选框,并且可能没有选中任何框。如果检查了某些内容,则需要一种方法将复选框与userid相关联。此回答要求userid[]的值为复选框的value。所以html改为此。

<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=2>
    </td>
  </tr>
</table>

基本上,如果用户ID为&#39;则控制器功能将设置$info_user['as_admin'] = 1。是$ _POST [&#39; as_admin&#39;]中的值,如果不是,则会设置$info_user['as_admin'] = 0

此答案使用$this->db->insert而不是重复拨打$this->db->insert_batch。数组$data$info_user数组的数组。

function insert_user()
{
    //get the all of $_POST from $this->input
    //eliminates multiple calls to $this->input
    $posted = $this->input->post();

    //It's possible that no "admin" boxes are checked, if none provide empty array
    $as_admin = isset($posted['as_admin']) ? $posted['as_admin'] : array();

    $data = array();
    if(isset($posted['userid']))
    {
        foreach($posted['userid'] as $key => $value)
        {
            $info_user = array(
                'user_id' => $value,
                'user_name' => $posted['username'][$key],
                'as_admin' => in_array($posted['userid'][$key], $as_admin) ? 1 : 0,
            );
            $data[] = $info_user;
        }
        $this->db->insert_batch('some_table', $data);
    }
}