当前位置:首页 > PHP

php实现客户签到

2026-02-15 12:21:25PHP

实现客户签到功能

使用PHP实现客户签到功能需要结合数据库操作和前端交互。以下是一个基本的实现方案:

数据库设计

创建一张签到表存储签到记录:

CREATE TABLE user_check_in (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    check_in_date DATE NOT NULL,
    check_in_time DATETIME NOT NULL,
    points_earned INT DEFAULT 0,
    UNIQUE KEY (user_id, check_in_date)
);

签到核心代码

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

// 获取用户ID
$userId = $_SESSION['user_id'] ?? 0;

// 检查今日是否已签到
$stmt = $db->prepare("SELECT * FROM user_check_in WHERE user_id = ? AND check_in_date = CURDATE()");
$stmt->execute([$userId]);
$hasCheckedIn = $stmt->fetch();

if (!$hasCheckedIn && $userId) {
    // 执行签到
    $points = 10; // 每次签到获得10积分

    $stmt = $db->prepare("INSERT INTO user_check_in (user_id, check_in_date, check_in_time, points_earned) 
                         VALUES (?, CURDATE(), NOW(), ?)");
    $stmt->execute([$userId, $points]);

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

    echo json_encode(['success' => true, 'message' => '签到成功,获得'.$points.'积分']);
} else {
    echo json_encode(['success' => false, 'message' => '今日已签到']);
}
?>

前端交互示例

function checkIn() {
    fetch('check_in.php')
        .then(response => response.json())
        .then(data => {
            alert(data.message);
            if(data.success) {
                // 更新UI显示
                document.getElementById('checkInBtn').disabled = true;
            }
        });
}

连续签到奖励

可以扩展签到逻辑实现连续签到奖励:

php实现客户签到

// 检查昨日是否签到
$stmt = $db->prepare("SELECT check_in_date FROM user_check_in 
                     WHERE user_id = ? AND check_in_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)");
$stmt->execute([$userId]);
$yesterdayChecked = $stmt->fetch();

// 计算连续签到天数
if ($yesterdayChecked) {
    $stmt = $db->prepare("SELECT consecutive_days FROM users WHERE id = ?");
    $stmt->execute([$userId]);
    $consecutiveDays = $stmt->fetchColumn();
    $consecutiveDays = $consecutiveDays ? $consecutiveDays + 1 : 2;

    // 根据连续天数计算奖励
    $points = min(10 * $consecutiveDays, 100); // 最多100积分

    // 更新连续签到天数
    $stmt = $db->prepare("UPDATE users SET consecutive_days = ? WHERE id = ?");
    $stmt->execute([$consecutiveDays, $userId]);
} else {
    // 重置连续签到
    $stmt = $db->prepare("UPDATE users SET consecutive_days = 1 WHERE id = ?");
    $stmt->execute([$userId]);
    $points = 10;
}

安全注意事项

  1. 验证用户登录状态
  2. 防止SQL注入使用预处理语句
  3. 限制频繁请求
  4. 重要操作记录日志

以上代码提供了PHP实现客户签到功能的基本框架,可根据实际需求进行调整和扩展。

标签: 客户php
分享给朋友:

相关文章

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…