当前位置:首页 > PHP

php如何实现请假

2026-02-16 13:51:31PHP

请假系统的基本功能

实现一个请假系统通常需要包含用户登录、请假申请、审批流程、记录查询等功能。PHP作为后端语言,结合MySQL数据库可以高效完成这一需求。

数据库设计

创建必要的数据库表是基础。用户表存储员工信息,请假表记录申请详情:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('employee', 'manager') NOT NULL
);

CREATE TABLE leave_requests (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    reason TEXT NOT NULL,
    status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending',
    FOREIGN KEY (user_id) REFERENCES users(id)
);

用户认证实现

使用PHP处理用户登录验证:

php如何实现请假

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        header("Location: dashboard.php");
    }
}

请假申请提交

创建表单处理请假申请提交:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userId = $_SESSION['user_id'];
    $startDate = $_POST['start_date'];
    $endDate = $_POST['end_date'];
    $reason = $_POST['reason'];

    $stmt = $pdo->prepare("INSERT INTO leave_requests (user_id, start_date, end_date, reason) VALUES (?, ?, ?, ?)");
    $stmt->execute([$userId, $startDate, $endDate, $reason]);

    header("Location: leave_status.php");
}

审批流程处理

管理人员处理待审批请求:

php如何实现请假

if ($_SESSION['role'] === 'manager' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $requestId = $_POST['request_id'];
    $status = $_POST['status'];

    $stmt = $pdo->prepare("UPDATE leave_requests SET status = ? WHERE id = ?");
    $stmt->execute([$status, $requestId]);
}

记录查询展示

员工和管理人员查看请假记录:

$userId = $_SESSION['user_id'];
$role = $_SESSION['role'];

if ($role === 'employee') {
    $stmt = $pdo->prepare("SELECT * FROM leave_requests WHERE user_id = ?");
    $stmt->execute([$userId]);
} else {
    $stmt = $pdo->prepare("SELECT l.*, u.username FROM leave_requests l JOIN users u ON l.user_id = u.id");
    $stmt->execute();
}
$requests = $stmt->fetchAll();

前端界面示例

创建简单的HTML表单供用户提交请假:

<form method="post" action="apply_leave.php">
    <label>开始日期: <input type="date" name="start_date" required></label>
    <label>结束日期: <input type="date" name="end_date" required></label>
    <label>请假原因: <textarea name="reason" required></textarea></label>
    <button type="submit">提交申请</button>
</form>

安全注意事项

实施以下安全措施保障系统安全:

  • 使用预处理语句防止SQL注入
  • 对用户密码进行哈希处理
  • 实施CSRF保护
  • 对敏感操作进行权限验证

通过以上模块的组合,可以构建一个完整的请假管理系统。根据实际需求,可以扩展邮件通知、多级审批、请假类型分类等功能。

标签: 如何实现php
分享给朋友:

相关文章

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法…

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序的步骤 在 Vue 中实现冒泡排序,可以通过数据绑定和计算属性来动态展示排序过程。以下是一个完整的实现示例。 示例代码 <template> <div&g…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.definePr…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERV…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…