php实现打卡源码
PHP 打卡系统实现
以下是一个简单的 PHP 打卡系统实现方案,包含基本的打卡功能和数据库记录。
数据库设计
创建一个名为 clock_in 的表:
CREATE TABLE `clock_in` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`clock_in_time` datetime NOT NULL,
`clock_out_time` datetime DEFAULT NULL,
`status` tinyint(1) DEFAULT 1 COMMENT '1:正常 0:异常',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
打卡功能实现
// 打卡入口
if (isset($_POST['action'])) {
$userId = $_SESSION['user_id']; // 假设用户已登录
$currentTime = date('Y-m-d H:i:s');
if ($_POST['action'] == 'clock_in') {
// 上班打卡
$stmt = $db->prepare("INSERT INTO clock_in (user_id, clock_in_time) VALUES (?, ?)");
$stmt->execute([$userId, $currentTime]);
echo "上班打卡成功";
} elseif ($_POST['action'] == 'clock_out') {
// 下班打卡
$stmt = $db->prepare("UPDATE clock_in SET clock_out_time = ? WHERE user_id = ? AND DATE(clock_in_time) = CURDATE()");
$stmt->execute([$currentTime, $userId]);
echo "下班打卡成功";
}
}
打卡记录查询
// 查询当前用户打卡记录
$userId = $_SESSION['user_id'];
$stmt = $db->prepare("SELECT * FROM clock_in WHERE user_id = ? ORDER BY clock_in_time DESC");
$stmt->execute([$userId]);
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);
前端界面示例
<form method="post">
<input type="hidden" name="action" value="clock_in">
<button type="submit">上班打卡</button>
</form>
<form method="post">
<input type="hidden" name="action" value="clock_out">
<button type="submit">下班打卡</button>
</form>
<table>
<tr>
<th>日期</th>
<th>上班时间</th>
<th>下班时间</th>
<th>状态</th>
</tr>
<?php foreach ($records as $record): ?>
<tr>
<td><?= date('Y-m-d', strtotime($record['clock_in_time'])) ?></td>
<td><?= $record['clock_in_time'] ?></td>
<td><?= $record['clock_out_time'] ?? '未打卡' ?></td>
<td><?= $record['status'] ? '正常' : '异常' ?></td>
</tr>
<?php endforeach; ?>
</table>
功能扩展建议
- 添加地理位置验证,防止远程打卡
- 实现打卡提醒和异常通知
- 增加月度统计和报表功能
- 添加管理员审核功能
- 实现多设备登录限制
这个基础实现可以根据具体需求进行扩展和优化,例如添加更多的验证逻辑、美化界面或增加额外的功能模块。







