CodeIgniter3更新数据时出现Undefined array key 'id'警告求助
解决CodeIgniter3中更新数据时"Undefined array key 'id'"的警告
问题根源
警告出现在Jurusan_model.php的42、44行,核心原因是表单提交时$_POST中没有传递id字段,直接访问$post["id"]触发了数组键不存在的警告。从调试信息也能看到模型的id属性为NULL,验证了这一点。
解决方案
1. 在编辑表单中添加隐藏的id字段
打开edit/edit_jurusan.php视图,在表单内部新增隐藏字段,将当前编辑数据的id传递到POST参数中:
<form method="post" action="<?php echo site_url('JurusanController/edit/'.$jurusan->id); ?>"> <!-- 新增隐藏字段传递id --> <input type="hidden" name="id" value="<?php echo $jurusan->id; ?>"> <div class="form-group"> <label for="jurusan">Jurusan</label> <input type="text" name="jurusan" class="form-control" value="<?php echo $jurusan->jurusan; ?>" required> </div> <button type="submit" class="btn btn-primary">Simpan Perubahan</button> </form>
2. 优化模型的update方法,增加安全判断
修改Jurusan_model.php的update方法,改用CodeIgniter自带的input->post()方法获取参数(键不存在时返回NULL,不会触发警告),同时增加id存在性判断:
public function update() { // 安全获取POST参数,第二个参数为过滤规则 $this->id = $this->input->post('id', true); $this->jurusan = $this->input->post('jurusan', true); // 确保id存在再执行更新操作 if ($this->id) { return $this->db->update($this->table, $this, array('id' => $this->id)); } return false; }
3. 修正控制器中的redirect调用顺序
控制器里的redirect和set_flashdata顺序错误,需先设置flashdata再执行跳转,否则提示信息不会生效:
if ($validation->run()) { $jurusan->update(); // 先设置提示信息,再跳转 $this->session->set_flashdata('success', 'Berhasil diubah'); redirect('JurusanController'); }
额外优化建议
可以在模型的验证规则中添加id的校验,确保更新操作必须传入合法的id:
public function rules() { return [ ['field' => 'id', 'label' => 'ID', 'rules' => 'required|integer'], ['field' => 'jurusan', 'label' => 'jurusan', 'rules' => 'required'] ]; }
内容的提问来源于stack exchange,提问作者Rizky Maulana
相关产品推荐
相关产品推荐

