当前位置:首页 > PHP

PHP点餐功能实现代码

2026-01-29 07:48:37PHP

数据库设计

创建数据库表存储菜品信息、订单信息和用户信息。菜品表包含菜品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点餐功能实现代码

<?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
        ];
    }
}

订单提交处理

创建订单提交页面,处理用户信息收集和订单创建。将购物车内容转换为订单条目并存入数据库。

PHP点餐功能实现代码

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注入、用户认证等。

标签: 代码功能
分享给朋友:

相关文章

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

vue的艾特功能实现

vue的艾特功能实现

Vue 中的 @ 功能实现 Vue 中的 @ 符号是 v-on 指令的简写,用于绑定事件监听器。以下是具体实现方式: 基本语法 <button @click="handleClick">…

vue实现功能

vue实现功能

Vue 实现功能的方法 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是几种常见的功能实现方法: 数据绑定 Vue 提供了双向数据绑定,可以通过 v-model 指令实现表单输入和应用状…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…