全磁卡紀錄

對應程式: logs.php

11-全磁卡紀錄

業務功能

檢視所有學生的打卡(刷卡)紀錄,可依班級(kind)及上課日期篩選,用於確認學生出席狀況。

頁面操作

  1. 篩選班級:頁面上方列出所有 kind 連結,點擊可篩選特定班級的紀錄;點「全」可查看全部。
  2. 篩選日期:選擇班級後,會顯示該班的上課日期列表(來自 class_dates 設定),點擊日期進一步篩選。
  3. 瀏覽紀錄:表格顯示地點、卡號、學號、學生姓名、打卡時間,最多顯示前 700 筆。

處理邏輯

  • 透過 GET 參數 kinddate 進行篩選,呼叫 get_all_logs() 取得資料。
  • 若 kind > 0,SQL 條件加入 kind_idlog_datetime LIKE '{date}%'
  • room_name 優先從 log 紀錄本身取得,若無則從 rooms 對照表取得。
  • username 若 log 中無值,會以 card_id 反查 cards 表取得學生姓名。
  • 渲染過程中若發生資料異常(例如 Object 無法轉字串),會捕捉 Exception 收集到異常資料區。
  • 頁面底部顯示「異常的資料」區塊,列出無法正常顯示的紀錄。

備註

  • 頁面設定了自訂 error handler,將 E_RECOVERABLE_ERROR 轉為 Exception 拋出,避免 PHP Catchable fatal error 導致頁面中斷。
  • 預設上限 700 筆,無分頁功能,大量資料時需搭配日期篩選使用。
  • 此頁面為唯讀檢視,不能刪除紀錄。若需刪除測試紀錄,請使用 12-刪測試的磁卡紀錄 頁面。

使用的 Functions

Function定義於
get_all_rooms($is__key__room_id)enter_logs/inc.php
get_all_kinds($is__key__kind_id)enter_logs/inc.php
get_all_logs($where, $limit)enter_logs/inc.php
get_card_by_card_id($card_id)enter_logs/inc.php(log 無 username 時補查)
get_class_dates_by_class_prefix($kind_id)enter_logs/inc.php