zoukankan      html  css  js  c++  java
  • 使用session存储,购物车结算add_to_order.php(学生笔记)

    <?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;
    
    ?>

    注:例子中是使用的工具类代码DB.class.php要在https://www.cnblogs.com/mzzone/p/10911891.html

    业务逻辑

    • 从购物车中点击结算,即是把商品信息从购物车中转移到订单中。
    • 技术点:接受的方式是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>";
                        }
                     ?>

    
    

     注意事项

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

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

  • 相关阅读:
    14、python基础
    13、Python入门
    12、运算符、流程控制
    10、Linux(六)
    Windows 分层窗口 桌面上透明 Direct3D
    Windows 进程间通信 共享内存
    Linux 库的使用
    FFmpeg 命令行
    FFmpeg 摄像头采集
    FFmpeg input与output 函数流程
  • 原文地址:https://www.cnblogs.com/mzzone/p/11027422.html
Copyright © 2011-2022 走看看