仅插入单行数据时成功消息未显示的问题解决
解决仅录入少量学生成绩时不显示成功消息的问题
从你提供的代码来看,问题的核心原因及修复方案如下:
问题根源
- 总分判断逻辑限制:控制器中仅当学生成绩总分
$total > 0时,才会将该学生的成绩加入insert_array保存。若录入的1-2名学生总分恰好为0(比如所有科目得0分),insert_array会为空,前端可能因未检测到有效数据更新而不显示提示。 - 状态码类型不统一:成功时返回的
status是字符串'1',验证失败时返回整数0,若前端使用严格相等(===)判断状态,会导致匹配失败。 - 未校验数据库操作结果:控制器当前不管模型是否真的成功保存数据,都会输出成功消息,缺乏对操作结果的有效校验。
修复步骤
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
相关产品推荐
相关产品推荐

