PHP点餐功能实现代码
数据库设计
创建数据库表存储菜品信息、订单信息和用户信息。菜品表包含菜品ID、名称、价格、描述等字段。订单表包含订单ID、用户ID、订单状态、总价等字段。用户表存储用户基本信息。
CREATE TABLE dishes (
dish_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
description TEXT,
image_url VARCHAR(255)
);
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
total_price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE order_items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
dish_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL
);
菜品展示页面
创建菜品列表页面,从数据库获取菜品信息并展示。使用HTML和PHP混合编写,每道菜品显示图片、名称、价格和加入购物车按钮。
<?php
$conn = new mysqli('localhost', 'username', 'password', 'restaurant');
$query = "SELECT * FROM dishes";
$result = $conn->query($query);
?>
<div class="menu-container">
<?php while($dish = $result->fetch_assoc()): ?>
<div class="dish-item">
<img src="<?php echo $dish['image_url']; ?>" alt="<?php echo $dish['name']; ?>">
<h3><?php echo $dish['name']; ?></h3>
<p><?php echo $dish['description']; ?></p>
<span class="price">¥<?php echo $dish['price']; ?></span>
<button class="add-to-cart" data-dish-id="<?php echo $dish['dish_id']; ?>">加入购物车</button>
</div>
<?php endwhile; ?>
</div>
购物车功能
使用session存储购物车信息,实现添加菜品、删除菜品、修改数量等功能。创建购物车处理逻辑和显示界面。
session_start();
// 添加菜品到购物车
if(isset($_POST['add_to_cart'])) {
$dish_id = $_POST['dish_id'];
$quantity = $_POST['quantity'] ?? 1;
if(!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if(isset($_SESSION['cart'][$dish_id])) {
$_SESSION['cart'][$dish_id] += $quantity;
} else {
$_SESSION['cart'][$dish_id] = $quantity;
}
}
// 购物车页面显示
$cart_items = [];
$total = 0;
if(isset($_SESSION['cart']) && !empty($_SESSION['cart'])) {
$dish_ids = array_keys($_SESSION['cart']);
$ids = implode(',', $dish_ids);
$query = "SELECT * FROM dishes WHERE dish_id IN ($ids)";
$result = $conn->query($query);
while($dish = $result->fetch_assoc()) {
$quantity = $_SESSION['cart'][$dish['dish_id']];
$subtotal = $dish['price'] * $quantity;
$total += $subtotal;
$cart_items[] = [
'dish' => $dish,
'quantity' => $quantity,
'subtotal' => $subtotal
];
}
}
订单提交处理
创建订单提交页面,处理用户信息收集和订单创建。将购物车内容转换为订单条目并存入数据库。
if(isset($_POST['submit_order'])) {
$user_id = $_SESSION['user_id']; // 假设用户已登录
$total_price = $_POST['total_price'];
// 创建订单
$query = "INSERT INTO orders (user_id, total_price) VALUES (?, ?)";
$stmt = $conn->prepare($query);
$stmt->bind_param("id", $user_id, $total_price);
$stmt->execute();
$order_id = $stmt->insert_id;
// 添加订单项
foreach($_SESSION['cart'] as $dish_id => $quantity) {
$dish_query = "SELECT price FROM dishes WHERE dish_id = ?";
$dish_stmt = $conn->prepare($dish_query);
$dish_stmt->bind_param("i", $dish_id);
$dish_stmt->execute();
$dish_result = $dish_stmt->get_result();
$dish = $dish_result->fetch_assoc();
$item_query = "INSERT INTO order_items (order_id, dish_id, quantity, price) VALUES (?, ?, ?, ?)";
$item_stmt = $conn->prepare($item_query);
$item_stmt->bind_param("iiid", $order_id, $dish_id, $quantity, $dish['price']);
$item_stmt->execute();
}
// 清空购物车
unset($_SESSION['cart']);
header("Location: order_confirmation.php?order_id=$order_id");
}
订单确认页面
显示订单确认信息,包括订单号、购买菜品清单和总价。提供返回主页或查看订单历史选项。
$order_id = $_GET['order_id'];
$query = "SELECT o.*, d.name, oi.quantity, oi.price
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
JOIN dishes d ON oi.dish_id = d.dish_id
WHERE o.order_id = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $order_id);
$stmt->execute();
$result = $stmt->get_result();
$order_items = $result->fetch_all(MYSQLI_ASSOC);
后台管理功能
创建管理员界面,用于查看和处理订单、管理菜品。实现订单状态更新和菜品增删改查功能。
// 更新订单状态
if(isset($_POST['update_status'])) {
$order_id = $_POST['order_id'];
$new_status = $_POST['status'];
$query = "UPDATE orders SET status = ? WHERE order_id = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("si", $new_status, $order_id);
$stmt->execute();
}
// 添加新菜品
if(isset($_POST['add_dish'])) {
$name = $_POST['name'];
$price = $_POST['price'];
$description = $_POST['description'];
// 处理图片上传
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
move_uploaded_file($_FILES["image"]["tmp_name"], $target_file);
$query = "INSERT INTO dishes (name, price, description, image_url) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($query);
$stmt->bind_param("sdss", $name, $price, $description, $target_file);
$stmt->execute();
}
以上代码实现了基本的PHP点餐系统功能,包括菜品展示、购物车管理、订单处理和后台管理。实际应用中需要添加更多安全措施,如输入验证、防止SQL注入、用户认证等。







