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

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">&times;</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">&times;</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">&times;</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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:17:43