当前位置:首页 > PHP

PHP签到实现

2026-01-30 00:30:54PHP

PHP签到功能实现

PHP实现签到功能需要结合数据库存储用户签到记录,并提供前端交互界面。以下是一个完整的实现方案:

数据库设计

创建用户表users和签到记录表sign_records

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE sign_records (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    sign_date DATE NOT NULL,
    sign_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

签到逻辑实现

创建签到处理脚本sign.php

<?php
session_start();
require 'db_connect.php'; // 数据库连接文件

if (!isset($_SESSION['user_id'])) {
    die("请先登录");
}

$userId = $_SESSION['user_id'];
$today = date('Y-m-d');

// 检查今天是否已签到
$checkSql = "SELECT id FROM sign_records WHERE user_id = ? AND sign_date = ?";
$stmt = $pdo->prepare($checkSql);
$stmt->execute([$userId, $today]);

if ($stmt->rowCount() > 0) {
    echo "今日已签到";
    exit;
}

// 执行签到
$insertSql = "INSERT INTO sign_records (user_id, sign_date) VALUES (?, ?)";
$stmt = $pdo->prepare($insertSql);
$result = $stmt->execute([$userId, $today]);

if ($result) {
    echo "签到成功";
} else {
    echo "签到失败";
}
?>

连续签到统计

添加连续签到统计功能:

function getContinuousSignDays($userId, $pdo) {
    $sql = "SELECT sign_date FROM sign_records 
            WHERE user_id = ? 
            ORDER BY sign_date DESC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$userId]);

    $records = $stmt->fetchAll(PDO::FETCH_COLUMN);
    $continuousDays = 0;
    $yesterday = date('Y-m-d', strtotime('-1 day'));

    foreach ($records as $date) {
        if ($date == date('Y-m-d')) {
            $continuousDays = 1;
        } elseif ($date == $yesterday) {
            $continuousDays++;
            $yesterday = date('Y-m-d', strtotime($yesterday . ' -1 day'));
        } else {
            break;
        }
    }

    return $continuousDays;
}

前端界面示例

创建签到按钮和显示界面sign_page.php

<div class="sign-container">
    <h3>每日签到</h3>
    <button id="signBtn" class="btn btn-primary">立即签到</button>
    <div id="signResult"></div>
    <p>已连续签到 <span id="continuousDays">0</span> 天</p>
</div>

<script>
$(document).ready(function() {
    $('#signBtn').click(function() {
        $.post('sign.php', function(response) {
            $('#signResult').html(response);
            if (response.includes('成功')) {
                location.reload();
            }
        });
    });
});
</script>

签到奖励系统

可扩展添加奖励系统:

function giveSignReward($userId, $continuousDays, $pdo) {
    $rewardPoints = 10; // 基础奖励

    // 连续签到额外奖励
    if ($continuousDays >= 7) {
        $rewardPoints += 50;
    } elseif ($continuousDays >= 3) {
        $rewardPoints += 20;
    }

    // 更新用户积分
    $updateSql = "UPDATE users SET points = points + ? WHERE id = ?";
    $stmt = $pdo->prepare($updateSql);
    $stmt->execute([$rewardPoints, $userId]);

    return $rewardPoints;
}

安全注意事项

  1. 确保所有数据库操作使用预处理语句防止SQL注入
  2. 对用户身份进行严格验证
  3. 重要操作记录日志
  4. 考虑添加CSRF防护机制

以上实现方案可根据实际需求进行调整和扩展,例如添加月签到统计、签到排行榜等功能。

PHP签到实现

标签: PHP
分享给朋友:

相关文章

单例模式的实现PHP

单例模式的实现PHP

单例模式的基本概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景,如数据库连接、日志管理等。 PHP 单例模式的实现步骤 私有化构造函数…

PHP http长连接的实现

PHP http长连接的实现

HTTP 长连接基础概念 HTTP长连接(Keep-Alive)允许在单个TCP连接上发送和接收多个HTTP请求/响应,减少重复建立和断开连接的开销。HTTP/1.1默认启用长连接,而HTTP/1.0…

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PEN…

拼团 PHP实现

拼团 PHP实现

拼团功能 PHP 实现 拼团是一种常见的电商营销模式,允许用户邀请好友一起购买商品,达到指定人数后享受优惠价格。以下是使用 PHP 实现拼团功能的关键步骤和代码示例。 数据库设计 拼团功能通常需要…

PHP中实现重定向

PHP中实现重定向

PHP重定向的实现方法 在PHP中,重定向是通过发送HTTP头信息来实现的。以下是几种常见的重定向方法: 使用header()函数 header("Location: https://exampl…