当前位置:首页 > PHP

php实现医院挂号

2026-02-15 11:04:15PHP

PHP实现医院挂号系统

数据库设计

创建数据库表结构是挂号系统的核心部分。主要需要以下表:

  • 患者表(patients):存储患者基本信息
  • 医生表(doctors):存储医生信息
  • 科室表(departments):存储医院科室信息
  • 排班表(schedules):存储医生排班信息
  • 挂号表(registrations):存储挂号记录
CREATE TABLE patients (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    gender ENUM('男','女') NOT NULL,
    birth_date DATE,
    phone VARCHAR(20) NOT NULL,
    id_card VARCHAR(18) NOT NULL UNIQUE
);

CREATE TABLE doctors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    title VARCHAR(50),
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

CREATE TABLE departments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    description TEXT
);

CREATE TABLE schedules (
    id INT AUTO_INCREMENT PRIMARY KEY,
    doctor_id INT NOT NULL,
    date DATE NOT NULL,
    time_slot ENUM('上午','下午','晚上') NOT NULL,
    max_patients INT DEFAULT 30,
    FOREIGN KEY (doctor_id) REFERENCES doctors(id)
);

CREATE TABLE registrations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    patient_id INT NOT NULL,
    schedule_id INT NOT NULL,
    registration_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    status ENUM('待就诊','已就诊','已取消') DEFAULT '待就诊',
    FOREIGN KEY (patient_id) REFERENCES patients(id),
    FOREIGN KEY (schedule_id) REFERENCES schedules(id)
);

患者注册与登录

实现患者注册和登录功能,使用PHP和MySQLi:

// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'hospital');

// 患者注册
function registerPatient($name, $gender, $birth_date, $phone, $id_card, $password) {
    global $conn;
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);
    $stmt = $conn->prepare("INSERT INTO patients (name, gender, birth_date, phone, id_card, password) VALUES (?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("ssssss", $name, $gender, $birth_date, $phone, $id_card, $hashed_password);
    return $stmt->execute();
}

// 患者登录
function loginPatient($id_card, $password) {
    global $conn;
    $stmt = $conn->prepare("SELECT id, password FROM patients WHERE id_card = ?");
    $stmt->bind_param("s", $id_card);
    $stmt->execute();
    $result = $stmt->get_result();
    if($result->num_rows == 1) {
        $patient = $result->fetch_assoc();
        if(password_verify($password, $patient['password'])) {
            return $patient['id'];
        }
    }
    return false;
}

挂号功能实现

实现患者挂号功能,包括查询可挂号医生和提交挂号:

php实现医院挂号

// 查询可挂号医生排班
function getAvailableSchedules($department_id = null, $date = null) {
    global $conn;
    $query = "SELECT s.*, d.name AS doctor_name, dep.name AS department_name 
              FROM schedules s 
              JOIN doctors d ON s.doctor_id = d.id 
              JOIN departments dep ON d.department_id = dep.id
              WHERE s.date >= CURDATE()";

    if($department_id) {
        $query .= " AND d.department_id = $department_id";
    }
    if($date) {
        $query .= " AND s.date = '$date'";
    }

    $query .= " AND (SELECT COUNT(*) FROM registrations r WHERE r.schedule_id = s.id AND r.status != '已取消') < s.max_patients
               ORDER BY s.date, s.time_slot";

    $result = $conn->query($query);
    return $result->fetch_all(MYSQLI_ASSOC);
}

// 提交挂号
function registerAppointment($patient_id, $schedule_id) {
    global $conn;
    $stmt = $conn->prepare("INSERT INTO registrations (patient_id, schedule_id) VALUES (?, ?)");
    $stmt->bind_param("ii", $patient_id, $schedule_id);
    return $stmt->execute();
}

挂号记录查询

实现患者查询自己的挂号记录:

// 查询患者挂号记录
function getPatientRegistrations($patient_id) {
    global $conn;
    $stmt = $conn->prepare("SELECT r.*, d.name AS doctor_name, dep.name AS department_name, s.date, s.time_slot
                          FROM registrations r
                          JOIN schedules s ON r.schedule_id = s.id
                          JOIN doctors d ON s.doctor_id = d.id
                          JOIN departments dep ON d.department_id = dep.id
                          WHERE r.patient_id = ?
                          ORDER BY s.date DESC");
    $stmt->bind_param("i", $patient_id);
    $stmt->execute();
    $result = $stmt->get_result();
    return $result->fetch_all(MYSQLI_ASSOC);
}

取消挂号功能

实现患者取消挂号功能:

php实现医院挂号

// 取消挂号
function cancelRegistration($registration_id) {
    global $conn;
    $stmt = $conn->prepare("UPDATE registrations SET status = '已取消' WHERE id = ? AND status = '待就诊'");
    $stmt->bind_param("i", $registration_id);
    return $stmt->execute();
}

安全措施

为确保系统安全,需要实施以下措施:

  • 使用预处理语句防止SQL注入
  • 密码使用password_hash()加密存储
  • 敏感操作需要验证患者身份
  • 重要数据传输使用HTTPS
  • 实现CSRF防护

前端界面建议

虽然PHP主要负责后端逻辑,但前端界面设计也很重要:

  • 患者注册/登录页面
  • 科室和医生选择页面
  • 挂号时间选择页面
  • 个人中心(查看/取消挂号)
  • 响应式设计适配移动设备

系统扩展功能

基础功能实现后,可考虑扩展以下功能:

  • 在线支付挂号费
  • 电子病历系统集成
  • 检查报告查询
  • 医生工作站
  • 智能分诊系统
  • 微信/支付宝小程序接入

实现医院挂号系统需要综合考虑数据库设计、业务逻辑、用户界面和安全性等多个方面。以上代码提供了核心功能的实现框架,实际开发中还需要根据具体需求进行调整和完善。

标签: 医院php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…