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");

 

posted @ 2017-05-08 21:52  雾若晨曦  阅读(7814)  评论(0编辑  收藏  举报