You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ID实现diklat表数据编辑删除及编辑失败问题排查

编辑功能失败原因排查与修复方案

问题分析

编辑功能失效主要由以下几个关键问题导致:

1. 编辑链接未传递记录ID

视图中的Edit按钮链接未携带目标记录的id_diklat参数,控制器无法识别需要编辑的具体数据。

2. 控制器Edit方法未接收并使用ID参数

  • 方法定义未包含ID参数,无法获取前端传递的记录ID
  • 查询待编辑数据时,get_where语句缺少有效条件(仅传递键名['id_diklat']而非键值对),无法正确获取目标记录

3. 编辑表单缺少隐藏ID字段

提交编辑数据的表单未包含id_diklat的隐藏输入项,控制器无法获取要更新的记录ID,最终更新语句无匹配目标。

4. 删除功能存在参数顺序错误

模型的delete_data方法参数顺序与控制器调用时的传递顺序不匹配,导致删除操作也无法正常执行。


修复方案

1. 修改视图中的编辑链接

在列表页面的Edit按钮中添加记录ID参数:

<a href="<?= base_url('diklat/edit/' . $diklat['id_diklat']); ?>" class="btn btn-sm btn-outline-primary">Edit</a>

2. 修正控制器Edit方法

更新方法定义以接收ID参数,并正确查询目标记录:

public function edit($id = null)
{
    // 校验ID是否存在
    if (!$id) {
        redirect('diklat');
    }

    $data['title'] = 'Edit Data Pelatihan & Seminar';
    $data['akun'] = $this->db->get_where('akun', ['email' => $this->session->userdata('email')])->row_array();
    // 根据ID获取待编辑记录
    $data['diklat'] = $this->db->get_where('diklat', ['id_diklat' => $id])->row_array();

    // 校验记录是否存在
    if (!$data['diklat']) {
        redirect('diklat');
    }

    $this->form_validation->set_rules('f_namadiklat', 'nama_diklat', 'required|trim', ['required' => 'Nama Diklat Belum Diisi!']);
    $this->form_validation->set_rules('f_penyelenggara', 'penyelenggara', 'required|trim', ['required' => 'Penyelenggara Diklat Harus Diisi!']);
    $this->form_validation->set_rules('f_tempatdiklat', 'tempat_diklat', 'required|trim', ['required' => 'Tempat Diklat Harus Diisi!']);

    if ($this->form_validation->run() == false) {
        $this->load->view('templates/header', $data);
        $this->load->view('templates/sidebarmenu', $data);
        $this->load->view('templates/top_bar', $data);
        $this->load->view('diklat/edit');
        $this->load->view('templates/footer');
    } else {
        $id = $this->input->post('id_diklat');
        $nama_diklat = $this->input->post('f_namadiklat');
        $jenis_diklat = $this->input->post('f_jenisdiklat');
        $penyelenggara = $this->input->post('f_penyelenggara');
        $tempat_diklat = $this->input->post('f_tempatdiklat');
        $waktu_diklat = $this->input->post('tgl_diklat');

        $this->db->set('nama_diklat', $nama_diklat);
        $this->db->set('jenis_diklat', $jenis_diklat);
        $this->db->set('penyelenggara', $penyelenggara);
        $this->db->set('tempat_diklat', $tempat_diklat);
        $this->db->set('waktu_diklat', $waktu_diklat);

        // 处理证书上传
        $upload_data = $_FILES['sertifikat']['name'];
        if ($upload_data) {
            $config['allowed_types'] = 'jpg|jpeg|png|pdf';
            $config['max_size'] = '2048';
            $config['upload_path'] = './assets/doc/sertifikat/';

            $this->load->library('upload', $config);

            if ($this->upload->do_upload('sertifikat')) {
                $old_data = $data['diklat']['sertifikat'];
                if ($old_data != 'default.jpg') {
                    unlink(FCPATH . 'assets/doc/sertifikat/' . $old_data);
                }

                $new_sertifikat = $this->upload->data('file_name');
                $this->db->set('sertifikat', $new_sertifikat);
            } else {
                echo $this->upload->display_errors();
            }
        }

        $this->db->where('id_diklat', $id);
        $this->db->update('diklat');

        $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">Data Diklat Berhasil di Update</div>');
        redirect('diklat');
    }
}

3. 在编辑表单中添加隐藏ID字段

在diklat/edit视图的表单内添加以下代码,确保提交时传递记录ID:

<input type="hidden" name="id_diklat" value="<?= $diklat['id_diklat']; ?>">

4. 修复删除功能的参数顺序

方案一:修正模型方法参数顺序

function delete_data($where, $table)
{
    $this->db->where($where);
    $this->db->delete($table);
}

方案二:修正控制器调用顺序

public function delete($id)
{
    $this->load->model('diklat_m');
    $where = array('id_diklat' => $id);
    // 调整参数顺序:先表名,后条件
    $this->diklat_m->delete_data('diklat', $where);
    redirect('diklat');
}

内容的提问来源于stack exchange,提问作者labkes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:37:37