当前位置:首页 > PHP

PHP签到实现

2026-03-12 21:04:19PHP

PHP签到功能实现方法

数据库设计

创建签到记录表,包含用户ID、签到日期等字段

CREATE TABLE `sign_in` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `sign_date` date NOT NULL,
  `sign_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_date` (`user_id`,`sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

签到逻辑处理

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

PHP签到实现

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

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

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

    // 执行签到
    $stmt = $pdo->prepare("INSERT INTO sign_in (user_id, sign_date) VALUES (?, ?)");
    $stmt->execute([$userId, $today]);

    return ['status' => 1, 'msg' => '签到成功'];
}

连续签到统计

计算用户连续签到天数

PHP签到实现

function getContinuousDays($userId) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $stmt = $pdo->prepare("
        SELECT sign_date FROM sign_in 
        WHERE user_id = ? 
        ORDER BY sign_date DESC
    ");
    $stmt->execute([$userId]);

    $continuousDays = 0;
    $currentDate = date('Y-m-d');

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        if($row['sign_date'] == $currentDate) {
            $continuousDays++;
            $currentDate = date('Y-m-d', strtotime($currentDate . ' -1 day'));
        } else {
            break;
        }
    }

    return $continuousDays;
}

签到奖励机制

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

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

    if(isset($rewards[$continuousDays])) {
        $reward = $rewards[$continuousDays];
        // 发放积分奖励逻辑
        return $reward;
    }

    return null;
}

前端交互示例

简单的AJAX签到请求处理

$('#signInBtn').click(function() {
    $.post('/sign_in.php', {action: 'sign_in'}, function(res) {
        if(res.status == 1) {
            alert('签到成功!连续签到' + res.continuous_days + '天');
        } else {
            alert(res.msg);
        }
    }, 'json');
});

安全注意事项

  1. 用户身份验证必须严格,防止伪造签到
  2. 数据库操作使用预处理语句防止SQL注入
  3. 重要操作记录日志
  4. 高频请求需要做限流处理

扩展功能建议

  1. 添加补签功能
  2. 实现签到排行榜
  3. 设计每月签到日历视图
  4. 增加签到成就系统
  5. 多平台签到同步

以上实现方案可根据实际项目需求进行调整,核心在于数据库设计和签到状态的准确判断。

标签: PHP
分享给朋友:

相关文章

单例模式的实现PHP

单例模式的实现PHP

单例模式的基本概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景,如数据库连接、日志管理等。 PHP 单例模式的实现步骤 私有化构造函数…

PHP http长连接的实现

PHP http长连接的实现

HTTP 长连接基础概念 HTTP长连接(Keep-Alive)允许在单个TCP连接上发送和接收多个HTTP请求/响应,减少重复建立和断开连接的开销。HTTP/1.1默认启用长连接,而HTTP/1.0…

拼团 PHP实现

拼团 PHP实现

拼团功能 PHP 实现 拼团是一种常见的电商营销模式,允许用户邀请好友一起购买商品,达到指定人数后享受优惠价格。以下是使用 PHP 实现拼团功能的关键步骤和代码示例。 数据库设计 拼团功能通常需要设…

PHP中实现重定向

PHP中实现重定向

PHP重定向的实现方法 在PHP中,重定向是通过发送HTTP头信息来实现的。以下是几种常见的重定向方法: 使用header()函数 header("Location: https://exampl…

PHP实现流程

PHP实现流程

PHP实现流程的基本步骤 环境准备 安装PHP运行环境,如XAMPP、WAMP或直接安装PHP和Web服务器(如Apache/Nginx)。确保环境变量配置正确,可通过命令行输入php -v验证安装。…

PHP实现numpy

PHP实现numpy

在PHP中实现类似NumPy的功能,可以通过结合PHP的数组操作、扩展库或第三方工具来模拟部分功能。以下是几种常见方法: 使用PHP数组和内置函数 PHP的数组支持多维操作,结合内置数学函数可实现基…