session实现购物车功能
购物车功能是生活中经常使用的,这里以fruit表为例,做一个简单的购物车:
首先要将fruit表显示出来:
<?php session_start();?> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>名称</td> <td>单价</td> <td>产地</td> <td>库存</td> <td>操作</td> </tr> <?php require "DBDA.class.php"; $db = new DBDA(); $sql = "select * from fruit"; $arr= $db->query($sql); foreach($arr as $v) { echo "<tr> <td>{$v[0]}</td> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td><a href='shengchan.php?ids={$v[0]}'>加入购物车</a></td> </tr>"; } </table>
然后是重点,在处理页面,要有一个购物车的逻辑思维:
如果是第一次添加购物车,造一个二维数组存到SESSION里面
如果不是第一次添加,有两种情况
1.如果该商品购物车里面不存在,造一个一维数组扔到二维里面
2.如果该商品在购物车存在,让数量加1
<?php session_start(); $ids = $_GET["ids"]; //array('k001',2) //array(array('k001',2),array('k002',1)) //如果是第一次添加购物车,造一个二维数组存到SESSION里面 //如果不是第一次添加,有两种情况 //1.如果该商品购物车里面不存在,造一个一维数组扔到二维里面 //2.如果该商品在购物车存在,让数量加1 if(empty($_SESSION["gwc"])) { $arr=array(array($ids,1)); $_SESSION["gwc"]=$arr; } else { $arr = $_SESSION["gwc"]; $bs=false;//是否出现 foreach($arr as $v) { if($v[0]==$ids) { $bs = true; } } if($bs) { //2.如果该商品在购物车存在,让数量加1 foreach($arr as $k=>$v) { if($v[0] == $ids) { $arr[$k][1]++; } } $_SESSION["gwc"] = $arr; } else { //1.如果该商品购物车里面不存在,造一个一维数组扔到二维里面 $attr = array($ids,1); $arr[] = $attr; $_SESSION["gwc"] = $arr; } } header("location:list.php");
然后再创建购物车查看页面:
<table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>名称</td> <td>单价</td> <td>数量</td> <td>操作</td> </tr> <?php session_start(); $arr = $_SESSION["gwc"]; require "DBDA.class.php"; $db= new DBDA(); $sum= 0; foreach($arr as $k=>$v) { $v[0]; $v[1]; $sql = "select * from fruit where ids='{$v[0]}'"; $af = $db->query($sql); echo "<tr> <td>{$v[0]}</td> <td>{$af[0][1]}</td> <td>{$af[0][2]}</td> <td>{$v[1]}</td> <td><a href='shanchu.php?sy={$k}'>删除</a></td> </tr>"; $sum = $sum +$v[1]*$af[0][2];//输出总价格 } ?> </table> <div> <?php $gs = count($arr);//购物车里面有几个商品 echo "该购物车里面总共有{$gs}种商品,商品的总价为:{$sum}元"; ?>
最后是删除商品页面:
<?php session_start(); $sy = $_GET["sy"]; //如果该水果数量大于1,减1 //如果该水果数量等于1 移除 $arr = $_SESSION["gwc"]; if($arr[$sy][1]>1) { //如果该水果数量大于1,减1 $arr[$sy][1]--; } else { unset($arr[$sy]); $arr = array_values($arr); } $_SESSION["gwc"] = $arr; header("location:kan.php");