登录  /  注册

PHP小示例:商城团购

WBOY
2023-09-18 17:49:03 186

在之前的文章中,给大家介绍了sku商品管理,这一次给大家带来了关于商城团购的相关知识,其中主要介绍了怎么去设计表,怎么去原价购买,怎么设计团购的相关问题,下面一起来看一下,希望对大家有帮助。

0、完整代码

代码下载链接:https://gitee.com/wang-boy326/groupbuy.git

一、设计表

商品表products

提到商城,肯定绕不过商品表的,这次简单些,商品表包括商品id、商品名称、价格、团购价格、库存

建表语句如下

CREATE TABLE `products` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `groupprice` varchar(200) NOT NULL,
  `quantity` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

团购表group

团购表顾名思义用于存储商品团购的相关数据,这次示例简单一点,包括团id、商品id、团购人数、现人数以及团购状态

建表语句如下

CREATE TABLE `group` (
  `id` int(11) NOT NULL,
  `product_id` varchar(200) NOT NULL,
  `groupnum` varchar(200) NOT NULL,
  `groupnumnow` varchar(200) NOT NULL,
  `stat` enum('0','1') NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其中需要注意的是stat字段是枚举,默认是0,表示人数未满,未成团,当人数满时再更改为1即可

订单表group_buy_orders

订单表简单些,用于存储价格、购买数量等等,建表语句如下

CREATE TABLE `group_buy_orders` (
  `id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `user_name` varchar(255) NOT NULL,
  `quantity` int(11) NOT NULL,
  `total` decimal(10,2) NOT NULL,
  `order_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、原价购买

index.php

首先我们创建商品购买的首页,用于展示商品的相关信息,以及购买入口

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>商城团购</title>
</head>
<body>
    <h1>产品列表</h1>
    <table>
        <tr>
            <th>产品名称</th>
            <th>原价</th>
            <th>团购价格</th>
            <th>库存</th>
            <th>操作</th>
            <th>更多操作</th>
        </tr>
        <?php
        // 连接到MySQL数据库
        $conn = mysqli_connect("localhost", "root", "root", "groupbuy");
        // 查询产品列表
        $query = "SELECT * FROM products";
        $result = mysqli_query($conn, $query);
        // 将商品展示出来
        while ($row = mysqli_fetch_assoc($result)) {
            echo "<tr>";
            echo "<td>" . $row['name'] . "</td>";
            echo "<td>$" . $row['price'] . "</td>";
            echo "<td>$" . $row['groupprice'] . "</td>";
            echo "<td>" . $row['quantity'] . "</td>";
            // 点击购买传到buy.php界面,原价直接购买
            echo "<td><a href='buy.php?id=" . $row['id'] . "'>购买</a></td>";
            // 点击组团购买,进入group_buy_choose.php界面,选择或者创建团购
            echo "<td><a href='group_buy_choose.php?id=" . $row['id'] . "'>组团购买</a></td>";
            echo "</tr>";
        }
        // 关闭数据库连接
        mysqli_close($conn);
        ?>
    </table>
</body>
</html>

这段代码用于展示产品列表,使用户可以查看产品信息,并通过不同的链接选择以原价购买产品或组团购买。

buy.php

该页面用于展示单个产品的详细信息,并为用户提供购买该产品的界面。用户可以在此界面中选择购买数量并提交订单

<?php
// 连接到MySQL数据库
$conn = mysqli_connect("localhost", "root", "root", "groupbuy");
if ($_SERVER["REQUEST_METHOD"] == "GET" && isset($_GET['id'])) {
    $product_id = $_GET['id'];
    // 查询选定的产品信息
    $query = "SELECT * FROM products WHERE id = $product_id";
    $result = mysqli_query($conn, $query);
    $product = mysqli_fetch_assoc($result);
    if ($product) {
        ?>
        <!DOCTYPE html>
        <html>
        <head>
            <title>购买产品</title>
        </head>
        <body>
            <h1>购买产品</h1>
            <!-- 通过查询将产品信息显示出来,点击购买传到process_order.php,更改数据库信息 -->
            <form method="post" action="process_order.php">
                <input type="hidden" name="product_id" value="<?php echo $product['id']; ?>">
                <label>产品名称: <?php echo $product['name']; ?></label><br>
                <label>价格: $<?php echo $product['price']; ?></label><br>
                <label>库存: <?php echo $product['quantity']; ?></label><br>
                <label>购买数量: <input type="number" name="quantity" required></label><br>
                <input type="submit" value="购买">
            </form>
        </body>
        </html>
        <?php
    } else {
        echo "产品不存在";
    }
} else {
    echo "无效的请求";
}
// 关闭数据库连接
mysqli_close($conn);
?>

process_order.php

如果产品信息查询成功并且产品库存足够(库存大于等于购买数量),则代码会执行以下操作:

计算订单的总金额,通过将产品的单价乘以购买数量获得。

插入订单数据到名为group_buy_orders的数据库表中,包括产品ID、用户名称、购买数量、订单总金额和订单日期(使用NOW()获取当前日期和时间)。

更新产品库存,减去已购买的数量。

输出订单成功下单的消息,并显示订单的总金额。

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['product_id']) && isset($_POST['quantity'])) {
    // 连接到MySQL数据库
    $conn = mysqli_connect("localhost", "root", "root", "groupbuy");
// 获取传值
    $product_id = $_POST['product_id'];
    $quantity = $_POST['quantity'];
    // 查询产品信息
    $query = "SELECT * FROM products WHERE id = $product_id";
    $result = mysqli_query($conn, $query);
    $product = mysqli_fetch_assoc($result);
    if ($product && $product['quantity'] >= $quantity) {
        // 计算订单总金额
        $total = $product['price'] * $quantity;
        // 插入订单数据
        $insert_query = "INSERT INTO group_buy_orders (product_id, user_name, quantity, total, order_date) VALUES ($product_id, '用户名', $quantity, $total, NOW())";
        mysqli_query($conn, $insert_query);
        // 更新产品库存
        $new_quantity = $product['quantity'] - $quantity;
        $update_query = "UPDATE products SET quantity = $new_quantity WHERE id = $product_id";
        mysqli_query($conn, $update_query);
        echo "订单已成功下单!总金额$total";
    } else {
        echo "购买失败:库存不足。";
    }
    // 关闭数据库连接
    mysqli_close($conn);
} else {
    echo "无效的请求";
}
?>

