当前位置:首页 > PHP

php实现在线预约系统

2026-02-28 03:34:37PHP

数据库设计

创建数据库表存储预约信息,通常包括用户ID、预约时间、服务类型、状态等字段。使用MySQL为例:

CREATE TABLE appointments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    service_type VARCHAR(50) NOT NULL,
    appointment_time DATETIME NOT NULL,
    status ENUM('pending', 'confirmed', 'cancelled') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

预约表单实现

构建HTML表单收集用户预约信息,包含服务类型选择和时间选择器:

<form action="book_appointment.php" method="post">
    <select name="service_type" required>
        <option value="consultation">咨询</option>
        <option value="checkup">检查</option>
    </select>
    <input type="datetime-local" name="appointment_time" required>
    <button type="submit">提交预约</button>
</form>

处理预约逻辑

创建PHP脚本处理表单提交,验证时间冲突并存入数据库:

<?php
$conn = new mysqli('localhost', 'username', 'password', 'database');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userId = $_SESSION['user_id'];
    $serviceType = $conn->real_escape_string($_POST['service_type']);
    $appointmentTime = $conn->real_escape_string($_POST['appointment_time']);

    // 检查时间是否可用
    $check = $conn->query("SELECT id FROM appointments 
                          WHERE appointment_time = '$appointmentTime'");
    if ($check->num_rows === 0) {
        $conn->query("INSERT INTO appointments 
                     (user_id, service_type, appointment_time) 
                     VALUES ($userId, '$serviceType', '$appointmentTime')");
        echo "预约成功";
    } else {
        echo "该时间段已被预约";
    }
}
?>

预约管理界面

创建管理员界面显示所有预约,支持状态修改:

$appointments = $conn->query("SELECT * FROM appointments ORDER BY appointment_time");
while ($row = $appointments->fetch_assoc()) {
    echo "ID: {$row['id']} 时间: {$row['appointment_time']} 
          状态: {$row['status']} 
          <a href='update_status.php?id={$row['id']}&status=confirmed'>确认</a>
          <a href='update_status.php?id={$row['id']}&status=cancelled'>取消</a><br>";
}

邮件通知功能

集成PHPMailer发送预约确认邮件:

require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->setFrom('noreply@example.com');
$mail->addAddress($userEmail);
$mail->Subject = '预约确认';
$mail->Body = "您的预约已确认,时间:$appointmentTime";
$mail->send();

时间冲突检测

添加JavaScript前端验证防止选择过去时间:

document.querySelector('input[name="appointment_time"]').min = 
    new Date().toISOString().slice(0, 16);

安全性增强

对输入数据进行过滤和预处理,防止SQL注入:

$stmt = $conn->prepare("INSERT INTO appointments 
                       (user_id, service_type, appointment_time) 
                       VALUES (?, ?, ?)");
$stmt->bind_param("iss", $userId, $serviceType, $appointmentTime);
$stmt->execute();

php实现在线预约系统

标签: 在线系统
分享给朋友:

相关文章

vue系统首页实现

vue系统首页实现

Vue 系统首页实现方法 创建基础项目结构 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖如 vue-router、axios、element-ui 等。项目目录应包含 componen…

vue实现考试系统

vue实现考试系统

Vue实现考试系统的基本架构 使用Vue.js构建考试系统需要结合前端框架和后端API。Vue负责用户界面和交互逻辑,后端处理数据存储和业务规则。 核心功能模块设计 用户认证模块 实现登录/注…

vue实现文档在线预览

vue实现文档在线预览

vue实现文档在线预览的方法 使用第三方库实现 vue-doc-preview是一个专门用于文档预览的Vue组件,支持PDF、Word、Excel等多种格式。安装后可直接在组件中使用。 npm in…

vue实现文件在线加载

vue实现文件在线加载

实现文件在线加载的基本方法 在Vue中实现文件在线加载,通常需要结合前端文件处理和后端服务支持。以下是几种常见的方法: 使用input标签和FileReader API 在Vue组件中添加input…

vue实现在线画图

vue实现在线画图

Vue 实现在线画图的方法 使用 HTML5 Canvas 和 Vue 结合 HTML5 的 Canvas 元素非常适合用于在线画图。在 Vue 中可以通过指令或组件的方式集成 Canvas 功能。…

vue实现点餐系统

vue实现点餐系统

实现点餐系统的基本思路 使用Vue.js实现点餐系统需要结合前端框架特性,合理设计组件结构和数据流。以下为关键实现步骤: 核心组件结构设计 MenuList组件:展示菜品列表,包含图片、名称、价格…