การจัดการงานส่งของนักเรียนแบบดิจิทัลเป็นสิ่งจำเป็นในยุคนี้ การสร้างระบบส่งงาน (Assignment Submission System) ด้วยตัวเองโดยใช้เทคโนโลยีพื้นฐานอย่าง PHP และ MySQL เป็นทางเลือกที่ยืดหยุ่นและคุ้มค่า บทความนี้จะแนะนำโครงสร้างและโค้ดพื้นฐานที่คุณสามารถนำไปใช้พัฒนาต่อยอดได้ทันที
ระบบนี้จะประกอบด้วยส่วนหลัก ๆ คือ หน้าอัปโหลดไฟล์ (PHP) และ ฐานข้อมูลสำหรับเก็บข้อมูลการส่งงาน (MySQL)
1. โครงสร้างฐานข้อมูล (MySQL Setup)
เราจะสร้างตารางเดียวเพื่อเก็บข้อมูลที่สำคัญทั้งหมดของการส่งงาน
ตาราง assignments
ใช้โค้ด SQL ต่อไปนี้เพื่อสร้างตารางในฐานข้อมูล MySQL ของคุณ:
SQL
CREATE TABLE assignments (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(255) NOT NULL,
student_id VARCHAR(50) NOT NULL,
assignment_name VARCHAR(255) NOT NULL,
file_path VARCHAR(255) NOT NULL, -- เก็บที่อยู่ของไฟล์บนเซิร์ฟเวอร์
submission_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
| Field | Type | Description |
id | INT | Primary Key, Auto-increment |
student_name | VARCHAR | ชื่อ-นามสกุล นักเรียน |
student_id | VARCHAR | รหัสนักเรียน (ไม่ซ้ำกัน) |
assignment_name | VARCHAR | ชื่องานที่ส่ง |
file_path | VARCHAR | สำคัญ: ที่อยู่ไฟล์จริงบนเซิร์ฟเวอร์ |
submission_date | TIMESTAMP | วันที่และเวลาที่ส่งงาน |
2. โค้ด PHP: หน้าฟอร์มอัปโหลด (upload_form.html หรือ .php)
สร้างไฟล์ HTML/PHP สำหรับแสดงฟอร์มให้นักเรียนกรอกข้อมูลและเลือกไฟล์
HTML
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>ระบบส่งงานออนไลน์</title>
</head>
<body>
<h2>ส่งงานวิชา [ระบุวิชา]</h2>
<form action="submit_assignment.php" method="POST" enctype="multipart/form-data">
<label for="name">ชื่อ-นามสกุล:</label><br>
<input type="text" id="name" name="student_name" required><br><br>
<label for="std_id">รหัสนักเรียน:</label><br>
<input type="text" id="std_id" name="student_id" required><br><br>
<label for="assign_name">ชื่องาน:</label><br>
<select id="assign_name" name="assignment_name" required>
<option value="">-- เลือกชื่องาน --</option>
<option value="รายงานบทที่ 1">รายงานบทที่ 1</option>
<option value="โครงงานกลุ่ม">โครงงานกลุ่ม</option>
</select><br><br>
<label for="file">เลือกไฟล์งาน (PDF/Word/ZIP):</label><br>
<input type="file" id="file" name="assignment_file" required><br><br>
<input type="submit" value="ส่งงาน">
</form>
</body>
</html>
3. โค้ด PHP: สคริปต์ประมวลผลและบันทึกข้อมูล (submit_assignment.php)
ไฟล์นี้เป็นหัวใจสำคัญ ทำหน้าที่เชื่อมต่อฐานข้อมูล จัดการอัปโหลดไฟล์ และบันทึกข้อมูลลงใน MySQL
A. โค้ดเชื่อมต่อฐานข้อมูล
PHP
<?php
// กำหนดค่าการเชื่อมต่อฐานข้อมูล
$servername = "localhost";
$username = "root"; // เปลี่ยนเป็นชื่อผู้ใช้ MySQL ของคุณ
$password = ""; // เปลี่ยนเป็นรหัสผ่าน MySQL ของคุณ
$dbname = "assignment_db"; // เปลี่ยนเป็นชื่อฐานข้อมูลของคุณ
// สร้างการเชื่อมต่อ
$conn = new mysqli($servername, $username, $password, $dbname);
// ตรวจสอบการเชื่อมต่อ
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
B. โค้ดประมวลผลการอัปโหลด
PHP
<?php
// (โค้ดเชื่อมต่อฐานข้อมูล จาก 3.A อยู่ที่นี่)
// ตรวจสอบว่ามีการส่งข้อมูลแบบ POST มาหรือไม่
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 1. รับค่าจากฟอร์ม
$student_name = $conn->real_escape_string($_POST['student_name']);
$student_id = $conn->real_escape_string($_POST['student_id']);
$assignment_name = $conn->real_escape_string($_POST['assignment_name']);
// 2. จัดการการอัปโหลดไฟล์
$target_dir = "uploads/"; // โฟลเดอร์ที่จะเก็บไฟล์งาน
// ตรวจสอบและสร้างโฟลเดอร์ uploads หากไม่มี
if (!is_dir($target_dir)) {
mkdir($target_dir, 0777, true);
}
$original_file_name = basename($_FILES["assignment_file"]["name"]);
// สร้างชื่อไฟล์ใหม่เพื่อป้องกันชื่อซ้ำและง่ายต่อการจัดระเบียบ
$file_extension = pathinfo($original_file_name, PATHINFO_EXTENSION);
$new_file_name = $student_id . "_" . time() . "." . $file_extension;
$target_file = $target_dir . $new_file_name;
$uploadOk = 1;
// ตรวจสอบขนาดไฟล์ (เช่น ไม่เกิน 5MB)
if ($_FILES["assignment_file"]["size"] > 5000000) {
echo "ขออภัย, ไฟล์ของคุณใหญ่เกินไป (จำกัด 5MB).";
$uploadOk = 0;
}
// หากไม่มีปัญหาในการอัปโหลด
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["assignment_file"]["tmp_name"], $target_file)) {
// 3. บันทึกข้อมูลลงฐานข้อมูล
$sql = "INSERT INTO assignments (student_name, student_id, assignment_name, file_path)
VALUES ('$student_name', '$student_id', '$assignment_name', '$target_file')";
if ($conn->query($sql) === TRUE) {
echo "<h1>การส่งงานสำเร็จ!</h1>";
echo "ชื่อไฟล์: " . $original_file_name . "<br>";
echo "วันที่ส่ง: " . date("Y-m-d H:i:s");
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
} else {
echo "ขออภัย, มีข้อผิดพลาดในการย้ายไฟล์.";
}
}
}
$conn->close();
?>
4. ข้อควรจำเพื่อความปลอดภัยและการพัฒนาต่อยอด
- ความปลอดภัย (SQL Injection): ในโค้ดตัวอย่าง มีการใช้
real_escape_string()ซึ่งเป็นมาตรการพื้นฐาน แต่ ควรเปลี่ยนไปใช้ Prepared Statements ($conn->prepare()) เสมอเมื่อใช้งานจริง เพื่อป้องกันการโจมตี SQL Injection อย่างสมบูรณ์ - การจัดการไฟล์: ควรจำกัดประเภทของไฟล์ที่อนุญาตให้อัปโหลด (เช่น PDF, DOCX, ZIP เท่านั้น) เพื่อป้องกันการอัปโหลดไฟล์อันตราย (เช่น .php หรือ .exe)
- การแสดงผลสำหรับครู: เพื่อให้ระบบสมบูรณ์ คุณควรสร้างหน้า
teacher_view.phpที่ดึงข้อมูลจากตารางassignmentsมาแสดงผลในรูปแบบตาราง เพื่อให้ครูสามารถดูว่าใครส่งงานแล้วบ้างและมีลิงก์สำหรับดาวน์โหลดไฟล์งานนั้น ๆ - การยืนยันตัวตน: ระบบนี้ไม่มีการล็อกอิน หากต้องการให้ปลอดภัย ควรเพิ่มระบบล็อกอินสำหรับนักเรียนและครู โดยใช้ตาราง
usersแยกต่างหาก



