php实现签到
PHP 实现签到功能
签到功能通常涉及用户每日签到记录、连续签到统计和奖励发放。以下是一个基于PHP和MySQL的实现方案:
数据库设计
创建签到记录表sign_in:

CREATE TABLE `sign_in` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`sign_date` date NOT NULL,
`continuous_days` int(11) DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `user_date` (`user_id`,`sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
签到核心逻辑
function signIn($userId) {
$today = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 day'));
// 检查今天是否已签到
$existing = query("SELECT * FROM sign_in WHERE user_id = ? AND sign_date = ?", [$userId, $today]);
if ($existing) {
return ['status' => false, 'message' => '今日已签到'];
}
// 检查昨天是否签到
$yesterdayRecord = query("SELECT * FROM sign_in WHERE user_id = ? AND sign_date = ?", [$userId, $yesterday]);
$continuousDays = $yesterdayRecord ? $yesterdayRecord['continuous_days'] + 1 : 1;
// 插入签到记录
$result = execute("INSERT INTO sign_in (user_id, sign_date, continuous_days) VALUES (?, ?, ?)",
[$userId, $today, $continuousDays]);
if ($result) {
return [
'status' => true,
'continuous_days' => $continuousDays,
'reward' => calculateReward($continuousDays)
];
}
return ['status' => false, 'message' => '签到失败'];
}
奖励计算函数
function calculateReward($days) {
$base = 10; // 基础奖励
$bonus = floor($days / 7) * 50; // 每7天额外奖励
return $base + $bonus;
}
查询签到情况
function getSignInStatus($userId) {
$today = date('Y-m-d');
$records = query("SELECT * FROM sign_in WHERE user_id = ? ORDER BY sign_date DESC LIMIT 7", [$userId]);
$signedToday = false;
$continuousDays = 0;
foreach ($records as $record) {
if ($record['sign_date'] == $today) {
$signedToday = true;
$continuousDays = $record['continuous_days'];
}
}
return [
'signed_today' => $signedToday,
'continuous_days' => $continuousDays,
'recent_records' => $records
];
}
前端交互示例
// AJAX调用签到接口
$('#signBtn').click(function() {
$.post('/api/signin', {user_id: 123}, function(res) {
if (res.status) {
alert(`签到成功!连续签到${res.continuous_days}天,获得${res.reward}积分`);
} else {
alert(res.message);
}
});
});
实现要点
- 使用唯一索引防止重复签到
- 连续签到天数基于前一天记录计算
- 奖励机制可根据业务需求调整
- 建议添加事务处理确保数据一致性
- 可扩展添加补签功能
安全考虑
- 验证用户身份防止伪造请求
- 重要操作记录日志
- 接口添加防刷限制
- 敏感数据返回前进行过滤
以上方案可根据实际需求进行调整,例如添加月签到统计、签到排行榜等功能。






