【问题标题】:CODEIGNITER - Updating multiple rows using checkboxCODEIGNITER - 使用复选框更新多行
【发布时间】:2018-02-17 19:00:51
【问题描述】:

我一直在尝试更新多行但没有成功,但每次我尝试最终都只更新了一行

控制器

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

型号

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>

【问题讨论】:

  • 所以,显然$id 不是一个数组。你输出$id的内容了吗?
  • 另外,您使用的是update_student_class,但向我们展示了来自模型的update,它们是否相同?
  • 输出显示它是一个数组,但仍然只更新一条记录
  • 我想查看表单的视图代码,以便更好地理解输入。

标签: php codeigniter


【解决方案1】:

我正在对您想要实现的目标做出一些假设,但是,如果我理解正确,我认为这就是您想要的。

控制器

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

【讨论】:

  • 我收到以下错误消息:提交批量更新的一个或多个行缺少指定的索引
【解决方案2】:

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

例如:UPDATE table_name SET name='abcd' WHERE id IN('2,3,5');

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

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

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

}

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多