当前位置:首页 > PHP

php 签到实现

2026-02-14 17:11:56PHP

实现 PHP 签到功能

数据库设计

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

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
);

检查是否已签到

查询数据库判断用户当天是否已签到:

function hasCheckedIn($userId) {
    $today = date('Y-m-d');
    $query = "SELECT COUNT(*) FROM user_check_in WHERE user_id = ? AND check_in_date = ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$userId, $today]);
    return $stmt->fetchColumn() > 0;
}

处理签到逻辑

实现签到功能并更新连续签到天数:

function checkIn($userId) {
    $today = date('Y-m-d');
    $yesterday = date('Y-m-d', strtotime('-1 day'));

    // 检查昨天是否签到
    $query = "SELECT consecutive_days FROM user_check_in WHERE user_id = ? AND check_in_date = ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$userId, $yesterday]);
    $lastConsecutiveDays = $stmt->fetchColumn();

    $consecutiveDays = $lastConsecutiveDays ? $lastConsecutiveDays + 1 : 1;

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

    return $consecutiveDays;
}

奖励机制

根据连续签到天数给予不同奖励:

function giveReward($userId, $consecutiveDays) {
    $rewards = [
        1 => 10,    // 第1天奖励10积分
        3 => 30,    // 连续3天奖励30积分
        7 => 100    // 连续7天奖励100积分
    ];

    if (isset($rewards[$consecutiveDays])) {
        $points = $rewards[$consecutiveDays];
        // 更新用户积分逻辑
        return $points;
    }
    return 0;
}

签到统计

获取用户签到统计信息:

php 签到实现

function getCheckInStats($userId) {
    $query = "SELECT 
        COUNT(*) as total_days,
        MAX(consecutive_days) as max_consecutive,
        (SELECT check_in_date FROM user_check_in 
         WHERE user_id = ? ORDER BY check_in_date DESC LIMIT 1) as last_date
        FROM user_check_in WHERE user_id = ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$userId, $userId]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

标签: php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…