当前位置:首页 > PHP

php签到功能实现

2026-02-13 19:03:56PHP

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;

签到逻辑实现

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

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页面展示签到按钮和签到日历

php签到功能实现

<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.js结合其响应式特性和组件化开发方式,可以高效实现这一功能。 核心实现步骤 创建轨…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…