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

如何向diklat表插入关联登录账号的数据并过滤查询结果?

解决CodeIgniter中关联登录用户插入与查询diklat数据的问题

问题说明

现有akun表与diklat表,存在两个问题:

  • 调用tambah方法插入diklat数据时,未关联当前登录用户的id_akun字段;
  • view_diklat查询方法返回所有用户的diklat数据,导致其他用户的记录也会被展示。

现有表结构

账号表(Tabel Akun)

账号表

培训表(Tabel diklat)

培训表

修改方案

1. 插入数据时关联当前登录用户

修改diklat控制器的tambah方法,在插入数组中添加当前登录用户的id_akun:

public function tambah()
{
    $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!']);

    $data['title'] = ' Tambah Diklat';
    $data['akun'] = $this->db->get_where('akun', ['email' => $this->session->userdata('email')])->row_array();

    if ($this->form_validation->run() == false) {
        $this->load->view('templates/header', $data);
        $this->load->view('templates/top_bar');
        $this->load->view('templates/sidebarmenu');
        $this->load->view('diklat/tambah');
        $this->load->view('templates/footer');
    } else {
        // 获取当前登录用户的ID
        $current_user_id = $data['akun']['id'];
        
        $array = [
            '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'),
            'id_akun'       => $current_user_id // 关联当前用户ID
        ];

        // 执行插入并判断结果
        if ($this->db->insert('diklat', $array)) {
            $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">Data Berhasil ditambah</div>');
            redirect('diklat/index');
        } else {
            $this->session->set_flashdata('message', '<div class="alert alert-danger" role="alert">Data Gagal Disimpan</div>');
            redirect('diklat/tambah');
        }
    }
}

2. 修改查询方法,仅返回当前用户的diklat数据

修改模型中的view_diklat方法,添加当前用户ID的过滤条件:

function view_diklat()
{
    // 从session获取当前登录用户ID(需确保登录时已存入session)
    $current_user_id = $this->session->userdata('id');

    // 使用查询构造器更安全
    return $this->db->select('*')
                    ->from('diklat')
                    ->join('akun', 'diklat.id_akun = akun.id')
                    ->where('diklat.id_akun', $current_user_id)
                    ->get()
                    ->result_array();
}

补充:确保session存入用户ID

登录验证成功后,需将用户ID存入session,示例代码:

$user = $this->db->get_where('akun', ['email' => $email])->row_array();
$this->session->set_userdata('id', $user['id']);
$this->session->set_userdata('email', $user['email']);

修改完成后,插入的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.25 17:09:57