php如何实现值班表
实现值班表的方法
数据库设计
创建一个数据库表来存储值班信息,表结构可以包含以下字段:id(主键)、user_id(员工ID)、date(值班日期)、shift(班次,如早班、晚班等)。示例SQL如下:
CREATE TABLE duty_schedule (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
date DATE NOT NULL,
shift VARCHAR(50) NOT NULL
);
添加值班记录
通过PHP表单提交值班信息,并将数据插入数据库。示例代码如下:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$user_id = $_POST['user_id'];
$date = $_POST['date'];
$shift = $_POST['shift'];
$sql = "INSERT INTO duty_schedule (user_id, date, shift) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$user_id, $date, $shift]);
}
?>
显示值班表
从数据库中查询值班信息并以表格形式展示。示例代码如下:
<?php
$sql = "SELECT u.name, d.date, d.shift FROM duty_schedule d JOIN users u ON d.user_id = u.id ORDER BY d.date";
$result = $pdo->query($sql);
echo "<table border='1'>";
echo "<tr><th>姓名</th><th>日期</th><th>班次</th></tr>";
foreach ($result as $row) {
echo "<tr><td>{$row['name']}</td><td>{$row['date']}</td><td>{$row['shift']}</td></tr>";
}
echo "</table>";
?>
编辑和删除功能
提供编辑和删除值班记录的选项。编辑功能可以通过表单预填充原有数据,删除功能直接移除记录。示例代码如下:
// 编辑
$sql = "UPDATE duty_schedule SET user_id = ?, date = ?, shift = ? WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$new_user_id, $new_date, $new_shift, $id]);
// 删除
$sql = "DELETE FROM duty_schedule WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id]);
排班算法
如果需要自动排班,可以设计简单的轮换算法。例如,按员工ID顺序轮流分配班次:
$users = $pdo->query("SELECT id FROM users")->fetchAll(PDO::FETCH_COLUMN);
$shifts = ['早班', '晚班'];
$start_date = new DateTime('2023-01-01');
$days = 30;
for ($i = 0; $i < $days; $i++) {
$date = $start_date->format('Y-m-d');
$shift = $shifts[$i % count($shifts)];
$user_id = $users[$i % count($users)];
$sql = "INSERT INTO duty_schedule (user_id, date, shift) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$user_id, $date, $shift]);
$start_date->add(new DateInterval('P1D'));
}
前端交互
使用HTML和CSS美化值班表界面,添加JavaScript实现动态操作。示例HTML表单:
<form method="post">
<select name="user_id">
<?php foreach ($users as $user): ?>
<option value="<?= $user['id'] ?>"><?= $user['name'] ?></option>
<?php endforeach; ?>
</select>
<input type="date" name="date">
<select name="shift">
<option value="早班">早班</option>
<option value="晚班">晚班</option>
</select>
<button type="submit">提交</button>
</form>
通过以上方法,可以实现一个功能完整的PHP值班表系统。







