【问题标题】:Problems with Codeigniter update_batchCodeigniter update_batch 的问题
【发布时间】:2019-09-15 20:32:04
【问题描述】:

我有一个视图文件,我在其中生成一些基于数据库获取操作的输入字段。我正在尝试为参加考试的学生获得分​​数。这些学生是动态填充的,这里是视图文件的代码。

查看

<?php if($this->session->flashdata('info')) { ?>
            <div class="alert alert-info">
                <?php echo $this->session->flashdata('info'); ?>
            </div>
            <?php } ?>

            <?php echo form_open('dashboard/insert_marks'); ?>
            <?php foreach($entries as $ent) { ?>
            <div class="row">
                <div class="col-2">
                    <div class="form-group">
                        <label><?php echo ($ent->id); ?></label>
                        <input type="text" name="id" class="form-control" placeholder="N/A" disabled>
                    </div>
                </div>
                <div class="col-10">
                    <div class="form-group">
                        <label><?php echo ($ent->student_name); ?></label>
                        <input type="text" name="marks" class="form-control">
                    </div>
                </div>
            </div>
            <?php } ?>
            <button type="submit" name="save" value="Save Data" class="btn btn-primary">Submit</button>

            <?php echo form_close(); ?>

控制器

在控制器中,我试图创建一个数组数组,以便我可以在 Codeigniter update_batch 函数的帮助下一次插入所有这些值。我在下面粘贴了控制器文件的代码。

public function insert_marks() {
    $this->load->model('Marks_Model');
    if($this->input->post('save'))
    {
        $idlist[] = $this->input->post('id');
        $marklist[] = $this->input->post('marks');

        $marks_data = array(array());

        for($x = 0; $x < sizeof($idlist); $x++){
            $marks_data[] = array(
                'id' => $idlist[$x],
                'marks' => $marklist[$x]
            );
        }

        $this->Marks_Model->update_marks($marks_data);
        $this->session->set_flashdata('info','Marks Updated Successfully');
        redirect($_SERVER['HTTP_REFERER'],'refresh');
    }

型号 在模型中,我调用了 update_batch 以插入数组中的所有 dtaa。这是我第一次使用 update_batch。

public function update_marks($marks_data) {
    $this->db->update_batch('marks',$marks_data,'id'); 
}

错误

我有一个错误“提交用于批量更新的一个或多个行缺少指定的索引。”

我不知道出了什么问题。任何帮助表示赞赏。

【问题讨论】:

    标签: model-view-controller codeigniter-3 crud


    【解决方案1】:

    输入已经是数组,因此请使用$idlist = 而不是$idlist[] =$marklist 也是如此。这可能是“缺少指定索引”错误的原因。

    $marks_data 应该只是一个数组,而不是数组中的数组。这也可能是错误的原因。

    使用foreach 循环创建$marks_data 更容易编写(和阅读,IMO)。

    把所有这些放在一起,你就得到了。

    public function insert_marks()
    {
        $this->load->model('Marks_Model');
    
        if($this->input->post('save'))
        {
            $idlist = $this->input->post('id');
            $marklist = $this->input->post('marks');
    
            $marks_data = array();
    
            foreach($idlist as $key => $id)
            {
                // we are filling an array with arrays here
                $marks_data[] = array('id' => $id, 'marks' => $marklist[$key]);
            }
    
            $this->Marks_Model->update_marks($marks_data);
            $this->session->set_flashdata('info', 'Marks Updated Successfully');
            redirect($_SERVER['HTTP_REFERER'], 'refresh');
        }
    }
    

    还需要进行一项更改。查看代码foreach($entries as $ent) 告诉我们可能有不止一对id/marks 输入。这意味着输入名称必须是数组,因此请按如下所示进行更改。

    // Change this
    <input type="text" name="id" ...
    // to this
    <input type="text" name="id[]" ...
    

    &lt;input type="text" name="marks" 执行相同操作,将其更改为 &lt;input type="text" name="marks[]" 。此更改确保$idlist$marklist 将是数组,如果foreach 要工作,这是必需的。

    确保它能够“工作”需要更多代码来实现此方法。应进行检查以确认提供的值。然后,这些值也应该在插入数据库之前进行验证和清理(永远不要相信用户输入)。

    【讨论】:

    • 我试过这个。收到错误“为 foreach() 提供的参数无效”
    • 更新后也出现同样的错误。我也尝试使用它进行循环。不给出错误但没有任何内容写入数据库。我可能不得不改变为每个学生输入分数的策略。我想一个接一个。
    • $marks_data 看起来像什么?在将其发送给模型之前尝试var_dump($marks_data); exit;
    • 我这样做了,idlist[0] 里面什么都没有。不知何故,我们在这个数组中没有任何东西。什么都没有。
    • Marklist 包含所有数据,但不是 id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多