🔥 ฟีเจอร์หลักของระบบ
- ✅ ลูกค้าสั่งอาหารผ่านมือถือ โดยสแกน QR Code
- ✅ พนักงานเห็นออเดอร์แบบเรียลไทม์ และอัปเดตสถานะ
- ✅ รองรับหลายโต๊ะ (ลูกค้าเลือกหมายเลขโต๊ะก่อนสั่ง)
- ✅ ระบบแจ้งเตือนพนักงานเมื่อมีออเดอร์ใหม่
- ✅ สามารถใช้งานผ่านมือถือ (Responsive Design)
📌 1. สร้างฐานข้อมูล MySQL
CREATE DATABASE restaurant_orders;
USE restaurant_orders;
-- โต๊ะอาหาร
CREATE TABLE tables (
id INT AUTO_INCREMENT PRIMARY KEY,
table_number INT NOT NULL UNIQUE,
status ENUM('available', 'occupied') DEFAULT 'available'
);
-- เมนูอาหาร
CREATE TABLE menu (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
-- รายการออเดอร์
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
table_id INT NOT NULL,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('pending', 'preparing', 'served') DEFAULT 'pending',
FOREIGN KEY (table_id) REFERENCES tables(id)
);
-- รายการอาหารที่สั่ง
CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
menu_id INT NOT NULL,
quantity INT NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (menu_id) REFERENCES menu(id)
);
📌 2. เชื่อมต่อฐานข้อมูล (db.php
)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "restaurant_orders";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("เชื่อมต่อฐานข้อมูลล้มเหลว: " . $conn->connect_error);
}
?>
📌 3. หน้าให้ลูกค้าสั่งอาหารผ่านมือถือ (order_food.php
)
<?php
include 'db.php';
// รับหมายเลขโต๊ะจาก URL
$table_id = isset($_GET['table_id']) ? (int)$_GET['table_id'] : 0;
if (!$table_id) {
die("หมายเลขโต๊ะไม่ถูกต้อง!");
}
// ดึงรายการเมนู
$menu_items = $conn->query("SELECT * FROM menu");
?>
<h2>สั่งอาหาร - โต๊ะที่ <?= $table_id ?></h2>
<form method="post" action="process_order.php">
<input type="hidden" name="table_id" value="<?= $table_id ?>">
<?php while ($item = $menu_items->fetch_assoc()): ?>
<label>
<input type="checkbox" name="menu[<?= $item['id'] ?>]" value="1">
<?= $item['name'] ?> - <?= $item['price'] ?> บาท
<input type="number" name="quantity[<?= $item['id'] ?>]" min="1" value="1">
</label><br>
<?php endwhile; ?>
<button type="submit">สั่งอาหาร</button>
</form>
📌 4. ประมวลผลออเดอร์ (process_order.php
)
<?php
include 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$table_id = $_POST['table_id'];
$menu_selected = $_POST['menu'];
$quantities = $_POST['quantity'];
if (!$menu_selected) {
die("กรุณาเลือกเมนูอาหาร!");
}
// สร้างออเดอร์ใหม่
$conn->query("INSERT INTO orders (table_id) VALUES ($table_id)");
$order_id = $conn->insert_id;
// บันทึกรายการอาหาร
foreach ($menu_selected as $menu_id => $value) {
$quantity = $quantities[$menu_id];
$price = $conn->query("SELECT price FROM menu WHERE id = $menu_id")->fetch_assoc()['price'];
$subtotal = $price * $quantity;
$conn->query("INSERT INTO order_items (order_id, menu_id, quantity, subtotal) VALUES ($order_id, $menu_id, $quantity, $subtotal)");
}
echo "ออเดอร์ของคุณถูกส่งแล้ว!";
echo "<a href='order_food.php?table_id=$table_id'>กลับไปที่เมนู</a>";
}
?>
📌 5. หน้าพนักงานดูออเดอร์ (view_orders.php
)
<?php
include 'db.php';
$orders = $conn->query("SELECT * FROM orders WHERE status = 'pending'");
echo "<h2>ออเดอร์ใหม่</h2>";
while ($order = $orders->fetch_assoc()) {
$order_id = $order['id'];
echo "<h3>โต๊ะที่: {$order['table_id']} | สถานะ: {$order['status']}</h3>";
$items = $conn->query("SELECT menu.name, order_items.quantity, order_items.subtotal FROM order_items
JOIN menu ON order_items.menu_id = menu.id WHERE order_id = $order_id");
while ($item = $items->fetch_assoc()) {
echo "{$item['name']} x{$item['quantity']} - {$item['subtotal']} บาท<br>";
}
echo "<a href='update_order.php?order_id=$order_id&status=preparing'>กำลังเตรียม</a> | ";
echo "<a href='update_order.php?order_id=$order_id&status=served'>เสิร์ฟแล้ว</a>";
echo "<hr>";
}
?>
📌 6. อัปเดตสถานะออเดอร์ (update_order.php
)
<?php
include 'db.php';
if (isset($_GET['order_id']) && isset($_GET['status'])) {
$order_id = $_GET['order_id'];
$status = $_GET['status'];
$conn->query("UPDATE orders SET status = '$status' WHERE id = $order_id");
header("Location: view_orders.php");
}
?>
📌 7. สร้าง QR Code สำหรับแต่ละโต๊ะ
สามารถใช้ Google API หรือไลบรารี PHP QR Code เพื่อสร้าง QR Code ที่ลูกค้าสแกนไปที่ order_food.php?table_id=XX
ตัวอย่างโค้ด:
$qr_text = "https://yourwebsite.com/order_food.php?table_id=1";
echo '<img src="https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=' . urlencode($qr_text) . '" />';
📌 8. ปรับให้ใช้งานบนมือถือ
เพิ่ม Bootstrap สำหรับ UI ที่สวยงามและรองรับมือถือ
ให้เพิ่ม <link>
ใน <head>
ของทุกไฟล์:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
✅ สรุป
🔥 ระบบรับออเดอร์ผ่านมือถือ
- ลูกค้า สั่งอาหารผ่านมือถือ โดยสแกน QR Code
- พนักงาน เห็นออเดอร์แบบเรียลไทม์ และ อัปเดตสถานะ
- ใช้ PHP + MySQL + Bootstrap รองรับการใช้งานมือถือ