欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

购物车结算add_to_order.php

程序员文章站 2022-04-29 18:49:48
实现结算。从购物车页面的点击结算按钮到写入session['order']数组,接下一步就是在订单页面展示订单详情。 ......
<?php
session_start();
include_once("db.class.php"); 

    //接受并解析前端传过来的json,转换成数组。
    $goods_list =$_post['order'];
    $goods_list= json_decode($goods_list, true);
        
        //1.获取session信息
        $arr = $_session['gwc'];
        //获得订单数组
        $item_list = $goods_list['order'];

        //一维实现,每次先清空订单。
        $order = '';
        
        //把商品信息存到订单,并且把他们从购物车中删除
        foreach($item_list as $k=> $item){
            
                //把商品信息存到订单
                $order[$k] = $arr[$k];

                //把商品信息从购物车中删除
                unset($arr[$k]);

                
        }

        //更新购车的商品信息
        if(!empty($arr)){
            $_session['gwc'] = $arr;
        }else{
            $_session['gwc'] = '';
        }
        
            //最后将订单信息存到session
            $_session['order'] = $order;
        
        
        // var_dump($_session);
        // die();    
        echo "ok";
        exit;

?>

业务逻辑

  • 从购物车中点击结算,即是把商品信息从购物车中转移到订单中。
  • 技术点:接受的方式是json。要先在前台以json的形式传过来,这里再把它解析为数组,再运用。

购物车页面的结算按钮注册点击事件(需要引入jquery文件)

$('#jiesuan').click( function(){
        //间接设置订单金额
        var j = $('.total_text').text();
        // 去除¥符号
        var order_toal = j.substring(1);
        //将标签的值赋给input传过去
        $("#order_total").val(order_toal);
        //用插件将表单生成json,在ajax发送过去后台
            var serializeobj=$('#form1').serializejson();
var serializestr=json.stringify(serializeobj);
console.log(serializestr);
$.ajax({
      cache: false,
      type: "post",
      url : "add_to_order.php",
      traditional:true,  
      data: {order : serializestr}, //注意这里的写法,键为order
      success: function(msg){
        if(msg=="ok"){
        
            alert("下单成功");
           // location.reload();
           //window.location.href='order.php';
        }else{
            alert(msg);
            alert("下单失败");
        }
      }
    });

 这是表单中的一部分,展示如何把选中的商品传过去。关键在于checbox键值设置:在foreache循环中,所以键值得有变量混合进去。(仅展示代码,复制有样式问题)

<!-- 1.遍历店铺,查看有多少商品并遍历。-->
            <div class="shop_info">
                <div class="all_check">
                    <!--店铺全选-->
                    <input type='checkbox' id='shop_a' class='shopchoice'>
                        
                        <label for='shop_a' class='shop'></label>
                    
                </div>
                <div class="shop_name">
                    店铺:<a href="javascript:;">蜜食专家</a>
                </div>
            </div>

            <?php
            session_start();
            include_once("db.class.php");

            
            if(isset($_session['gwc'])&&!empty($_session['gwc'])){
            $arr2 = $_session['gwc'];
            foreach($arr2 as $k1=> $arr){

                $goods_id = $arr['goods_id'];
                $sql="select * from tb_goods where id=$goods_id";
                $goods = $dao->getrow($sql);

                $goods_num = $arr['num'];
            
                $sum = $goods['price']*$goods_num;
                

            ?>
            <div class="order_content">
            <!-- 最低应该在这里开始遍历,有分割线 -->

             
            
                <!-- 利用上面的php变量,遍历一个商品或sku -->
                <ul class="order_lists">

                    <li class="list_chk">
                    <!-- 每个复选框的值存她的商品id或sku_id -->
                    <?php echo "<input type='checkbox' id='checkbox_$goods_id' name='order[$goods_id]' value='$goods_id' class='son_check'>"; ?>

                        <!-- 打勾对应文本框的id -->
                        <?php echo "<label for='checkbox_$goods_id'></label>"; ?>
                    </li>
                    <li class="list_con">
                        <div class="list_img"><a href="javascript:;">
                        <?php echo "<img src='./images/$goods[img]' alt=''>";?>
                        </a></div>
                        <div class="list_text"><a href="javascript:;"><?php echo "$goods[goodsname]"; ?></a></div>
                    </li>
                    <li class="list_info">
                        <p>规格:默认</p>
                        
                    </li>
                    <li class="list_price">
                        <p class="price"><?php echo '¥'."$goods[price]"; ?></p>
                        
                        <?php echo "<input type='hidden'  value='$goods[price]'>"; ?>
                    </li>
                    <li class="list_amount">
                        <div class="amount_box">
                        <!-- 对商品的数量进行加减 -->
                        <?php echo "<a href='change_number.php?goods_id=$goods_id&choice=jian' class='reduce resty'>-</a> "; ?>
                            <!-- 数量,要从session或数据库中查出来 -->
                            <?php echo "<input type='text' value='$goods_num' class='sum'>"; ?>
                            
                            <?php echo "<a href='change_number.php?goods_id=$goods_id&choice=jia' class='plus'>+</a> "; ?>
                            <?php echo "<input type='hidden'  value='$goods[number]'>"; ?>
                            
                        </div>
                    </li>
                    <li class="list_sum">
                        <p class="sum_price"><?php echo '¥'."$sum"; ?></p>
                    </li>
                    <li class="list_op">
                        <p class="del">
                        <?php echo "<a href='delete_goods.php?goods_id=$goods_id' class='delbtn'>删除宝贝</a> "; ?></p>
                    </li>
                </ul>
                
        
            </div>
            <?php }}

                    else{
                        echo "<h1 style='margin-top:150px;text-align:center;font-size: 39px;color:#c18e2cdb;'>兄
                        dei,你的购物车只剩下尊严了!!!</h1>";
                    }
                 ?>

购物车结算add_to_order.php

 


 注意事项

可以给商品的checkbox类型添加name属性是因为他有selected属性,而其他像hidden类型的不能给它name属性,否则也会提交到后台。要保持提交过去的数据不能有冗余,需要遍历。

而且添加到订单也只需商品id就行,订单的商品数量可以在根据key在gwc中获得。具体看add_to_order.php.