
项目背景
日常工作场景下需要多次打卡,忙起来经常记不清到底打过了没有。等手头事情忙完再回想,总有一种说不准的忐忑——刚才到底打卡了没?一旦记错漏打卡,就得面对相应的处理。这种反复确认的心理负担,是这套打卡记录系统的直接动因。它要解决的就是那个看似简单、却反复折磨人的问题:"我今天打卡了吗?"
项目概述
这是一套基于 PHP + MySQL 搭建的多用户打卡记录系统。架构上走轻量化路线,没有引入任何框架,直接原生开发,后期修改和维护都比较省事。前端页面做了 H5 响应式适配,部署好后用手机浏览器就能正常访问操作。作者也试过用封装工具打包成 APK,以及转成微信小程序在跑,实际使用体验都过得去。
核心功能
| 功能模块 | 功能说明 |
|---|---|
| 用户认证 | 注册、登录、修改密码、重置密码,覆盖日常账号管理的基本操作 |
| 打卡功能 | 每天一键打卡,系统记录每次打卡的具体时间,不需要自己记 |
| 记录查询 | 支持按日期筛选,查看任意时间段的历史打卡记录 |
| 用户管理 | 上传头像、查看和编辑个人基本信息 |
| 数据统计 | 展示打卡汇总数据,个人或管理者都能快速了解出勤概况 |
技术实现
轻量原生:全部用原生 PHP 书写,没有框架依赖。代码层次清楚,想改某个功能直接定位到对应文件就行,不需要理解框架的复杂生命周期。
移动端优先:页面交互针对手机触摸操作做了专门处理。按钮区域留得比较大,布局不拥挤,手机浏览器打开就能用,不需要额外适配。
安全处理:数据库操作使用 prepare + bind_param 预处理,从参数层面防止 SQL 注入。用户密码存的是哈希值,不是明文。登录状态通过 Session 管理,没有额外引入复杂的 token 机制。
前后端分离:API 接口和前端页面分开维护。后续如果想对接 App、小程序,或者换成其他前端方案,后端接口可以直接复用,不用重构。
目录结构
├── api/ # API 接口目录 │ ├── checkin.php # 执行打卡 │ ├── login.php # 登录验证 │ ├── register.php # 新用户注册 │ ├── records.php # 查询打卡记录 │ └── stats.php # 统计数据 ├── config/ # 配置目录 │ ├── database.php # 数据库连接参数 │ └── auth.php # 认证相关配置 ├── sql/ # 数据库脚本 │ └── init.sql # 表结构初始化 ├── avatars/ # 用户头像存放目录 ├── index.php # 首页(主打卡界面) ├── records.php # 打卡记录页面 ├── profile.php # 个人中心 └── install.php # 安装引导页面
数据库设计
整个系统只用两张核心表:
users 表:存储用户账号信息,包含用户名、哈希密码、邮箱、手机号、头像路径。
checkin_records 表:存储每次打卡的数据,关联用户 ID、打卡时间戳,以及可选的打卡照片路径。
部署流程
将项目文件上传到 PHP 运行环境,访问 install.php,按照页面提示完成数据库初始化
注册一个新账号,登录后进入首页
首页点击"立即打卡",单次打卡操作耗时不到一秒
底部导航栏可以随时切换到记录页或个人中心,所有数据都在页面上直接展示
这个系统解决的核心问题其实不是"打卡"这个动作本身,而是把"我到底有没有漏打卡"这种反复确认的心理负担给去掉。每天点一下,剩下的交给系统记。

