CodeIgniter3调用未定义方法getMahasiswa()报错排查请求
问题分析与解决方案
嘿,我看到你遇到的问题了,咱们一步步来排查和解决:
1. 直接报错的原因:模型中缺少getMahasiswa()方法
你在控制器Mahasiswa.php的form_update()方法(第35行)调用了$this->Mahasiswa_model->getMahasiswa($this->uri->rsegment(3));,但你的Mahasiswa_model.php里根本没有定义这个方法,这就是PHP抛出「Call to undefined method」错误的直接原因。
解决办法:在模型中添加getMahasiswa()方法
打开Mahasiswa_model.php,新增一个根据nim获取单条学生数据的方法:
function getMahasiswa($id) { $this->db->where('nim', $id); $query = $this->db->get('mhs'); // 返回单条记录对象,方便视图直接调用属性(比如$mhs->nama) return $query->row(); }
2. 更新功能失效的隐藏问题:模型update()方法未执行数据库操作
你当前的模型update()方法只定义了要更新的$data数组,但没有调用CodeIgniter的数据库更新函数,所以即使表单提交成功,数据库里的数据也不会发生变化。
解决办法:完善模型的update()方法
修改Mahasiswa_model.php中的update()方法,补充数据库更新的逻辑:
function update($id, $form) { $data = array( 'nim' => $form[0], 'nama' =>$form[1], 'alamat' => $form[2], ); // 新增以下两行:指定更新条件并执行更新 $this->db->where('nim', $id); $this->db->update('mhs', $data); }
额外优化建议(可选)
为了让代码更易维护,建议把表单提交的参数改成关联数组(而不是当前的索引数组),比如在提交表单时给input设置name="nama"、name="nim"、name="alamat",然后在控制器中用$this->input->post()直接获取关联数组,模型里也可以更清晰地对应字段:
// 控制器submit方法示例 $post_data = array( 'nim' => $this->input->post('nim'), 'nama' => $this->input->post('nama'), 'alamat' => $this->input->post('alamat') ); $this->Mahasiswa_model->add($post_data); // 模型add方法对应修改 function add($arg) { $this->db->insert('mhs', $arg); }
内容的提问来源于stack exchange,提问作者Rizky Mahendra
相关产品推荐
相关产品推荐

