当前位置:首页 > 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
分享给朋友:

相关文章

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…