在之前的文章中,给大家介绍了sku商品管理,这一次给大家带来了关于商城团购的相关知识,其中主要介绍了怎么去设计表,怎么去原价购买,怎么设计团购的相关问题,下面一起来看一下,希望对大家有帮助。
代码下载链接:https://gitee.com/wang-boy326/groupbuy.git
提到商城,肯定绕不过商品表的,这次简单些,商品表包括商品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;
团购表顾名思义用于存储商品团购的相关数据,这次示例简单一点,包括团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即可
订单表简单些,用于存储价格、购买数量等等,建表语句如下
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;
首先我们创建商品购买的首页,用于展示商品的相关信息,以及购买入口
<!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>
这段代码用于展示产品列表,使用户可以查看产品信息,并通过不同的链接选择以原价购买产品或组团购买。
该页面用于展示单个产品的详细信息,并为用户提供购买该产品的界面。用户可以在此界面中选择购买数量并提交订单
<?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); ?>
如果产品信息查询成功并且产品库存足够(库存大于等于购买数量),则代码会执行以下操作:
计算订单的总金额,通过将产品的单价乘以购买数量获得。
插入订单数据到名为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 "无效的请求"; } ?>
上面的代码已经实现了原价购买,下面我们来看一下怎么实现团购购买
这段代码首先查询一些哪些没有满员的团,并且把没有满员的团显示出来以供用户选择
若没有可供选择的团,用户则可以创建一个新的团购
<!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>
这段代码用于显示可参与的团购列表。它首先尝试标记已经人数已满的团,然后查询与指定产品相关的未满员的团购信息,并将这些信息显示在页面上。如果没有找到未满员的团购信息,用户可以选择创建新的团购。
这段代码就简单些,没有团,就在数据表中添加一个团数据即可
<?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); ?>
这段代码主要是根据传来的数据,展示用户选择的团的价格、人数、库存等信息,并购买
代码如下
<?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中实现
这段代码则是查询产品信息,然后更新产品的库存,更新成团人数
<?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 "无效的请求"; } ?>
这段代码用于处理用户提交的成团团购订单。它会检查产品是否存在,库存是否足够,然后创建订单并更新库存和成团团购的现有人数。根据成团情况,它会输出不同的消息,包括等待团购成团后发货的提示。
1476浏览 2023-09-11
358浏览 2023-09-07
340浏览 2023-09-28
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
请在支付页面继续完成支付