ผมจะพัฒนาระบบ POS สำหรับร้านอาหาร ด้วย PHP, Bootstrap และ MySQL พร้อมฟีเจอร์หลักดังนี้:
✅ ฟีเจอร์หลักของระบบ POS
- ระบบ ล็อกอิน และ จัดการผู้ใช้ (แอดมิน/พนักงาน)
- จัดการเมนูอาหาร (เพิ่ม/แก้ไข/ลบ)
- จัดการโต๊ะอาหาร
- สั่งอาหาร และ ออกใบเสร็จ
- พิมพ์ใบเสร็จ (ใช้ JavaScript Window Print)
- รายงานยอดขายรายวัน/รายเดือน
- ระบบจัดการสต๊อกสินค้า (เสริม)
📌 1. สร้างฐานข้อมูล MySQL
CREATE DATABASE restaurant_pos;
USE restaurant_pos;
-- ผู้ใช้ระบบ (Admin/Staff)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'staff') NOT NULL
);
-- เมนูอาหาร
CREATE TABLE menu (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
-- โต๊ะอาหาร
CREATE TABLE tables (
id INT AUTO_INCREMENT PRIMARY KEY,
table_number INT NOT NULL UNIQUE,
status ENUM('available', 'occupied') DEFAULT 'available'
);
-- รายการสั่งอาหาร
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
table_id INT NOT NULL,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('pending', 'completed') DEFAULT 'pending',
total DECIMAL(10,2) NOT NULL DEFAULT 0,
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_pos";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("เชื่อมต่อฐานข้อมูลล้มเหลว: " . $conn->connect_error);
}
?>
📌 3. ระบบล็อกอิน (login.php
)
<?php
session_start();
include 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT id, password, role FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $hashed_password, $role);
$stmt->fetch();
if (password_verify($password, $hashed_password)) {
$_SESSION['user_id'] = $id;
$_SESSION['role'] = $role;
header("Location: dashboard.php");
exit();
} else {
echo "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง!";
}
}
?>
<form method="post">
ชื่อผู้ใช้: <input type="text" name="username" required><br>
รหัสผ่าน: <input type="password" name="password" required><br>
<button type="submit">เข้าสู่ระบบ</button>
</form>
📌 4. หน้าแดชบอร์ด (dashboard.php
)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
echo "ยินดีต้อนรับ!";
?>
<ul>
<li><a href="menu.php">จัดการเมนู</a></li>
<li><a href="tables.php">จัดการโต๊ะ</a></li>
<li><a href="orders.php">สั่งอาหาร</a></li>
<li><a href="sales_report.php">รายงานยอดขาย</a></li>
<li><a href="logout.php">ออกจากระบบ</a></li>
</ul>
📌 5. ฟังก์ชันสั่งอาหาร (orders.php
)
<?php
include 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$table_id = $_POST['table_id'];
$menu_id = $_POST['menu_id'];
$quantity = $_POST['quantity'];
$menu = $conn->query("SELECT price FROM menu WHERE id = $menu_id")->fetch_assoc();
$subtotal = $menu['price'] * $quantity;
$conn->query("INSERT INTO orders (table_id, total) VALUES ($table_id, $subtotal)");
$order_id = $conn->insert_id;
$conn->query("INSERT INTO order_items (order_id, menu_id, quantity, subtotal) VALUES ($order_id, $menu_id, $quantity, $subtotal)");
}
?>
<form method="post">
หมายเลขโต๊ะ: <input type="number" name="table_id" required>
เมนู: <select name="menu_id">
<?php
$menu_items = $conn->query("SELECT * FROM menu");
while ($menu = $menu_items->fetch_assoc()) {
echo "<option value='{$menu['id']}'>{$menu['name']} ({$menu['price']} บาท)</option>";
}
?>
</select>
จำนวน: <input type="number" name="quantity" required>
<button type="submit">สั่งอาหาร</button>
</form>
📌 6. พิมพ์ใบเสร็จ (receipt.php
)
<?php
include 'db.php';
$order_id = $_GET['order_id'];
$order = $conn->query("SELECT * FROM orders WHERE id = $order_id")->fetch_assoc();
$order_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");
echo "<h2>ใบเสร็จ</h2>";
echo "หมายเลขโต๊ะ: " . $order['table_id'] . "<br>";
echo "<hr>";
while ($item = $order_items->fetch_assoc()) {
echo "{$item['name']} x{$item['quantity']} - {$item['subtotal']} บาท<br>";
}
echo "<hr>";
echo "<strong>ยอดรวม: {$order['total']} บาท</strong>";
?>
<button onclick="window.print()">พิมพ์ใบเสร็จ</button>
📌 7. รายงานยอดขาย (sales_report.php
)
<?php
include 'db.php';
$sales = $conn->query("SELECT DATE(order_time) as date, SUM(total) as revenue FROM orders WHERE status = 'completed' GROUP BY DATE(order_time)");
echo "<h2>รายงานยอดขาย</h2>";
echo "<table border='1'>";
echo "<tr><th>วันที่</th><th>ยอดขายรวม (บาท)</th></tr>";
while ($row = $sales->fetch_assoc()) {
echo "<tr><td>{$row['date']}</td><td>{$row['revenue']}</td></tr>";
}
echo "</table>";
?>
✅ สรุป
- ใช้ PHP + MySQL + Bootstrap สำหรับพัฒนา
- พิมพ์ใบเสร็จได้ (JavaScript
window.print()
) - มีรายงานยอดขายรายวัน/เดือน
- สามารถขยายเพิ่ม API, จัดการสต๊อกสินค้า, ระบบชำระเงิน ฯลฯ
🔒 ระบบล็อกอิน และจัดการผู้ใช้ (แอดมิน/พนักงาน) สำหรับร้านอาหาร POS
✅ 1. สร้างตารางผู้ใช้ในฐานข้อมูล
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'staff') NOT NULL
);
✅ 2. ระบบสมัครสมาชิก (เฉพาะแอดมินเพิ่มผู้ใช้)
📄 register.php
<?php
session_start();
include 'db.php';
// ตรวจสอบสิทธิ์แอดมินก่อนเพิ่มผู้ใช้
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
die("เฉพาะแอดมินเท่านั้นที่สามารถเพิ่มผู้ใช้");
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$role = $_POST['role'];
$stmt = $conn->prepare("INSERT INTO users (username, password, role) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $password, $role);
if ($stmt->execute()) {
echo "เพิ่มผู้ใช้สำเร็จ!";
} else {
echo "เกิดข้อผิดพลาด: " . $stmt->error;
}
}
?>
<h2>เพิ่มผู้ใช้ใหม่</h2>
<form method="post">
ชื่อผู้ใช้: <input type="text" name="username" required><br>
รหัสผ่าน: <input type="password" name="password" required><br>
บทบาท:
<select name="role">
<option value="admin">Admin</option>
<option value="staff">พนักงาน</option>
</select><br>
<button type="submit">เพิ่มผู้ใช้</button>
</form>
<a href="dashboard.php">กลับสู่หน้าหลัก</a>
✅ 3. ระบบล็อกอิน
📄 login.php
<?php
session_start();
include 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT id, password, role FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $hashed_password, $role);
$stmt->fetch();
if (password_verify($password, $hashed_password)) {
$_SESSION['user_id'] = $id;
$_SESSION['role'] = $role;
header("Location: dashboard.php");
exit();
} else {
echo "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง!";
}
}
?>
<h2>เข้าสู่ระบบ</h2>
<form method="post">
ชื่อผู้ใช้: <input type="text" name="username" required><br>
รหัสผ่าน: <input type="password" name="password" required><br>
<button type="submit">เข้าสู่ระบบ</button>
</form>
✅ 4. หน้าหลักแดชบอร์ด (แสดงเมนูแยกตามสิทธิ์)
📄 dashboard.php
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
echo "ยินดีต้อนรับ! บทบาท: " . $_SESSION['role'];
?>
<ul>
<?php if ($_SESSION['role'] === 'admin'): ?>
<li><a href="register.php">เพิ่มผู้ใช้ใหม่</a></li>
<li><a href="manage_users.php">จัดการผู้ใช้</a></li>
<?php endif; ?>
<li><a href="menu.php">จัดการเมนู</a></li>
<li><a href="tables.php">จัดการโต๊ะ</a></li>
<li><a href="orders.php">สั่งอาหาร</a></li>
<li><a href="sales_report.php">รายงานยอดขาย</a></li>
<li><a href="logout.php">ออกจากระบบ</a></li>
</ul>
✅ 5. ระบบจัดการผู้ใช้ (เฉพาะแอดมิน)
📄 manage_users.php
<?php
session_start();
include 'db.php';
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
die("เฉพาะแอดมินเท่านั้นที่สามารถเข้าถึงหน้านี้");
}
// ลบผู้ใช้
if (isset($_GET['delete_id'])) {
$id = $_GET['delete_id'];
$conn->query("DELETE FROM users WHERE id = $id");
}
// ดึงข้อมูลผู้ใช้ทั้งหมด
$users = $conn->query("SELECT id, username, role FROM users");
?>
<h2>จัดการผู้ใช้</h2>
<table border="1">
<tr>
<th>ชื่อผู้ใช้</th>
<th>บทบาท</th>
<th>จัดการ</th>
</tr>
<?php while ($row = $users->fetch_assoc()): ?>
<tr>
<td><?= $row['username'] ?></td>
<td><?= $row['role'] ?></td>
<td>
<a href="?delete_id=<?= $row['id'] ?>" onclick="return confirm('แน่ใจหรือไม่ที่จะลบผู้ใช้นี้?')">ลบ</a>
</td>
</tr>
<?php endwhile; ?>
</table>
<a href="dashboard.php">กลับสู่หน้าหลัก</a>
✅ 6. ออกจากระบบ
📄 logout.php
<?php
session_start();
session_destroy();
header("Location: login.php");
exit();
?>
🔥 สรุป
register.php
: เพิ่มผู้ใช้ใหม่ (เฉพาะแอดมิน)login.php
: ล็อกอิน (Staff/Admin)dashboard.php
: หน้าหลัก แสดงเมนูเฉพาะบทบาทmanage_users.php
: แอดมินสามารถดู/ลบผู้ใช้logout.php
: ออกจากระบบ
✅ ต่อยอดเพิ่มได้:
- ระบบเปลี่ยนรหัสผ่าน
- ระบบรีเซ็ตรหัสผ่าน (Forgot Password)
- เช็คสิทธิ์เพิ่มในการเข้าถึงหน้าอื่นๆ
🔐 อัปเกรดระบบ POS: เปลี่ยนรหัสผ่าน + รีเซ็ตรหัสผ่าน + เช็คสิทธิ์เข้าถึง
✅ 1. ระบบเปลี่ยนรหัสผ่าน
📄 change_password.php
<?php
session_start();
include 'db.php';
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user_id = $_SESSION['user_id'];
$current_password = $_POST['current_password'];
$new_password = $_POST['new_password'];
$confirm_password = $_POST['confirm_password'];
// ตรวจสอบรหัสผ่านเก่า
$stmt = $conn->prepare("SELECT password FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($hashed_password);
$stmt->fetch();
if (!password_verify($current_password, $hashed_password)) {
die("รหัสผ่านเดิมไม่ถูกต้อง!");
}
// ตรวจสอบว่ารหัสใหม่และยืนยันรหัสตรงกัน
if ($new_password !== $confirm_password) {
die("รหัสผ่านใหม่และยืนยันรหัสผ่านไม่ตรงกัน!");
}
// อัปเดตรหัสผ่านใหม่
$new_hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$update_stmt = $conn->prepare("UPDATE users SET password = ? WHERE id = ?");
$update_stmt->bind_param("si", $new_hashed_password, $user_id);
if ($update_stmt->execute()) {
echo "เปลี่ยนรหัสผ่านสำเร็จ!";
} else {
echo "เกิดข้อผิดพลาด: " . $update_stmt->error;
}
}
?>
<h2>เปลี่ยนรหัสผ่าน</h2>
<form method="post">
รหัสผ่านเดิม: <input type="password" name="current_password" required><br>
รหัสผ่านใหม่: <input type="password" name="new_password" required><br>
ยืนยันรหัสผ่านใหม่: <input type="password" name="confirm_password" required><br>
<button type="submit">เปลี่ยนรหัสผ่าน</button>
</form>
<a href="dashboard.php">กลับสู่หน้าหลัก</a>
✅ 2. ระบบรีเซ็ตรหัสผ่าน (Forgot Password)
📄 forgot_password.php
<?php
include 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$new_password = bin2hex(random_bytes(4)); // สร้างรหัสผ่านใหม่แบบสุ่ม
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$stmt = $conn->prepare("UPDATE users SET password = ? WHERE username = ?");
$stmt->bind_param("ss", $hashed_password, $username);
if ($stmt->execute() && $stmt->affected_rows > 0) {
echo "รีเซ็ตรหัสผ่านสำเร็จ! รหัสผ่านใหม่ของคุณคือ: <strong>$new_password</strong>";
} else {
echo "ไม่พบชื่อผู้ใช้!";
}
}
?>
<h2>ลืมรหัสผ่าน</h2>
<form method="post">
ชื่อผู้ใช้: <input type="text" name="username" required><br>
<button type="submit">รีเซ็ตรหัสผ่าน</button>
</form>
<a href="login.php">กลับไปยังหน้าล็อกอิน</a>
✅ 3. เช็คสิทธิ์การเข้าถึงหน้าอื่นๆ
เพิ่มโค้ดต่อไปนี้ไปยังหน้าที่ต้องการจำกัดสิทธิ์ เช่น menu.php
, orders.php
, sales_report.php
(เฉพาะแอดมิน)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
// เช็คสิทธิ์ (เฉพาะแอดมินเท่านั้น)
if ($_SESSION['role'] !== 'admin') {
die("คุณไม่มีสิทธิ์เข้าถึงหน้านี้!");
}
?>
✅ 4. อัปเดตเมนูแดชบอร์ด
📄 dashboard.php
<ul>
<li><a href="menu.php">จัดการเมนู</a></li>
<li><a href="tables.php">จัดการโต๊ะ</a></li>
<li><a href="orders.php">สั่งอาหาร</a></li>
<li><a href="sales_report.php">รายงานยอดขาย</a></li>
<li><a href="change_password.php">เปลี่ยนรหัสผ่าน</a></li>
<?php if ($_SESSION['role'] === 'admin'): ?>
<li><a href="register.php">เพิ่มผู้ใช้ใหม่</a></li>
<li><a href="manage_users.php">จัดการผู้ใช้</a></li>
<?php endif; ?>
<li><a href="logout.php">ออกจากระบบ</a></li>
</ul>
✅ สรุปฟีเจอร์ใหม่
- 🔑 เปลี่ยนรหัสผ่าน: ผู้ใช้สามารถเปลี่ยนรหัสผ่านเอง
- 🔐 รีเซ็ตรหัสผ่าน: กรณีลืมรหัสผ่าน ระบบจะสร้างรหัสผ่านใหม่อัตโนมัติ
- 🔒 เช็คสิทธิ์เข้าถึง: ป้องกันพนักงานเข้าถึงหน้าสำคัญของแอดมิน