如何向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
相关产品推荐
相关产品推荐

