当前位置:首页 > PHP

php实现打卡

2026-02-28 12:11:24PHP

PHP实现打卡功能

打卡功能通常涉及用户登录、记录时间、存储数据等步骤。以下是一个简单的PHP打卡实现方案:

数据库设计

创建一张表存储打卡记录,例如:

CREATE TABLE `check_in` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `check_in_time` datetime NOT NULL,
  `ip_address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用户认证

确保用户已登录才能打卡:

session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

打卡处理逻辑

创建check_in.php处理打卡请求:

php实现打卡

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

// 防止重复打卡
$stmt = $db->prepare("SELECT * FROM check_in WHERE user_id = ? AND DATE(check_in_time) = CURDATE()");
$stmt->execute([$_SESSION['user_id']]);
if ($stmt->rowCount() > 0) {
    die('今日已打卡');
}

// 记录打卡
$stmt = $db->prepare("INSERT INTO check_in (user_id, check_in_time, ip_address) VALUES (?, NOW(), ?)");
$stmt->execute([
    $_SESSION['user_id'],
    $_SERVER['REMOTE_ADDR']
]);

echo '打卡成功';

前端界面

简单的HTML打卡按钮:

<form action="check_in.php" method="post">
    <button type="submit">每日打卡</button>
</form>

打卡记录查询

显示用户打卡历史:

$stmt = $db->prepare("SELECT * FROM check_in WHERE user_id = ? ORDER BY check_in_time DESC");
$stmt->execute([$_SESSION['user_id']]);
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($records as $record) {
    echo date('Y-m-d H:i', strtotime($record['check_in_time'])).'<br>';
}

安全增强

添加CSRF防护:

php实现打卡

// 生成token
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// 表单中加入
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 验证token
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('非法请求');
}

扩展功能

  1. 连续打卡统计:

    $stmt = $db->prepare("
     SELECT COUNT(*) as days 
     FROM check_in 
     WHERE user_id = ? 
     AND check_in_time >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
    ");
    $stmt->execute([$_SESSION['user_id']]);
    $continuous = $stmt->fetchColumn();
  2. 打卡提醒功能:

    
    $last_check = $db->query("
     SELECT MAX(check_in_time) 
     FROM check_in 
     WHERE user_id = ".$_SESSION['user_id']
    )->fetchColumn();

if (date('Y-m-d') > date('Y-m-d', strtotime($last_check))) { echo '今天尚未打卡'; }


3. 地理位置验证(可选):
```javascript
// 前端获取地理位置
navigator.geolocation.getCurrentPosition(function(position) {
    // 将坐标发送到后端验证
});

标签: php
分享给朋友:

相关文章

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php登陆功能实现

php登陆功能实现

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