[PHP从小白到大牛]-032 PHP-商城项目(八)

493 阅读1分钟

后台购物车信息展示

  • 因为需要计算商品总数和购物车总价, 所以sql语句会比较复杂
$sql = "SELECT
{$prefix}cart.id,
`{$prefix}user`.username,
`{$prefix}user`.id as 'userid',
{$prefix}cart.created_at,
{$prefix}product.price,
{$prefix}cart.product_count,
sum({$prefix}product.price*{$prefix}cart.product_count) as 'total_price',
sum({$prefix}cart.product_count) as 'total_count'
FROM
{$prefix}product
INNER JOIN {$prefix}cart ON {$prefix}cart.product_id = {$prefix}product.id
INNER JOIN `{$prefix}user` ON {$prefix}cart.user_id = `{$prefix}user`.id
GROUP BY username";

$cart_result = queryAll($sql);
  • 展示信息
<tbody>
    <?php foreach($cart_result as $cart): ?>
    <tr>
        <td> <?php echo $cart['userid']; ?> </td>
        <td> <?php echo $cart['username']; ?> </td>
        <td> <?php echo $cart['total_count']; ?> </td>
        <td> <?php echo $cart['total_price']; ?> </td>
        <td> <?php echo $cart['created_at']; ?> </td>
        <td> <a href="cart_del.php?id=<?php echo $cart['userid'];?> ">删除</a> </td>
    </tr>
    <?php endforeach; ?>
</tbody>

前台增加订单

D:\php20190701\php_code\0819-24\shop\backend\shop\checkout.php

  • 结算之前, 判断有没有登录, 如果没有登录, 跳转登录页面
if (!$current_user) {
	echo "<script>window.location.href = 'login.php';</script>";
}
  • 如果已经登录
    • 新增订单数据
    • 更新库存
    • 删除购物车数据
// 新增订单数据
$cart_str = serialize($cart_result);
$created_at = date('Y-m-d H:i:s');
$user_id = $current_user['id'];
$sql = 
<<<TOC
INSERT INTO `{$prefix}order`(`price`, `quantity`, `products`, `uid`, `created_at`) VALUES ($total_price, $total_count,'$cart_str',$user_id, '$created_at')
TOC;

$res1 = execute($sql);
// 更新库存
foreach ($cart_result as $key => $cart) {
	$proid = $cart['proid'];
	$product_count = $cart['product_count'];
	$old_stock = intval(queryOne("select stock from {$prefix}product where id = $proid")['stock']);
	$current_stock = $old_stock - intval($product_count);
	$sql = "update {$prefix}product set stock = $current_stock where id = $proid";
	$res2 = execute($sql);
}
// 删除购物车数据
$sql = "delete from {$prefix}cart where user_id = $user_id";
$res3 = execute($sql);
  • 判断执行结果, 输出信息
<?php if($res1 && $res2 && $res3): ?>
<h1 style="color: green;">支付成功!</h1>
<?php else: ?>
<h1 style="color: red;">支付失败!</h1>
<?php endif;?>

后台展示订单

D:\php20190701\php_code\0819-24\shop\backend\admin\orders.php

  • 查询订单数据
require_once '../db.func.php';
require_once '../tools.func.php';
$prefix = getDBPrefix();
$sql = "select * from `{$prefix}order` order by created_at desc";
$order_result = queryAll($sql);
foreach ($order_result as $key => $order) {
  $order_result[$key]['username'] = queryOne("select username from {$prefix}user where id = ".$order['uid'])['username'];
}
  • 展示数据
  <tbody>
  <?php foreach($order_result as $order):?>
  <tr>
    <td> <?php echo $order['id'] ?> </td>
    <td> <?php echo $order['username'] ?> </td>
    <td> <?php echo $order['price'] ?> </td>
    <td> <?php echo $order['created_at'] ?> </td>
  </tr>
  <?php endforeach;?>
  </tbody>