当前位置:首页 > PHP

php实现签到

2026-03-12 16:20:16PHP

PHP 实现签到功能

签到功能通常涉及用户每日签到记录、连续签到统计和奖励发放。以下是一个基于PHP和MySQL的实现方案:

数据库设计

创建签到记录表sign_in

php实现签到

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

签到核心逻辑

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

    // 检查今天是否已签到
    $existing = query("SELECT * FROM sign_in WHERE user_id = ? AND sign_date = ?", [$userId, $today]);
    if ($existing) {
        return ['status' => false, 'message' => '今日已签到'];
    }

    // 检查昨天是否签到
    $yesterdayRecord = query("SELECT * FROM sign_in WHERE user_id = ? AND sign_date = ?", [$userId, $yesterday]);
    $continuousDays = $yesterdayRecord ? $yesterdayRecord['continuous_days'] + 1 : 1;

    // 插入签到记录
    $result = execute("INSERT INTO sign_in (user_id, sign_date, continuous_days) VALUES (?, ?, ?)", 
        [$userId, $today, $continuousDays]);

    if ($result) {
        return [
            'status' => true,
            'continuous_days' => $continuousDays,
            'reward' => calculateReward($continuousDays)
        ];
    }
    return ['status' => false, 'message' => '签到失败'];
}

奖励计算函数

function calculateReward($days) {
    $base = 10; // 基础奖励
    $bonus = floor($days / 7) * 50; // 每7天额外奖励
    return $base + $bonus;
}

查询签到情况

function getSignInStatus($userId) {
    $today = date('Y-m-d');
    $records = query("SELECT * FROM sign_in WHERE user_id = ? ORDER BY sign_date DESC LIMIT 7", [$userId]);

    $signedToday = false;
    $continuousDays = 0;

    foreach ($records as $record) {
        if ($record['sign_date'] == $today) {
            $signedToday = true;
            $continuousDays = $record['continuous_days'];
        }
    }

    return [
        'signed_today' => $signedToday,
        'continuous_days' => $continuousDays,
        'recent_records' => $records
    ];
}

前端交互示例

// AJAX调用签到接口
$('#signBtn').click(function() {
    $.post('/api/signin', {user_id: 123}, function(res) {
        if (res.status) {
            alert(`签到成功!连续签到${res.continuous_days}天,获得${res.reward}积分`);
        } else {
            alert(res.message);
        }
    });
});

实现要点

  • 使用唯一索引防止重复签到
  • 连续签到天数基于前一天记录计算
  • 奖励机制可根据业务需求调整
  • 建议添加事务处理确保数据一致性
  • 可扩展添加补签功能

安全考虑

  • 验证用户身份防止伪造请求
  • 重要操作记录日志
  • 接口添加防刷限制
  • 敏感数据返回前进行过滤

以上方案可根据实际需求进行调整,例如添加月签到统计、签到排行榜等功能。

标签: php
分享给朋友:

相关文章

php实现栈

php实现栈

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

php如何实现直播

php如何实现直播

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

php购物车实现

php购物车实现

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

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…