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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:56:06