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

CodeIgniter执行查询获取学生科目总分后如何在视图中正确输出

CodeIgniter 科目总分统计展示修正方案

现有代码核心问题

  1. 模型中$this->db->get()方法传入了字段参数$totField,而非需要查询的表名$table,导致查询直接报错
  2. 视图中直接执行数据库查询不符合MVC规范,且直接输出查询结果对象而非查询结果值,无法正常展示分数
  3. 缺少空值判断,无匹配数据时会抛出PHP错误

第一步:修正模型代码

public function SubjectTotal($subject_id,$class_id,$section_id,$session_id,$table,$totField)
{
    $this->db->select_sum($totField, 'total_score');
    $this->db->where('subject_id', $subject_id);
    $this->db->where('class_id', $class_id);
    $this->db->where('section_id', $section_id);
    $this->db->where('session_id', $session_id);
    $this->db->group_by('subject_id');
    $query = $this->db->get($table);
    // 空值判断,无数据返回0
    if($query->num_rows() > 0){
        return $query->row()->total_score;
    }
    return 0;
}

第二步:调整控制器逻辑

不要单独封装返回总分的控制器方法,直接在加载成绩页的方法中预计算所有科目的总分,统一传入视图:

public function marksheet()
{
    // 从请求/SESSION获取筛选参数,根据实际业务调整取值逻辑
    $class_id = $this->input->post('class_id');
    $section_id = $this->input->post('section_id');
    $session_id = $this->session->userdata('current_session_id');
    $table = '你的成绩表实际表名';
    $totField = '你要统计的分数字段实际名称';

    // 获取当前班级所有科目列表,该方法需自行实现查询科目表
    $subject_list = $this->student_model->get_class_subjects($class_id);
    $subject_score_map = [];

    // 循环计算每个科目的总分
    foreach($subject_list as $subject){
        $subject_score_map[$subject['subject_id']] = $this->student_model->SubjectTotal(
            $subject['subject_id'],
            $class_id,
            $section_id,
            $session_id,
            $table,
            $totField
        );
    }

    // 把数据传入视图
    $data['subject_list'] = $subject_list;
    $data['subject_score_map'] = $subject_score_map;
    $this->load->view('studentview', $data);
}

第三步:修正视图代码

视图中仅做数据渲染,不要写任何数据库查询逻辑:

<table>
<?php foreach($subject_list as $sub): ?>
<tr>
    <td style="border: 1px solid black;font-size:12px;width:5px;white-space: nowrap;"></td>
    <td style="border: 1px solid black;font-size:12px;width:30px;text-align:left;"><?php echo $sub['subject_name'];?></td>
    <td style="border: 1px solid black;font-size:12px;width:30px;text-align:center;">
        <?php echo $subject_score_map[$sub['subject_id']];?>
    </td>
</tr>
<?php endforeach; ?>
</table>

注意事项

  • 所有传入查询的参数建议做合法性校验,避免SQL注入风险,CI查询构造器自带参数绑定,不要手动拼接SQL字符串
  • 表名、字段名请替换为你业务中的实际值
  • 如果只需要查询单个科目的总分,可直接在控制器中计算后传给视图,不需要循环遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:04