購物車結算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;

?>

業務邏輯javascript

  • 從購物車中點擊結算,便是把商品信息從購物車中轉移到訂單中。
  • 技術點:接受的方式是json。要先在前臺以json的形式傳過來,這裏再把它解析爲數組,再運用。

購物車頁面的結算按鈕註冊點擊事件(須要引入jquery文件)php

$('#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屬性,不然也會提交到後臺。要保持提交過去的數據不能有冗餘,須要遍歷。java

並且添加到訂單也只需商品id就行,訂單的商品數量能夠在根據key在gwc中得到。具體看add_to_order.php.jquery

相關文章
相關標籤/搜索