当前位置:首页 > PHP

php代码实现签到

2026-02-16 05:39:11PHP

PHP 签到功能实现

数据库表设计

创建一个签到表 sign_in,包含以下字段:

CREATE TABLE `sign_in` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `sign_date` date NOT NULL,
  `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代码实现签到

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

// 获取用户ID(假设从session获取)
$user_id = $_SESSION['user_id'];

// 检查今天是否已签到
$today = date('Y-m-d');
$stmt = $db->prepare("SELECT id FROM sign_in WHERE user_id = ? AND sign_date = ?");
$stmt->execute([$user_id, $today]);

if ($stmt->fetch()) {
    echo "今日已签到";
} else {
    // 执行签到
    $stmt = $db->prepare("INSERT INTO sign_in (user_id, sign_date) VALUES (?, ?)");
    if ($stmt->execute([$user_id, $today])) {
        echo "签到成功";
    } else {
        echo "签到失败";
    }
}
?>

连续签到功能扩展

// 获取连续签到天数
function getContinuousDays($db, $user_id) {
    $stmt = $db->prepare("
        SELECT COUNT(*) as days 
        FROM (
            SELECT sign_date, 
                   @date_group := IF(DATEDIFF(@prev_date, sign_date) = 1, @date_group, @date_group + 1) as date_group,
                   @prev_date := sign_date
            FROM (SELECT sign_date FROM sign_in WHERE user_id = ? ORDER BY sign_date DESC) t,
                 (SELECT @date_group := 0, @prev_date := NULL) vars
        ) t
        WHERE date_group = 1
    ");
    $stmt->execute([$user_id]);
    $result = $stmt->fetch();
    return $result['days'] ?? 0;
}

签到奖励系统

php代码实现签到

// 根据连续签到天数发放奖励
$continuous_days = getContinuousDays($db, $user_id);

switch ($continuous_days) {
    case 7:
        addReward($user_id, '7天连续签到奖励');
        break;
    case 30:
        addReward($user_id, '30天连续签到奖励');
        break;
    // 其他奖励规则...
}

function addReward($user_id, $reward_name) {
    // 实现奖励发放逻辑
}

前端页面整合

<form method="post" action="sign_in.php">
    <button type="submit">每日签到</button>
</form>
<p>连续签到天数: <?php echo getContinuousDays($db, $user_id); ?></p>

注意事项

  • 确保用户认证系统已正确实现
  • 考虑添加防刷机制,如IP限制
  • 对于高并发场景,考虑使用Redis等缓存技术
  • 定期清理或归档旧的签到记录

标签: 代码php
分享给朋友:

相关文章

php分页代码简单实现

php分页代码简单实现

基本分页实现 在PHP中实现分页功能通常需要结合MySQL的LIMIT子句。以下是一个基础实现示例: <?php // 数据库连接 $conn = mysqli_connect("localh…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php实现聊天

php实现聊天

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

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…