php 写一个连续签到 连续签到多少天获得不同奖励
时间: 2024-09-07 22:04:35 浏览: 81
php实现每日签到功能
在PHP中实现一个连续签到功能,通常需要考虑如何记录用户的签到数据以及如何根据签到天数给予不同的奖励。下面是一个简单的示例,用于说明如何通过PHP和MySQL数据库来实现这个功能。
首先,需要建立一个数据库表来记录用户的签到信息,表结构可能包含用户ID、签到日期等字段。假设我们已经有一个名为`users`的表,现在创建一个新的表`sign_in_records`:
```sql
CREATE TABLE sign_in_records (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
sign_in_date DATE NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
接下来,编写PHP代码来实现连续签到功能:
```php
<?php
// 假设已经连接数据库,并且用户已经通过身份验证
// 获取当前用户的ID
$user_id = $_SESSION['user_id']; // 这里假设你已经有了用户ID保存在会话中
// 获取今天的日期
$today = date("Y-m-d");
// 插入或更新签到记录
function signIn($user_id, $today) {
global $conn; // 假设已经建立了数据库连接
$sql = "INSERT INTO sign_in_records (user_id, sign_in_date) VALUES (?, ?)
ON DUPLICATE KEY UPDATE sign_in_date = VALUES(sign_in_date)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("id", $user_id, $today);
$stmt->execute();
}
signIn($user_id, $today);
// 查询连续签到天数
function getConsecutiveSignInDays($user_id) {
global $conn;
$sql = "SELECT COUNT(*) FROM sign_in_records WHERE user_id = ? AND sign_in_date BETWEEN ? AND ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("idd", $user_id, $start_date, $end_date);
$start_date = date('Y-m-d', strtotime("-1 days"));
$end_date = $today;
$stmt->execute();
$result = $stmt->get_result();
return $result->num_rows;
}
$days = getConsecutiveSignInDays($user_id);
// 根据连续签到天数给予奖励
if ($days > 0) {
// 假设奖励规则为3天、7天、15天分别获得不同奖励
switch ($days) {
case $days >= 15:
// 给予15天连续签到奖励
break;
case $days >= 7:
// 给予7天连续签到奖励
break;
case $days >= 3:
// 给予3天连续签到奖励
break;
default:
// 不足3天,没有奖励
break;
}
}
?>
```
在上述代码中,首先通过`signIn`函数插入或更新用户的签到记录。接着,`getConsecutiveSignInDays`函数查询用户连续签到的天数。最后,根据连续签到的天数,使用switch-case语句给予用户不同的奖励。
阅读全文