当前位置:首页 > PHP

php签到逻辑实现

2026-03-13 13:24:21PHP

PHP签到逻辑实现

数据库设计

创建用户签到表,包含字段如用户ID、签到日期、连续签到天数等。示例SQL:

php签到逻辑实现

CREATE TABLE user_check_in (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    check_in_date DATE NOT NULL,
    consecutive_days INT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

基础签到功能

检查用户今日是否已签到,未签到则插入记录:

php签到逻辑实现

function checkIn($userId) {
    $today = date('Y-m-d');
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

    // 检查今日是否已签到
    $stmt = $pdo->prepare("SELECT id FROM user_check_in WHERE user_id = ? AND check_in_date = ?");
    $stmt->execute([$userId, $today]);

    if ($stmt->fetch()) {
        return ['status' => false, 'message' => '今日已签到'];
    }

    // 插入签到记录
    $stmt = $pdo->prepare("INSERT INTO user_check_in (user_id, check_in_date) VALUES (?, ?)");
    $stmt->execute([$userId, $today]);

    return ['status' => true, 'message' => '签到成功'];
}

连续签到计算

通过查询昨日签到记录判断是否连续签到:

function getConsecutiveDays($userId) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $today = date('Y-m-d');
    $yesterday = date('Y-m-d', strtotime('-1 day'));

    // 获取昨日签到记录
    $stmt = $pdo->prepare("SELECT consecutive_days FROM user_check_in WHERE user_id = ? AND check_in_date = ?");
    $stmt->execute([$userId, $yesterday]);
    $lastRecord = $stmt->fetch();

    $consecutiveDays = 1;
    if ($lastRecord) {
        $consecutiveDays = $lastRecord['consecutive_days'] + 1;
    }

    // 更新今日连续天数
    $stmt = $pdo->prepare("UPDATE user_check_in SET consecutive_days = ? WHERE user_id = ? AND check_in_date = ?");
    $stmt->execute([$consecutiveDays, $userId, $today]);

    return $consecutiveDays;
}

签到奖励系统

根据连续签到天数发放不同奖励:

function giveCheckInReward($userId, $consecutiveDays) {
    $rewards = [
        1 => ['points' => 10],
        3 => ['points' => 30],
        7 => ['points' => 100]
    ];

    if (isset($rewards[$consecutiveDays])) {
        $reward = $rewards[$consecutiveDays];
        // 发放奖励逻辑
        return ['status' => true, 'reward' => $reward];
    }

    return ['status' => false];
}

完整调用示例

$userId = 123;
$checkInResult = checkIn($userId);

if ($checkInResult['status']) {
    $consecutiveDays = getConsecutiveDays($userId);
    $rewardResult = giveCheckInReward($userId, $consecutiveDays);

    if ($rewardResult['status']) {
        echo "签到成功!连续签到{$consecutiveDays}天,获得{$rewardResult['reward']['points']}积分";
    } else {
        echo "签到成功!连续签到{$consecutiveDays}天";
    }
} else {
    echo $checkInResult['message'];
}

注意事项

  • 使用事务处理确保数据一致性
  • 考虑时区问题,使用服务器统一时区处理日期
  • 高频访问时考虑添加缓存层
  • 定期清理历史签到数据

标签: 逻辑php
分享给朋友:

相关文章

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…