ฟีเจอร์ของระบบ
- 👤 พนักงานสามารถลงชื่อเข้า-ออกงาน
- 📅 บันทึกวันและเวลาของการลงเวลา
- 📊 ผู้ดูแลระบบสามารถดูประวัติการลงเวลา
- 🛠 รองรับการแก้ไขข้อมูลหากมีข้อผิดพลาด
- 📌 เชื่อมต่อฐานข้อมูล 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>
วิธีใช้งาน
- สร้างฐานข้อมูล
attendance_db
และนำ SQL ไปสร้างตาราง - เพิ่มพนักงาน ในตาราง
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