极简 PHP + SQLite 体重记录,支持桌面端与移动端、7/14/30天趋势图、晨晚体重差统计。
- 按天记录早晨 / 晚上体重(斤),同日自动合并
- 仪表盘:早晨变化、晚上变化、最新晨晚差、总记录天数
- 交互趋势图(Chart.js):7/14/30天/全部,断点自动补齐
- 明细表:按日期倒序、周日高亮、编辑/删除
- 响应式:
index.php(桌面)与mobile.php(移动)自动分流,也可直接访问 - 轻量无依赖:无需 Composer、不用 npm,前端 CDN + 本地 fallback
.
├── config.php # 常量、错误处理、设备识别
├── process.php # AJAX 统一入口(add/update/delete)
├── index.php # 桌面端
├── mobile.php # 移动端
├── includes/
│ ├── DB.php # PDO SQLite 单例
│ ├── WeightRepository.php # 数据访问
│ ├── WeightService.php # 业务与统计
│ ├── header.php # 公共头(含 Chart.js)
│ └── footer.php
├── js/
│ ├── chart.js # Chart.js 4.5.1 本地备选
│ └── common.js
├── css/style.css
├── database/ # 运行时生成 weight_tracker.db(已忽略)
└── cache/ # 可选文件缓存(已忽略)
- 要求:PHP 7.4+、启用
pdo_sqlite - 部署:整目录上传至支持 PHP 的主机(Apache/Nginx + PHP-FPM 均可)
- 权限:确保
database/、cache/可写(chmod 755;若自动创建失败请手动mkdir) - 访问:
https://your-domain/index.php
Docker / 宝塔 / 1Panel 均可直接丢入站点目录即用。
首次访问自动创建:
CREATE TABLE IF NOT EXISTS weight_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
record_date DATE NOT NULL UNIQUE,
morning_weight DECIMAL(5,2) DEFAULT 0,
evening_weight DECIMAL(5,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);备份只需拷贝 database/weight_tracker.db。
config.php:
DB_FILE数据库路径APP_NAME/APP_VERSIONCACHE_DIR/CACHE_DEFAULT_TTL
Chart.js 优先走 https://cdn.jsdelivr.net/npm/chart.js@4.4.1,失败自动回退 js/chart.js。
process.php 统一 POST action=:
add_record:record_date(或morning_date/evening_date兼容)、morning_weight、evening_weight(至少一项 >0)update_record:id、record_date、morning_weight、evening_weightdelete_record:id
返回:{ success: bool, message: string, records?: [], stats?: {} }
- 输入校验:
Security::validateDate/validateWeight(0–500) - XSS:输出
htmlspecialchars,含Security辅助 - 错误:生产环境不回显,统一写入
error.log(已忽略)
- 图表空白:确认至少一条
>0的记录;F12 看[WeightChart]日志 - 写库失败:检查
database/权限与pdo_sqlite扩展 - 缓存:
Cache.class.php为可选文件缓存,未强制启用
MIT