当前位置:首页 > PHP

php实现客户签到

2026-02-15 12:21:25PHP

实现客户签到功能

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

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;
            }
        });
}

连续签到奖励

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

// 检查昨日是否签到
$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实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现定时任务

php实现定时任务

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

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 队列的实现

php 队列的实现

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

php实现的进度条

php实现的进度条

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

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…