CODEIGNITER - 使用复选框更新多行

时间:2018-02-17 19:00:51

标签: php codeigniter

我一直在努力尝试更新多行,但每次尝试我最终只更新一行

CONTROLLER

public function update()
{
    $data['msg'] = '';
    $id = $_POST['reg_id'];
    $data['students'] = $this->test_model->getStudentData();
    if (isset($_POST['submit'])) {

            if (empty($id) || $id==0) {
                $data['msg'] = 'empty';
            } else {
                $userId = "'".implode("', ' ", $id)."'";

                $class =$this->input->post('class');


                $this->test_model->update($userId, $class);


            }


        } 
     $this->load->view('test', $data);
}

MODEL

public function update($where, $data){
    $this->db->query('UPDATE table SET data="'.$data.'" WHERE where IN('.$where.')');

 }

查看

对不起伙计们!我一直很忙,只是有机会回复你。

以下是表单视图

我已经尝试过我们从你们那里得到的所有解决方案,但我无法得到我想要的东西。也许张贴表单视图可以帮助你们提供更好的解决方案

<form action="<?php echo base_url() ?>test/update" method="POST" >
    <select name="class" id="">
        <option value="some value">some value</option>
        <option value="some value">some value</option>
        <option value="some value">some value</option>
        <option value="some value">some value</option>
        <option value="some value">some value</option>
    </select>
    <input type="submit" name="submit" value="submit">
    <table border="1">
        <thead>
            <tr>
                <th>REG. ID</th>
                <th>SURNAME</th>
                <th>FIRST NAME</th>
                <th>MIDDLE NAME</th>
                <th>CLASS</th>
            </tr>
        </thead>
        <tbody>

    <?php foreach ($students as $key): ?>
        <tr>
            <td><input type="checkbox" name="reg_id[]" value="<?php echo $key->reg_id ?>"><?php echo $key->reg_id ?></td>
            <td><?php echo $key->first_name ?></td>
            <td><?php echo $key->last_name ?></td>
            <td><?php echo $key->mid_name ?></td>
            <td><?php echo $key->class ?></td>
        </tr>
    <?php endforeach ?>
        </tbody>
    </table><br>


</form>

2 个答案:

答案 0 :(得分:0)

我对你想要达到的目标做了一些假设但是,如果我理解正确的话,我认为这就是你要找的东西。

<强>控制器

public function update()
{
    $data['msg'] = 'empty';
    $data['students'] = $this->test_model->getStudentData();

    if(!isset($_POST['submit']))
    {
        $id_list = $this->input->post('reg_id');
        if($id_list) //were any checkboxes posted?
        {
            $data['msg'] = '';
            $class = $this->input->post('class');
            if($class)  //make sure it was posted
            {
                $this->test_model->update($id_list, $class);
            }
        }
    }
    $this->load->view('test', $data);
}

该模型使用update_batch()

<强>模型

public function update($id_list, $data)
{
    foreach($id_list as $id)
    {
        $update_data[] = ['where' => $id, 'data' => $data,];
    }

    if(isset($update_data))
    {
        $this->db->update_batch('table', $update_data, 'where');
    }
}

答案 1 :(得分:0)

在您的查询中,您错过了在查询中传递列名称。 当您使用IN关键字时,必须在IN关键字之前需要数据库列名称。

例如:UPDATE table_name SET name =&#39; abcd&#39;在哪里id IN(&#39; 2,3,5&#39;);

这将更新记录编号2,3和5。

在模型中尝试以下代码。在查询中添加数据库列名称。

[{"id":"1","time":"12.00"},{"id":"2","time":"13.00"}]