php如何实现请假
请假系统的基本功能
实现一个请假系统通常需要包含用户登录、请假申请、审批流程、记录查询等功能。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处理用户登录验证:

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");
}
审批流程处理
管理人员处理待审批请求:

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保护
- 对敏感操作进行权限验证
通过以上模块的组合,可以构建一个完整的请假管理系统。根据实际需求,可以扩展邮件通知、多级审批、请假类型分类等功能。






