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

签到逻辑处理

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

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' => '签到成功'];
}

连续签到统计

计算用户连续签到天数

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签到请求处理

PHP签到实现

$('#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 http长连接的实现

PHP http长连接的实现

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

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PENDI…

mvc实现 PHP

mvc实现 PHP

MVC 模式概述 MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑分离为三个核心组件:模型(Model)处理数据,视图(View)负责展示,控制器(Contro…

PHP实现建站

PHP实现建站

PHP建站的基本步骤 安装PHP环境 使用XAMPP、WAMP或MAMP等集成环境快速搭建本地开发环境,这些工具包含Apache、MySQL和PHP。对于生产环境,推荐使用LNMP(Linux+Ngi…

PHP实现HTML

PHP实现HTML

PHP实现HTML的方式 PHP作为服务器端脚本语言,可以直接嵌入HTML代码中生成动态网页内容。以下是几种常见实现方式: 混合编写 直接在.php文件中混合PHP与HTML代码: <!DO…