当前位置:首页 > PHP

php 实现 签到功能实现

2026-03-13 02:01:05PHP

数据库设计

创建一个签到表用于存储用户的签到记录,字段包括用户ID、签到日期、连续签到天数等。示例SQL如下:

php 实现 签到功能实现

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

签到逻辑实现

通过PHP判断用户当日是否已签到,未签到则插入记录并更新连续签到天数。示例代码:

php 实现 签到功能实现

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

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

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

    // 计算连续签到天数
    $continuousDays = $lastRecord ? $lastRecord['continuous_days'] + 1 : 1;

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

    return ['status' => 'success', 'continuous_days' => $continuousDays];
}

奖励机制

根据连续签到天数发放不同奖励,可在签到成功后调用奖励函数:

function giveReward($userId, $continuousDays) {
    $rewards = [
        3 => ['type' => 'points', 'amount' => 10],
        7 => ['type' => 'points', 'amount' => 30],
        30 => ['type' => 'vip', 'days' => 1]
    ];

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

签到统计

提供查询用户签到情况的接口:

function getCheckInStats($userId) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

    // 当月签到记录
    $stmt = $pdo->prepare("SELECT check_in_date FROM user_check_in 
                          WHERE user_id = ? AND MONTH(check_in_date) = MONTH(CURRENT_DATE())");
    $stmt->execute([$userId]);
    $dates = $stmt->fetchAll(PDO::FETCH_COLUMN);

    // 连续签到天数
    $stmt = $pdo->prepare("SELECT continuous_days FROM user_check_in 
                          WHERE user_id = ? ORDER BY check_in_date DESC LIMIT 1");
    $stmt->execute([$userId]);
    $continuousDays = $stmt->fetchColumn();

    return [
        'checked_dates' => $dates,
        'continuous_days' => $continuousDays ?: 0
    ];
}

安全考虑

  1. 对用户输入进行验证和过滤
  2. 使用预处理语句防止SQL注入
  3. 重要操作记录日志
  4. 考虑添加每日签到限制

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

相关文章

vue实现按钮实现点击功能

vue实现按钮实现点击功能

Vue 按钮点击功能实现 在 Vue 中实现按钮点击功能可以通过多种方式完成,以下是常见的实现方法: 方法一:使用 v-on 指令 通过 v-on:click 或简写 @click 绑定事件:…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…