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

仅插入单行数据时成功消息未显示的问题解决

解决仅录入少量学生成绩时不显示成功消息的问题

从你提供的代码来看,问题的核心原因及修复方案如下:

问题根源

  1. 总分判断逻辑限制:控制器中仅当学生成绩总分$total > 0时,才会将该学生的成绩加入insert_array保存。若录入的1-2名学生总分恰好为0(比如所有科目得0分),insert_array会为空,前端可能因未检测到有效数据更新而不显示提示。
  2. 状态码类型不统一:成功时返回的status是字符串'1',验证失败时返回整数0,若前端使用严格相等(===)判断状态,会导致匹配失败。
  3. 未校验数据库操作结果:控制器当前不管模型是否真的成功保存数据,都会输出成功消息,缺乏对操作结果的有效校验。

修复步骤

1. 调整成绩录入的总分判断逻辑

允许保存0分成绩,移除$total > 0的限制,确保所有提交的学生成绩都能被处理:

修改控制器entrymarks方法中的循环部分:

// 移除原有的 if ($total > 0) 判断,直接构建成绩数组
$array = array(
    'exam_group_class_batch_exam_subject_id' => $this->input->post('exam_group_class_batch_exam_subject_id'),
    'exam_group_class_batch_exam_student_id' => $exam_group_student_value,
    'attendence'                             => $attendance,
    'get_ca1' => $cal1,
    'get_ca2' => $cal2,
    'get_ca3' => $cal3,
    'get_ca4' => $cal4,
    'get_ca5' => $cal5,
    'get_ca6' => $cal6,
    'get_ca7' => $cal7,
    'get_ca8' => $cal8,
    'get_ca9' => $cal9,
    'get_exam' => $exam,
    'get_tot_score' => $total,
    'rem1' => $this->input->post('exam_group_student_rem1_' . $exam_group_student_value),
    'note' => $this->input->post('exam_group_student_note_' . $exam_group_student_value),
);
$insert_array[] = $array;

2. 统一状态码类型并校验模型执行结果

将成功状态的status改为整数,同时根据模型返回的事务状态决定输出内容:

修改控制器末尾的输出逻辑:

$save_success = $this->examgroupstudent_model->add_result($insert_array);
if ($save_success) {
    $array = array(
        'status' => 1, 
        'error' => '', 
        'message' => $this->lang->line('success_message'),
        'affected_count' => count($insert_array) // 新增:返回处理的学生数量
    );
} else {
    $array = array(
        'status' => 0, 
        'error' => '', 
        'message' => '成绩保存失败,请重试' // 自定义失败提示
    );
}
echo json_encode($array);

3. 优化模型事务逻辑

移除冗余的手动提交/回滚代码,CI的trans_complete()会自动根据事务状态处理提交或回滚:

修改模型add_result方法:

public function add_result($insert_array) {
    $this->db->trans_start();
    $this->db->trans_strict(false);

    if (!empty($insert_array)) {
        foreach ($insert_array as $student_value) {
            // 移除无用的变量引用行
            $this->db->where('exam_group_class_batch_exam_subject_id', $student_value['exam_group_class_batch_exam_subject_id']);
            $this->db->where('exam_group_class_batch_exam_student_id', $student_value['exam_group_class_batch_exam_student_id']);
            $q = $this->db->get('exam_group_exam_results');

            if ($q->num_rows() > 0) {
                $update_result = $q->row();
                $this->db->where('id', $update_result->id);
                $this->db->update('exam_group_exam_results', $student_value);
            } else {
                $this->db->insert('exam_group_exam_results', $student_value);
            }
        }
    }

    $this->db->trans_complete();
    return $this->db->trans_status(); // 直接返回事务状态
}

额外建议

  • 前端可根据返回的affected_count字段显示精准提示,比如“成功保存2条学生成绩”,提升用户体验。
  • 确保前端对status使用松散相等(==)判断,或与后端统一使用整数类型,避免类型不匹配导致的提示失效。

内容的提问来源于stack exchange,提问作者KasimaEse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:10:24