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

CodeIgniter框架下学生出勤百分比查询与提交考勤自动入库实现问询

CodeIgniter考勤系统出席率功能实现方案

核心需求

  • 查询每名学生的出席考勤占比,展示出席次数百分比
  • 提交考勤时自动计算每名学生的出席百分比并存入数据库

代码修改说明

你需要在现有take_attendance方法中新增出席率计算逻辑,在每日考勤数据写入/更新完成后,逐个统计学生当前学期的所有考勤数据计算占比,再写入数据库即可,修改后完整代码如下:

public function take_attendance()
{
    $students = $this->input->post('student_id');
    $data['timestamp'] = strtotime($this->input->post('date'));
    $data['class_id'] = html_escape($this->input->post('class_id'));
    $data['section_id'] = html_escape($this->input->post('section_id'));
    $data['school_id'] = $this->school_id;
    $data['session_id'] = $this->active_session;
    $check_data = $this->db->get_where('daily_attendances', array('timestamp' => $data['timestamp'], 'class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'session_id' => $data['session_id'], 'school_id' => $data['school_id']));
    if($check_data->num_rows() > 0){
        foreach($students as $key => $student):
            $data['status'] = $this->input->post('status-'.$student);
            $data['student_id'] = $student;
            $attendance_id = $this->input->post('attendance_id');
            $this->db->where('id', $attendance_id[$key]);
            $this->db->update('daily_attendances', $data);
        endforeach;
    }else{
        foreach($students as $student):
            $data['status'] = $this->input->post('status-'.$student);
            $data['student_id'] = $student;
            $this->db->insert('daily_attendances', $data);
        endforeach;
    }

    // 新增:自动计算每名学生的出席百分比并存入数据库
    foreach ($students as $student_id) {
        // 统计当前学期该学生的总考勤次数
        $total_attendance = $this->db->get_where('daily_attendances', [
            'student_id' => $student_id,
            'session_id' => $this->active_session,
            'school_id' => $this->school_id
        ])->num_rows();
        
        // 统计当前学期该学生的出席次数(status为1代表出席,可根据你的实际字段值调整)
        $present_attendance = $this->db->get_where('daily_attendances', [
            'student_id' => $student_id,
            'session_id' => $this->active_session,
            'school_id' => $this->school_id,
            'status' => 1
        ])->num_rows();
        
        // 计算出席百分比,保留2位小数
        $attendance_percent = $total_attendance > 0 ? round(($present_attendance / $total_attendance) * 100, 2) : 0;
        
        // 将百分比存入数据库,此处假设你将百分比存在student表的attendance_percent字段,可根据你的实际表结构调整
        $this->db->where('id', $student_id);
        $this->db->update('student', ['attendance_percent' => $attendance_percent]);
    }

    $this->settings_model->last_updated_attendance_data();

    $response = array(
        'status' => true,
        'notification' => get_phrase('attendance_updated_successfully')
    );

    return json_encode($response);
}

查询学生出席率方法

你可以在同模型中新增如下方法,用于前端查询展示学生出席率:

public function get_student_attendance_percent($student_id)
{
    return $this->db->get_where('student', [
        'id' => $student_id,
        'school_id' => $this->school_id
    ])->row()->attendance_percent ?? 0;
}

注:如果你的出席百分比存储在其他表,可自行调整上述代码中的表名和字段名,status字段的出席标识也可根据你实际业务定义修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:27:03