PHP签到实现
PHP签到功能实现
使用PHP实现签到功能需要结合数据库记录用户签到状态。以下是一个基本的实现方案:

数据库设计
创建用户表和数据表存储签到记录:

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
CREATE TABLE check_in (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
check_date DATE NOT NULL,
UNIQUE KEY (user_id, check_date)
);
签到逻辑处理
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 获取当前用户ID(实际应从session获取)
$userId = 1;
// 检查今天是否已签到
$today = date('Y-m-d');
$stmt = $db->prepare("SELECT id FROM check_in WHERE user_id = ? AND check_date = ?");
$stmt->execute([$userId, $today]);
if ($stmt->rowCount() > 0) {
echo "今天已经签到过了";
} else {
// 执行签到
$insert = $db->prepare("INSERT INTO check_in (user_id, check_date) VALUES (?, ?)");
if ($insert->execute([$userId, $today])) {
echo "签到成功";
} else {
echo "签到失败";
}
}
?>
连续签到功能
增加连续签到天数的计算:
// 检查昨天是否签到
$yesterday = date('Y-m-d', strtotime('-1 day'));
$stmt = $db->prepare("SELECT id FROM check_in WHERE user_id = ? AND check_date = ?");
$stmt->execute([$userId, $yesterday]);
$consecutiveDays = 1;
if ($stmt->rowCount() > 0) {
// 如果昨天签到过,获取连续天数并+1
$getDays = $db->prepare("SELECT consecutive_days FROM user_stats WHERE user_id = ?");
$getDays->execute([$userId]);
$consecutiveDays = $getDays->fetchColumn() + 1;
}
// 更新连续签到天数
$update = $db->prepare("UPDATE user_stats SET consecutive_days = ? WHERE user_id = ?");
$update->execute([$consecutiveDays, $userId]);
前端展示
简单的HTML签到按钮:
<form method="post" action="checkin.php">
<button type="submit">每日签到</button>
</form>
安全注意事项
- 使用预处理语句防止SQL注入
- 验证用户身份(Session)
- 限制重复请求(防止刷新重复签到)
- 考虑时区问题(date函数使用)
这个实现包含了基本的签到功能,可以根据需求扩展积分系统、签到奖励等功能。






