ฟีเจอร์ของระบบ

  1. 👤 พนักงานสามารถลงชื่อเข้า-ออกงาน
  2. 📅 บันทึกวันและเวลาของการลงเวลา
  3. 📊 ผู้ดูแลระบบสามารถดูประวัติการลงเวลา
  4. 🛠 รองรับการแก้ไขข้อมูลหากมีข้อผิดพลาด
  5. 📌 เชื่อมต่อฐานข้อมูล MySQL

1.สร้างฐานข้อมูลและตาราง MySQL

CREATE DATABASE attendance_db;
USE attendance_db;

-- ตารางพนักงาน
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

-- ตารางลงเวลาเข้า-ออก
CREATE TABLE attendance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    employee_id INT,
    check_in DATETIME DEFAULT NULL,
    check_out DATETIME DEFAULT NULL,
    FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE
);

2. เชื่อมต่อฐานข้อมูล (db.php)

<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "attendance_db";

$conn = new mysqli($host, $user, $pass, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

3. ฟอร์มลงเวลาเข้า-ออก (index.php)

<?php
include 'db.php';

// ดึงรายชื่อพนักงาน
$employees = $conn->query("SELECT * FROM employees");
?>
<!DOCTYPE html>
<html>
<head>
    <title>ระบบลงเวลาเข้า-ออกงาน</title>
</head>
<body>
    <h2>ลงเวลาเข้า-ออกงาน</h2>
    <form action="attendance.php" method="post">
        <label>เลือกพนักงาน:</label>
        <select name="employee_id" required>
            <?php while ($row = $employees->fetch_assoc()): ?>
                <option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>
            <?php endwhile; ?>
        </select>
        <br><br>
        <button type="submit" name="action" value="check_in">ลงเวลาเข้า</button>
        <button type="submit" name="action" value="check_out">ลงเวลาออก</button>
    </form>
    <br>
    <a href="history.php">ดูประวัติการลงเวลา</a>
</body>
</html>

4. บันทึกการลงเวลา (attendance.php)

<?php
include 'db.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $employee_id = $_POST['employee_id'];
    $action = $_POST['action'];
    $now = date('Y-m-d H:i:s');

    if ($action === 'check_in') {
        // ตรวจสอบว่ามีพนักงานที่ยังไม่ได้เช็คเอาท์หรือไม่
        $stmt = $conn->prepare("SELECT id FROM attendance WHERE employee_id = ? AND check_out IS NULL");
        $stmt->bind_param("i", $employee_id);
        $stmt->execute();
        $stmt->store_result();

        if ($stmt->num_rows == 0) {
            // ถ้ายังไม่มีการเช็คอินวันนี้ ให้ทำการเพิ่ม
            $stmt = $conn->prepare("INSERT INTO attendance (employee_id, check_in) VALUES (?, ?)");
            $stmt->bind_param("is", $employee_id, $now);
            $stmt->execute();
            echo "ลงเวลาเข้าเรียบร้อย!";
        } else {
            echo "คุณยังไม่ได้ลงเวลาออกจากงาน!";
        }
    } elseif ($action === 'check_out') {
        // อัปเดตเวลาที่เช็คเอาท์
        $stmt = $conn->prepare("UPDATE attendance SET check_out = ? WHERE employee_id = ? AND check_out IS NULL");
        $stmt->bind_param("si", $now, $employee_id);
        $stmt->execute();

        if ($stmt->affected_rows > 0) {
            echo "ลงเวลาออกเรียบร้อย!";
        } else {
            echo "ยังไม่มีการลงเวลาเข้า!";
        }
    }
}
?>
<br>
<a href="index.php">กลับ</a>

5. แสดงประวัติการลงเวลา (history.php)

<?php
include 'db.php';

$result = $conn->query("
    SELECT employees.name, attendance.check_in, attendance.check_out
    FROM attendance
    JOIN employees ON attendance.employee_id = employees.id
    ORDER BY attendance.id DESC
");
?>
<!DOCTYPE html>
<html>
<head>
    <title>ประวัติการลงเวลา</title>
</head>
<body>
    <h2>ประวัติการลงเวลา</h2>
    <table border="1">
        <tr>
            <th>ชื่อพนักงาน</th>
            <th>เวลาเข้า</th>
            <th>เวลาออก</th>
        </tr>
        <?php while ($row = $result->fetch_assoc()): ?>
            <tr>
                <td><?php echo $row['name']; ?></td>
                <td><?php echo $row['check_in']; ?></td>
                <td><?php echo $row['check_out'] ? $row['check_out'] : 'ยังไม่ลงเวลาออก'; ?></td>
            </tr>
        <?php endwhile; ?>
    </table>
    <br>
    <a href="index.php">กลับ</a>
</body>
</html>

วิธีใช้งาน

  1. สร้างฐานข้อมูล attendance_db และนำ SQL ไปสร้างตาราง
  2. เพิ่มพนักงาน ในตาราง employees (ทำผ่าน phpMyAdmin หรือ MySQL command)
INSERT INTO employees (name, email) VALUES ('สมชาย ใจดี', 'somchai@example.com');
INSERT INTO employees (name, email) VALUES ('สมหญิง ขยัน', 'somying@example.com');

เปิด index.php ให้พนักงานเลือกชื่อและลงเวลา

กดปุ่ม “ลงเวลาเข้า” หรือ “ลงเวลาออก”

เปิด history.php เพื่อตรวจสอบประวัติการลงเวลา

ฟีเจอร์เพิ่มเติมที่สามารถเพิ่มได้

  • 📍 รองรับระบบล็อกอิน
  • 📅 แสดงรายงานประจำวัน / สัปดาห์
  • 📲 รองรับการสแกน QR Code สำหรับลงเวลา
  • 📍 ตรวจจับตำแหน่ง GPS เพื่อป้องกันการลงเวลานอกสถานที่
  • 📥 ดาวน์โหลดรายงานเป็น Excel หรือ PDF
,


ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *