CodeIgniter框架下MySQL成绩数据添加失败问题求助
问题排查与修复方案
一、核心问题定位
当前提示“Gagal menambahkan nilai”(成绩添加失败)是因为update_aksi方法中$this->db->affected_rows() <= 0触发,可能的原因包括:数据未实际修改、目标记录不存在、数据库字段不匹配、表单验证未执行、数据库权限不足等。
二、分步排查与修复
1. 启用表单验证,确保数据合法性
控制器的update_aksi未调用_rules()验证规则,可能导致空值或非法数据提交,直接添加验证逻辑:
public function update_aksi() { // 先执行表单验证 $this->_rules(); if ($this->form_validation->run() == FALSE) { // 验证失败返回编辑页面 $this->update($this->input->post('id_nilsemhas')); return; } // 原有逻辑保留 $id = $this->input->post('id_nilsemhas'); $nilsemhas_1 = $this->input->post('nilsemhas_1'); $nilsemhas_2 = $this->input->post('nilsemhas_2'); $nilsemhas_3 = $this->input->post('nilsemhas_3'); $data = array( 'nilsemhas_1' => $nilsemhas_1, 'nilsemhas_2' => $nilsemhas_2, 'nilsemhas_3' => $nilsemhas_3, ); // 后续更新、错误处理逻辑... }
2. 验证目标记录是否存在
更新前先检查id_nilsemhas对应的记录是否存在,避免无效更新:
// 在$this->db->update前添加 $exists = $this->db->get_where('nilsemhas', ['id_nilsemhas' => $id])->num_rows(); if ($exists == 0) { $this->session->set_flashdata('pesan', '<div class="alert alert-danger alert-dismissible fade show" role="alert"> 记录不存在,无法更新! <button type="button" class="btn btn-close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span></button> </div>'); redirect('administrator/nilsemhas'); return; }
3. 修正数据无变化时的提示逻辑
如果提交的成绩与数据库现有数据完全一致,affected_rows()会返回0,此时不应提示失败,调整提示:
if ($this->db->error()['code'] !== 0) { // 数据库错误处理保留 $error = $this->db->error(); $error_message = 'Database Error (' . $error['code'] . '): ' . $error['message']; show_error($error_message); } else { if ($this->db->affected_rows() > 0) { $this->session->set_flashdata('pesan', '<div class="alert alert-primary alert-dismissible fade show" role="alert"> Nilai Seminar Hasil Berhasil Diperbarui! <button type="button" class="btn btn-close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span></button> </div>'); } else { $this->session->set_flashdata('pesan', '<div class="alert alert-warning alert-dismissible fade show" role="alert"> 数据未发生变化,无需更新! <button type="button" class="btn btn-close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span></button> </div>'); } }
4. 检查数据库字段匹配性
确认nilsemhas表的nilsemhas_1、nilsemhas_2、nilsemhas_3字段类型是否支持提交的数据(比如是否为数值类型却提交了非数值内容),同时确保字段名拼写完全一致。
5. 复用模型方法规范代码
当前控制器直接调用DB类方法,建议复用模型的update_data保持代码分层:
// 控制器update_aksi中替换原有更新逻辑为: $where = ['id_nilsemhas' => $id]; $this->nilsemhas_model->update_data($where, $data, 'nilsemhas');
三、临时调试建议
在update_aksi中添加调试代码,确认提交的ID和数据是否正确:
echo 'ID: ' . $id; echo '<pre>'; print_r($data); echo '</pre>'; die;
内容的提问来源于stack exchange,提问作者Cia
相关产品推荐
相关产品推荐