三、团购折扣购买

上面的代码已经实现了原价购买,下面我们来看一下怎么实现团购购买

group_buy_choose.php

这段代码首先查询一些哪些没有满员的团,并且把没有满员的团显示出来以供用户选择

若没有可供选择的团,用户则可以创建一个新的团购

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>可参与的团购</h2>
    <ul>
    <?php
    // 创建数据库连接
    $conn = new mysqli("localhost", "root", "root", "groupbuy");
    // 检查连接是否成功
    if ($conn->connect_error) {
        die("数据库连接失败: " . $conn->connect_error);
    }
// 查询组团表,将已经人数已经满的团筛选出来,也就是将满员团的stat设置成1
    $sqlgroup = "SELECT * FROM `group`";
    $result = mysqli_query($conn, $sqlgroup);
    $product = mysqli_fetch_assoc($result);
    $sqlstat = "UPDATE `group` SET stat = '1' WHERE groupnum = groupnumnow";
    $conn->query($sqlstat);
    // 定义 $product_id
    $product_id = $_GET['id'];
// 查询没有满员的团,并将没有满员的团显示出来
    $sql = "SELECT * FROM `group` WHERE product_id = $product_id AND stat = '0'";
    // 执行 SQL 查询
    $resultgroup = $conn->query($sql);
    if ($resultgroup->num_rows > 0) {
        while ($row = $resultgroup->fetch_assoc()) {
    ?>
            <li>
                <p>团购人数: <?php echo $row["groupnum"]; ?></p>
                <p>现人数: <?php echo $row["groupnumnow"]; ?></p>
                <!-- 点击参与团购进入团购价格界面 -->
                <a href="group_buy.php?id=<?php echo $row["id"]; ?>">参与团购</a>
            </li>
    <?php
        }
    } else {
        echo "暂无团购信息";
           
        // 没有团购则可以创建团购
        echo '<a href="group_add.php?id=' . $product_id . '">创建团购</a>';
    }
    // 关闭数据库连接
    $conn->close();
    ?>
    </ul>
</body>
</html>

这段代码用于显示可参与的团购列表。它首先尝试标记已经人数已满的团,然后查询与指定产品相关的未满员的团购信息,并将这些信息显示在页面上。如果没有找到未满员的团购信息,用户可以选择创建新的团购。

group_add.php

这段代码就简单些,没有团,就在数据表中添加一个团数据即可

<?php
    // 连接到MySQL数据库
    $conn = mysqli_connect("localhost", "root", "root", "groupbuy");
    $product_id = $_GET['id'];
    // 查询产品信息
        // 插入订单数据
        $insert_query = "INSERT INTO `group` (id, product_id, groupnum, groupnumnow) VALUES (NULL, $product_id, 3, 1)";
        $conn->query($insert_query);
        echo '团购已成功创建!请返回<a href="group_buy_choose.php?id='.$product_id.'">创建团购</a>下单';
    // 关闭数据库连接
    mysqli_close($conn);
?>

group_buy.php

