PHP签到实现
PHP签到功能实现方法
数据库设计
创建签到记录表,包含用户ID、签到日期等字段
CREATE TABLE `sign_in` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`sign_date` date NOT NULL,
`sign_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `user_date` (`user_id`,`sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
签到逻辑处理
检查用户今日是否已签到,未签到则插入记录

function doSignIn($userId) {
$today = date('Y-m-d');
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 检查今日是否已签到
$stmt = $pdo->prepare("SELECT id FROM sign_in WHERE user_id = ? AND sign_date = ?");
$stmt->execute([$userId, $today]);
if($stmt->fetch()) {
return ['status' => 0, 'msg' => '今日已签到'];
}
// 执行签到
$stmt = $pdo->prepare("INSERT INTO sign_in (user_id, sign_date) VALUES (?, ?)");
$stmt->execute([$userId, $today]);
return ['status' => 1, 'msg' => '签到成功'];
}
连续签到统计
计算用户连续签到天数

function getContinuousDays($userId) {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->prepare("
SELECT sign_date FROM sign_in
WHERE user_id = ?
ORDER BY sign_date DESC
");
$stmt->execute([$userId]);
$continuousDays = 0;
$currentDate = date('Y-m-d');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if($row['sign_date'] == $currentDate) {
$continuousDays++;
$currentDate = date('Y-m-d', strtotime($currentDate . ' -1 day'));
} else {
break;
}
}
return $continuousDays;
}
签到奖励机制
根据连续签到天数给予不同奖励
function giveSignInReward($userId, $continuousDays) {
$rewards = [
1 => ['points' => 10],
3 => ['points' => 30],
7 => ['points' => 100],
30 => ['points' => 500]
];
if(isset($rewards[$continuousDays])) {
$reward = $rewards[$continuousDays];
// 发放积分奖励逻辑
return $reward;
}
return null;
}
前端交互示例
简单的AJAX签到请求处理
$('#signInBtn').click(function() {
$.post('/sign_in.php', {action: 'sign_in'}, function(res) {
if(res.status == 1) {
alert('签到成功!连续签到' + res.continuous_days + '天');
} else {
alert(res.msg);
}
}, 'json');
});
安全注意事项
- 用户身份验证必须严格,防止伪造签到
- 数据库操作使用预处理语句防止SQL注入
- 重要操作记录日志
- 高频请求需要做限流处理
扩展功能建议
- 添加补签功能
- 实现签到排行榜
- 设计每月签到日历视图
- 增加签到成就系统
- 多平台签到同步
以上实现方案可根据实际项目需求进行调整,核心在于数据库设计和签到状态的准确判断。






