用原生PHP+MySQL搭建统一资源模型的预约系统,通过resources表(含type字段)抽象会议室/场地/服务,用SQL双重时段校验防冲突,三步完成选资源、选时段、填信息流程,并提供后台看板与CSV导出功能。

用PHP搭建一个支持会议室、场地和服务的在线预约系统,核心在于统一资源模型设计、灵活的时间冲突校验,以及清晰的用户操作流程。不需要复杂框架,原生PHP + MySQL即可稳定支撑中小规模使用场景。
统一资源管理:用一张表抽象会议室/场地/服务
避免为每类资源建独立数据表,推荐使用“资源类型+通用字段”设计:
- resources 表包含:id、name、type('meeting_room'/'venue'/'service')、capacity、description、status(1=启用)
- type 字段区分资源类别,前端按 type 渲染不同图标或标签,后端逻辑复用同一套预约逻辑
- 如需扩展属性(如会议室有投影仪、场地需押金),可用 JSON 字段 extra_info 存储,保持主表简洁
时间冲突检测:按资源+时段双重校验
预约是否可提交,关键在检查目标资源在指定时间段内是否已被占用:
- 数据库查询示例(PDO):
SELECT COUNT(*) FROM bookings WHERE resource_id = ? AND status = 'confirmed' AND (start_time ?)
其中 ? 分别代入资源ID、用户选择的结束时间、开始时间 - 注意边界处理:start_time 用户start_time,才能覆盖所有重叠情况(含完全包含、左交、右交、完全相等)
- 建议在添加预约前执行该查询,返回0才允许插入;不要依赖前端限制,必须服务端校验
预约流程精简:三步完成核心操作
用户无需注册也能试用,但需留联系方式;登录用户自动关联历史记录:
立即学习“PHP免费学习笔记(深入)”;
- 选资源:列表页按 type 筛选,支持关键词搜索和容量过滤(如“容纳20人以上”)
- 选时段:日历组件显示已占时段(灰色不可点),点击空闲单元格高亮并锁定起止时间(支持拖拽选时长)
- 填信息 & 提交:必填姓名、电话、事由;服务类预约可加备注(如“需茶歇”);提交后生成唯一预约号,自动发邮件/SMS通知(可用 PHPMailer 或简单 mail())
后台管理:实时看板与导出支持
管理员需要快速掌握资源使用状态:
- 首页仪表盘展示:今日预约数、热门资源TOP5、待审核预约(如需人工确认的服务)
- 资源详情页嵌入周视图日历,直接点击某时段查看对应预约人、联系方式、备注
- 导出功能用 CSV 即可满足多数需求:用 fputcsv 写入资源名、日期、时段、申请人、状态,不需 Excel 扩展



















