当前位置:首页 > 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;
}

签到统计

获取用户签到统计信息:

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实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE o…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…