php实现客户签到
实现客户签到功能
使用PHP实现客户签到功能需要结合数据库操作和前端交互。以下是一个基本的实现方案:

数据库设计
创建一张签到表存储签到记录:
CREATE TABLE user_check_in (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
check_in_date DATE NOT NULL,
check_in_time DATETIME NOT NULL,
points_earned INT DEFAULT 0,
UNIQUE KEY (user_id, check_in_date)
);
签到核心代码
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 获取用户ID
$userId = $_SESSION['user_id'] ?? 0;
// 检查今日是否已签到
$stmt = $db->prepare("SELECT * FROM user_check_in WHERE user_id = ? AND check_in_date = CURDATE()");
$stmt->execute([$userId]);
$hasCheckedIn = $stmt->fetch();
if (!$hasCheckedIn && $userId) {
// 执行签到
$points = 10; // 每次签到获得10积分
$stmt = $db->prepare("INSERT INTO user_check_in (user_id, check_in_date, check_in_time, points_earned)
VALUES (?, CURDATE(), NOW(), ?)");
$stmt->execute([$userId, $points]);
// 更新用户总积分
$stmt = $db->prepare("UPDATE users SET points = points + ? WHERE id = ?");
$stmt->execute([$points, $userId]);
echo json_encode(['success' => true, 'message' => '签到成功,获得'.$points.'积分']);
} else {
echo json_encode(['success' => false, 'message' => '今日已签到']);
}
?>
前端交互示例
function checkIn() {
fetch('check_in.php')
.then(response => response.json())
.then(data => {
alert(data.message);
if(data.success) {
// 更新UI显示
document.getElementById('checkInBtn').disabled = true;
}
});
}
连续签到奖励
可以扩展签到逻辑实现连续签到奖励:
// 检查昨日是否签到
$stmt = $db->prepare("SELECT check_in_date FROM user_check_in
WHERE user_id = ? AND check_in_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)");
$stmt->execute([$userId]);
$yesterdayChecked = $stmt->fetch();
// 计算连续签到天数
if ($yesterdayChecked) {
$stmt = $db->prepare("SELECT consecutive_days FROM users WHERE id = ?");
$stmt->execute([$userId]);
$consecutiveDays = $stmt->fetchColumn();
$consecutiveDays = $consecutiveDays ? $consecutiveDays + 1 : 2;
// 根据连续天数计算奖励
$points = min(10 * $consecutiveDays, 100); // 最多100积分
// 更新连续签到天数
$stmt = $db->prepare("UPDATE users SET consecutive_days = ? WHERE id = ?");
$stmt->execute([$consecutiveDays, $userId]);
} else {
// 重置连续签到
$stmt = $db->prepare("UPDATE users SET consecutive_days = 1 WHERE id = ?");
$stmt->execute([$userId]);
$points = 10;
}
安全注意事项
- 验证用户登录状态
- 防止SQL注入使用预处理语句
- 限制频繁请求
- 重要操作记录日志
以上代码提供了PHP实现客户签到功能的基本框架,可根据实际需求进行调整和扩展。







