当前位置:首页 > 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
$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注入、用户认证等。

PHP点餐功能实现代码

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

相关文章

vue实现收货功能

vue实现收货功能

实现收货功能的基本思路 在Vue中实现收货功能通常涉及前端界面交互、后端API调用以及状态管理。以下是关键步骤和代码示例: 页面布局与数据绑定 使用Vue的模板语法构建收货表单,包含收货人、联系方…

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION可…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

h5实现手机摇一摇功能

h5实现手机摇一摇功能

实现原理 手机摇一摇功能基于设备加速度传感器(DeviceMotionEvent),通过监听设备的加速度变化来判断用户是否进行了摇晃动作。HTML5提供了相关API获取设备传感器数据。 基本…

vue 实现多选功能

vue 实现多选功能

Vue 实现多选功能的方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选功能。适用于复选框组(checkbox)或下拉多选(select multi…

vue实现分类功能

vue实现分类功能

实现分类功能的基本思路 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。核心步骤包括准备分类数据、设计组件结构、实现分类切换逻辑。 数据准备与分组 分类功能的基础是将原始数据按特定规则分…