当前位置:首页 > PHP

php签到功能实现

2026-02-13 19:03:56PHP

PHP签到功能实现

数据库设计

创建一张用户签到表,包含以下字段:

php签到功能实现

  • id:自增主键
  • user_id:用户ID
  • sign_date:签到日期
  • continuous_days:连续签到天数
  • created_at:创建时间
CREATE TABLE `user_sign` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `sign_date` date NOT NULL,
  `continuous_days` int(11) NOT NULL DEFAULT 1,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_date` (`user_id`,`sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

签到逻辑实现

检查用户是否已签到,未签到则插入记录并更新连续签到天数

php签到功能实现

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

    // 检查今日是否已签到
    $stmt = $pdo->prepare("SELECT id FROM user_sign WHERE user_id = ? AND sign_date = ?");
    $stmt->execute([$userId, $today]);
    if ($stmt->fetch()) {
        return ['status' => 0, 'msg' => '今日已签到'];
    }

    // 获取昨日签到记录
    $yesterday = date('Y-m-d', strtotime('-1 day'));
    $stmt = $pdo->prepare("SELECT continuous_days FROM user_sign WHERE user_id = ? AND sign_date = ?");
    $stmt->execute([$userId, $yesterday]);
    $continuousDays = $stmt->fetch() ? $stmt->fetch()['continuous_days'] + 1 : 1;

    // 插入今日签到记录
    $stmt = $pdo->prepare("INSERT INTO user_sign (user_id, sign_date, continuous_days) VALUES (?, ?, ?)");
    $stmt->execute([$userId, $today, $continuousDays]);

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

签到统计功能

获取用户本月签到情况和连续签到天数

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

    // 获取本月签到日期
    $stmt = $pdo->prepare("SELECT sign_date FROM user_sign WHERE user_id = ? AND sign_date LIKE ?");
    $stmt->execute([$userId, "$currentMonth%"]);
    $signDates = $stmt->fetchAll(PDO::FETCH_COLUMN);

    // 获取最近连续签到天数
    $stmt = $pdo->prepare("SELECT continuous_days FROM user_sign WHERE user_id = ? ORDER BY sign_date DESC LIMIT 1");
    $stmt->execute([$userId]);
    $continuousDays = $stmt->fetch() ? $stmt->fetch()['continuous_days'] : 0;

    return [
        'sign_dates' => $signDates,
        'continuous_days' => $continuousDays,
        'current_month' => $currentMonth
    ];
}

前端展示示例

简单的HTML页面展示签到按钮和签到日历

<div class="sign-container">
    <button id="signBtn" onclick="doSign()">立即签到</button>
    <div id="signCalendar"></div>
</div>

<script>
function doSign() {
    fetch('/sign.php?action=sign')
        .then(response => response.json())
        .then(data => {
            if(data.status) {
                alert('签到成功!连续签到' + data.continuous_days + '天');
                location.reload();
            } else {
                alert(data.msg);
            }
        });
}
</script>

注意事项

  • 数据库连接需要根据实际环境配置
  • 建议添加事务处理保证数据一致性
  • 重要操作建议记录日志
  • 高并发场景需要考虑锁机制
  • 签到奖励逻辑可根据业务需求扩展

标签: 功能php
分享给朋友:

相关文章

vue实现功能插件

vue实现功能插件

Vue 插件实现方法 Vue 插件通常用于封装全局功能(如指令、过滤器、混入等),以下是实现 Vue 插件的典型方式: 插件基本结构 const MyPlugin = { install(Vu…

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 使用Vue的单文件组件(.vue)将产品功能模块化,每个功能拆分为独立组件。例如产品列表、详情页、购物车等可分别封装为ProductList.vue、Pro…

php记住密码怎么实现

php记住密码怎么实现

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

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…