这段代码主要是根据传来的数据,展示用户选择的团的价格、人数、库存等信息,并购买

代码如下

<?php
// 连接到MySQL数据库
$conn = mysqli_connect("localhost", "root", "root", "groupbuy");
if ($_SERVER["REQUEST_METHOD"] == "GET" && isset($_GET['id'])) {
    $product_id = $_GET['id'];
// 查询指定产品id的成团表信息
    $sql = "SELECT * FROM `group` WHERE id = $product_id";
    $resultgroup = mysqli_query($conn, $sql);
    $productgroup = mysqli_fetch_assoc($resultgroup);
    $goodsid = $productgroup['product_id'];
    // 查询选定的产品表信息
    $query = "SELECT * FROM products WHERE id = $goodsid";
    $result = mysqli_query($conn, $query);
    $product = mysqli_fetch_assoc($result);
    if ($product) {
        ?>
        <!DOCTYPE html>
        <html>
        <head>
            <title>组团购买产品</title>
        </head>
        <body>
            <h1>组团购买产品</h1>
            <!-- 将成团团购的信息显示出来 -->
            <!-- 点击购买传到group_process_order,修改数据库信息 -->
            <form method="post" action="group_process_order.php">
                <input type="hidden" name="product_id" value="<?php echo $product['id']; ?>">
                <input type="hidden" name="group_id" value="<?php echo $productgroup['id']; ?>">
                <label>产品名称: <?php echo $product['name']; ?></label><br>
                <label>团购人数: <?php echo $productgroup['groupnum']; ?>人</label><br>
                <label>现人数: <?php echo $productgroup['groupnumnow']; ?>人</label><br>
                <label>团购价: $<?php echo $product['groupprice']; ?></label><br>
                <label>库存: <?php echo $product['quantity']; ?></label><br>
                <label>购买数量: <input type="number" name="quantity" required></label><br>
                <input type="submit" value="购买">
            </form>
            <?php
    } else {
        echo "产品不存在";
    }
} else {
    echo "无效的请求";
}
// 关闭数据库连接
mysqli_close($conn);
?>

这段代码用于显示成团团购产品的详细信息,并为用户提供购买该产品的界面。用户可以在此界面中选择购买数量并提交订单,而订单处理的逻辑通常在group_process_order.php中实现

group_process_order.php

这段代码则是查询产品信息,然后更新产品的库存,更新成团人数

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['product_id']) && isset($_POST['quantity'])) {
    // 连接到MySQL数据库
    $conn = mysqli_connect("localhost", "root", "root", "groupbuy");
    $product_id = $_POST['product_id'];
    $group_id = $_POST['group_id'];
    $quantity = $_POST['quantity'];
    // 查询产品信息
    $query = "SELECT * FROM products WHERE id = $product_id";
    $result = mysqli_query($conn, $query);
    $product = mysqli_fetch_assoc($result);
    // 查询成团表信息
    $sql = "SELECT * FROM `group` WHERE id = $group_id";
    $resultgroup = mysqli_query($conn, $sql);
    $productgroup = mysqli_fetch_assoc($resultgroup);
    if ($product && $product['quantity'] >= $quantity) {
        // 计算订单总金额
        $total = $product['groupprice'] * $quantity;
        // 插入订单数据
        $insert_query = "INSERT INTO group_buy_orders (product_id, user_name, quantity, total, order_date) VALUES ($product_id, '用户名', $quantity, $total, NOW())";
        mysqli_query($conn, $insert_query);
        // 更新产品库存
        $new_quantity = $product['quantity'] - $quantity;
        $update_query = "UPDATE products SET quantity = $new_quantity WHERE id = $product_id";
        mysqli_query($conn, $update_query);
        // 更新成团人数
        $new_groupnumnow = $productgroup['groupnumnow'] + 1;
        $update_new_groupnumnow = "UPDATE `group` SET groupnumnow = $new_groupnumnow WHERE id = $group_id";
        mysqli_query($conn, $update_new_groupnumnow);
       
        if($productgroup['groupnum'] == $new_groupnumnow){
            echo "订单已成功下单!总金额$total";
        }else{
            echo "订单已成功下单!总金额$total ,等待团购成团后发货";
        }
    } else {
        echo "购买失败:产品不存在或库存不足。";
    }
    // 关闭数据库连接
    mysqli_close($conn);
} else {
    echo "无效的请求";
}
?>

这段代码用于处理用户提交的成团团购订单。它会检查产品是否存在,库存是否足够,然后创建订单并更新库存和成团团购的现有人数。根据成团情况,它会输出不同的消息,包括等待团购成团后发货的提示。



WBOY
总阅读量:5341
关注

最近文章

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

等待您完成支付...

请在支付页面继续完成支付

支付完成
重新选择支付方式