当前位置:首页 > PHP

php实现打卡系统

2026-02-15 23:10:23PHP

数据库设计

打卡系统需要存储用户打卡记录,设计简单的数据表结构:

  • users表:存储用户信息
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        password VARCHAR(255) NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
  • checkins表:存储打卡记录
    CREATE TABLE checkins (
        id INT AUTO_INCREMENT PRIMARY KEY,
        user_id INT NOT NULL,
        checkin_time DATETIME NOT NULL,
        location VARCHAR(100),
        FOREIGN KEY (user_id) REFERENCES users(id)
    );

用户认证

使用PHP实现基础登录验证:

php实现打卡系统

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 数据库查询验证(示例使用PDO)
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header("Location: dashboard.php");
    }
}

打卡功能实现

处理用户打卡请求并记录数据:

// 打卡处理逻辑
if (isset($_POST['checkin'])) {
    $userId = $_SESSION['user_id'];
    $location = $_POST['location']; // 可选:GPS或手动输入

    $stmt = $pdo->prepare("INSERT INTO checkins (user_id, checkin_time, location) 
                          VALUES (?, NOW(), ?)");
    $stmt->execute([$userId, $location]);

    echo "打卡成功!";
}

打卡记录查询

显示用户历史打卡记录:

php实现打卡系统

$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT * FROM checkins WHERE user_id = ? ORDER BY checkin_time DESC");
$stmt->execute([$userId]);
$records = $stmt->fetchAll();

foreach ($records as $record) {
    echo "时间:" . $record['checkin_time'] . ",地点:" . $record['location'] . "<br>";
}

防止重复打卡

添加当日唯一性检查:

$today = date('Y-m-d');
$stmt = $pdo->prepare("SELECT COUNT(*) FROM checkins 
                      WHERE user_id = ? AND DATE(checkin_time) = ?");
$stmt->execute([$userId, $today]);
if ($stmt->fetchColumn() > 0) {
    die("今日已打卡");
}

前端界面示例

基础HTML表单:

<form method="post">
    <input type="text" name="location" placeholder="输入地点">
    <button type="submit" name="checkin">打卡</button>
</form>

扩展功能建议

  • 添加补卡申请功能
  • 实现部门统计报表
  • 集成微信/企业微信通知
  • 添加人脸识别验证
  • 使用Redis缓存高频查询数据

安全注意事项

  • 对所有数据库查询使用预处理语句
  • 密码存储使用password_hash()
  • 重要操作需验证会话权限
  • 生产环境应启用HTTPS
  • 对用户输入进行过滤和转义

标签: 系统php
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php实现跳转

php实现跳转

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

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…