session应用之购物车的实现
现在网页中的购物车功能的实现都是依赖的数据库,相比之下,以前是依赖服务器端的session来储存。今天来讲一下session实现购物车的逻辑。
用一张水果信息表为例子来演示。
1.首先我们写出来水果列表
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>无标题文档</title> 6 </head> 7 8 <body> 9 <h1>水果列表</h1> 10 11 <?php 12 session_start(); 13 14 ?> 15 16 <table width="50%" border="1" cellpadding="0" cellspacing="0"> 17 <tr> 18 <td>代号</td> 19 <td>名称</td> 20 <td>单价</td> 21 <td>产地</td> 22 <td>库存</td> 23 <td>操作</td> 24 </tr> 25 26 <?php 27 require "DataBase.class.php"; 28 $db = new DateBase(); 29 $sql = "select * from fruit"; 30 $arr = $db->query($sql); 31 foreach($arr as $v) 32 { 33 echo "<tr> 34 <td>{$v[0]}</td> 35 <td>{$v[1]}</td> 36 <td>{$v[2]}</td> 37 <td>{$v[3]}</td> 38 <td>{$v[4]}</td> 39 <td><a href='gwc_chuli.php?ids={$v[0]}'>加入购物车</a></td> 40 </tr>"; 41 } 42 ?> 43 </table> 44 45 46 </body> 47 </html>
看一下效果图
2.下面,我们来实现一下处理购物车的页面
1 <?php 2 session_start(); 3 //取到传过来的主键值,并且添加到购物车的SESSION里面 4 $ids = $_GET["ids"]; 5 6 7 8 //如果是第一次添加购物车,造一个二维数组存到SESSION里面 9 //如果不是第一次添加,有两种情况 10 //1.如果该商品购物车里面不存在,造一个一维数组扔到二维里面 11 //2.如果该商品在购物车存在,让数量加1 12 13 if(empty($_SESSION["gwc"])) 14 { 15 //如果是第一次添加购物车,造一个二维数组存到SESSION里面 16 $arr = array( 17 array($ids,1) 18 ); 19 20 $_SESSION["gwc"] = $arr; 21 } 22 else 23 { 24 $arr = $_SESSION["gwc"]; 25 $bs = false; //是否出现 26 foreach($arr as $v) 27 { 28 if($v[0]==$ids) 29 { 30 $bs = true; 31 } 32 } 33 34 if($bs) 35 { 36 //2.如果该商品在购物车存在,让数量加1 37 foreach($arr as $k=>$v) 38 { 39 if($v[0] == $ids) 40 { 41 $arr[$k][1]++; //这里我们用一个变量K来取值和赋值,因为只是取到的值给了$v来代表数组的值,其实数组的值并不会因为$v改变二改变 42 } 43 } 44 $_SESSION["gwc"] = $arr; 45 46 } 47 else 48 { 49 //1.如果该商品购物车里面不存在,造一个一维数组扔到二维里面 50 $attr = array($ids,1); 51 $arr[] = $attr; 52 $_SESSION["gwc"] = $arr; 53 } 54 } 55 56 header("location:gwc_list.php");//回到列表的界面
3.写出查看购物车的界面
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>无标题文档</title> 6 </head> 7 8 <body> 9 <h1>查看购物车</h1> 10 <table width="100%" border="1" cellpadding="0" cellspacing="0"> 11 <tr> 12 <td>代号</td> 13 <td>名称</td> 14 <td>单价</td> 15 <td>数量</td> 16 <td>操作</td> 17 </tr> 18 19 <?php 20 session_start(); 21 $arr = $_SESSION["gwc"]; 22 require "DataBase.class.php"; 23 $db = new DateBase(); 24 25 $sum = 0; 26 foreach($arr as $k=>$v) 27 { 28 $v[0]; $v[1]; 29 $sql = "select * from fruit where ids='{$v[0]}'"; 30 $af = $db->query($sql); 31 32 echo "<tr> 33 <td>{$v[0]}</td> 34 <td>{$af[0][1]}</td> 35 <td>{$af[0][2]}</td> 36 <td>{$v[1]}</td> 37 <td><a href='gwc_del.php?sy={$k}'>删除</a></td> 38 </tr>"; 39 $sum = $sum +$v[1]*$af[0][2]; 40 } 41 42 ?> 43 44 </table> 45 <div> 46 <?php 47 $gs = count($arr);//购物车里面有几个商品 48 49 echo "该购物车里面总共有{$gs}种商品,商品的总价为:{$sum}元"; 50 51 ?> 52 </div> 53 </body> 54 </html>
看看效果如下
4.最后一个页面,删除
1 <?php 2 session_start(); 3 $sy = $_GET["sy"]; 4 5 //如果该水果数量大于1,减1 6 //如果该水果数量等于1 移除 7 $arr = $_SESSION["gwc"]; 8 9 if($arr[$sy][1]>1) 10 { 11 //如果该水果数量大于1,减1 12 $arr[$sy][1]--; 13 } 14 else 15 { 16 unset($arr[$sy]); 17 $arr = array_values($arr); 18 } 19 20 $_SESSION["gwc"] = $arr; 21 header("location:gwc_chakan.php");