运用session实现购物车的内容的存储,

数据库包含4个表分别为

  1.login表,每列代表用户名、姓名、密码、余额

  

  2.fruit表,每列代表主键自增长列、商品名称、商品单价、产地、堆数、库存

  

  3.orders表,每列代表订单编号、用户名、订单形成时间

  

  4.orderdetails表,每列代表主键自增长列、订单编号、商品编号、数量

  

 

共10个网页,功能有登录验证,防止绕过登录,购物车添加、删除、清除,查询账户,提交订单等

1.

  1. <!--这里是登录页面gwc-2-d.php,用于登录购物网站,登录成功会跳转到主页面gwc-1-zhu.php-->
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>无标题文档</title>
  7. <script src="../js/jquery-3.3.1.min.js"></script>
  8. </head>
  9.  
  10. <body>
  11. <h1>登录</h1>
  12. <!--以下分别是用户名栏,密码栏和登录按钮-->
  13. <div>用户名<input type="text" name="uid" id="uid"></div>
  14. <div>密码<input type="password" name="pwd" id="pwd"></div>
  15. <input type="submit" value="登录" id="dl">
  16. </body>
  17. <script type="text/javascript">
  18. $("#dl").click(function(){ //给登录按钮添加点击事件
  19. var uid = $("#uid").val(); //分别取出用户名栏和密码栏内填的内容
  20. var pwd = $("#pwd").val();
  21. $.ajax({
  22. url:"gwc-3-yan.php", //处理页面为gwc-3-yan.php
  23. type:"post", //传输方式为post
  24. dataType:"text", //传回格式为text
  25. data:{uid:uid,pwd:pwd}, //传输的数据为用户名栏和密码栏内填的内容
  26. success: function(e){ //回调函数判断执行结果,验证成功跳转到主页面,失败弹出提示
  27. if(e=="1"){
  28. window.location.href="gwc-1-zhu.php";
  29. }else if(e=="0"){
  30. alert("用户名或密码错误!");
  31. }
  32. }
  33. })
  34. })
  35. </script>
  36. </html>

 

2.

  1. <?php
  2. //这里是gwc-3-yan.php,是gwc-2-d.php的ajax的处理页面,用来验证用户名密码是否正确,正确返回1,错误返回0
  3. session_start(); //开启session
  4. require_once("../DBDA.class.php"); //引入数据库连接类
  5. $db = new DBDA();
  6. $uid = $_POST["uid"]; //取出传输的用户名栏和密码栏内填的内容
  7. $pwd = $_POST["pwd"];
  8. $sql = "select password from login where username = \'{$uid}\'"; //创建SQL语句,以传过来的用户名查询密码
  9. $mm = $db->strquery($sql); //以返回字符串方法执行SQL语句并用$mm接收
  10. if($pwd==$mm){ //判断传过来的密码和查询出来的密码是否相同
  11. $_SESSION["user"] = $uid; //相同说明验证成功,把用户名值赋予$_SESSION["user"]并返回1
  12. echo "1";
  13. }else{
  14. echo "0"; //不相同说明验证失败返回0
  15. }

 

3.

  1. <!--这里是主页面gwc-1-zhu.php,显示商品的具体信息-->
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>无标题文档</title>
  7. <script src="../js/jquery-3.3.1.min.js"></script>
  8. </head>
  9. <?php
  1. session_start(); //开启session
  2. if(empty($_SESSION["user"])){ //防止绕过登录访问
  3. header("location:gwc-2-d.php");
  4. exit;
  5. }
  1. ?>
  2. <body>
  3. <a href="gwc-1-zhu.php">查看商品</a> <!--查看商品跳转到自己-->
  4. <a href="gwc-9-chauser.php">查看账户</a><!--查看账户,跳转到gwc-9-chauser.php-->
  5. <a href="gwc-6-chagwc.php">查看购物车</a><!--查看购物车内容,跳转到gwc-6-chagwc.php-->
  6. <a href="gwc-5-qinggwc.php">清空购物车</a><!--清空购物车,跳转到处理页面gwc-5-qinggwc.php-->
  7. <a href="gwc-10-qing.php">退出</a><!--退出登录,跳转到处理页面gwc-10-qing.php-->
  8. <div id="xianshi"></div> <!--用于显示购物车中商品的种类数和总价-->
  9. <!--用于显示商品内容的表格-->
  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. <?php
  1. require_once("../DBDA.class.php"); //引用数据库连接类
  2. $db = new DBDA();
  3. $sql = "select * from fruit "; //创建SQL语句,查询水果表的所有内容
  4. $arr = $db->query($sql); //执行SQL语句并用$arr接收
  5. foreach($arr as $v){ //遍历并输出商品内容
  6. echo " <tr>
  7. <td>{$v[1]}</td>
  8. <td>{$v[2]}</td>
  9. <td>{$v[3]}</td>
  10. <td>{$v[5]}</td>
  11. <td><a ><input type=\'button\' class=\'tj\' code=\'{$v[0]}\' value=\'添加\'></a></td>
  12. </tr>";
  13. }
  1.   ?>
  2. </table>
  3. </body>
  4. <script type="text/javascript">
  5. var code = ""; //设置空的变量code
  6. jiaZai(); //执行jiaZai()方法
  7. /*
  8. jiaZai()方法用来实时显示购物车中商品的种类和总价格
  9. */
  10. function jiaZai(){
  11. $.ajax({
  12. url:"gwc-4-add.php", //处理页面是gwc-4-add.php
  13. data:{code:code}, //传值是code值
  14. dataType:"text", //传回的值的格式
  15. type:"POST", //传值方式为post
  16. success: function(e){ //回调函数,最终显示购物车中的商品数量和总价格
  17. var attr = e.split("|");
  18. var str = "选中了"+attr[0]+"种水果,价格共"+attr[1]+"元。" ;
  19. $("#xianshi").html(str);
  20. }
  21. })
  22. }
  23. $(".tj").click(function(){
  24. code = $(this).attr("code"); //给code赋值,值为点击的那栏商品的code值
  25. jiaZai();
  26. })
  27. </script>
  28. </html>

 

4.

  1. <?php
  2. //这里是gwc-4-add.php,是gwc-1-zhu.php的ajax的处理页面,用来把购物车内容传入session中并根据用户操作修改购物车的session,并且输出购物车中商品种类数和总价
  3. session_start(); //开启session
  4. require_once("../DBDA.class.php"); //引入数据库连接类
  5. $db = new DBDA();
  6. if(!empty($_POST["code"])){ //判断$_POST["code"]是否为非空,为空说明没有点击,非空执行之后的代码
  7. $code = $_POST["code"]; //接收code值
  8. if(empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否为空
  9. $arr = array(array($code,1)); //$_SESSION["gwc"]为空则创建一个二维数组,数组中包含的一个小数组是code值和数字1组成的,代表存入一个此商品
  10. $_SESSION["gwc"] = $arr; //将新建的数组赋予$_SESSION["gwc"]
  11. }else if(panDuan($_SESSION["gwc"],$code)){ //判断$_SESSION["gwc"]的数组中是否有包含含有code的数组
  12. $arr = $_SESSION["gwc"]; //如果有说明添加的商品已经存在于购物车中,将$_SESSION["gwc"]赋值给$arr
  13. foreach($arr as $k=>$v){ //遍历出此code的数组,将代表数量的数字加一,注意这里要取出此code所在数组的索引,以直接操作数组而不是代表值$v
  14. if($v[0]==$code){
  15. $arr[$k][1]++;
  16. }
  17. $_SESSION["gwc"] = $arr; //将修改后的二维数组重新赋值给$_SESSION["gwc"]
  18. }
  19. }else{ //判断出$_SESSION["gwc"]的数组中不包含含有code的数组
  20. $arr1 = array($code,1); //创建一个数组包含code和数字1,代表存入一个此商品
  21. $_SESSION["gwc"][] = $arr1;
  22. }
  23. }
  24. if(!empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否为非空,
  25. $arr = $_SESSION["gwc"]; //不为空则将$_SESSION["gwc"]交给$arr
  26. $count = count($arr); //取$arr的元素数量代表商品种类数
  27. $zj=0; //设$zj代表总价格
  28. foreach($arr as $v){ //遍历查询累加价格
  29. $sql = "select price from fruit where ids = \'{$v[0]}\'"; //创建SQL语句,查询商品单价
  30. $dj = $db->strquery($sql); //执行SQL语句把单价交给$dj
  31. $zj += $v[1]*$dj; //累加总价
  32. }
  33. echo "{$count}|{$zj}"; //输出返回值为 商品种类数|总价 格式
  34. }else{
  35. echo "0|0"; //购物车为空返回 0|0
  36. }
  37. /*
  38. *用来判断一个二维数组$arr中某个数组中是否包含某个元素$x
  39. *@param $arr 二维数组
  40. *@param $x 元素
  41. *@return 返回true或者false
  42. */
  43. function panDuan($arr,$x){
  44. $result = false;
  45. foreach($arr as $v){
  46. if($v[0]==$x){
  47. $result = true;
  48. }
  49. }
  50. return $result;
  51. }

 

5.

  1. <?php
  2. //这里是gwc-5-qinggwc.php,是gwc-1-zhu.php点击清空购物车后跳转过来的处理页面,用来清空购物车的session
  3. session_start(); //开启session
  4. unset($_SESSION["gwc"]); //清除购物车session
  5. header("location:gwc-1-zhu.php"); //跳转到主页面gwc-1-zhu.php

 

6.


  1. <!--这里是gwc-6-chagwc.php,是主页面gwc-1-zhu.php中点击查看购物车跳转过来的页面,可以显示购物车的具体内容,操作购物车内容(删除商品个数),显示选中商品的总价格,提交购物车内容形成订单-->
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>无标题文档</title>
  6. <script src="../js/jquery-3.3.1.min.js"></script>
  7. </head>
  8. <?php
  1. session_start(); //开启session
  2. if(empty($_SESSION["user"])){ //防止绕过登录访问
  3. header("location:gwc-2-d.php");
  4. exit;
  5. }
  6. require_once("../DBDA.class.php"); //引入数据库连接类
  7. $db = new DBDA();
  1. ?>
  2.  
  3. <body>
  4. <!--用于显示购物车的内容-->
  5. <table width="100%" border="1" cellpadding="0" cellspacing="0">
  6. <tr>
  7. <td>水果名称</td>
  8. <td>水果单价</td>
  9. <td>水果数量</td>
  10. <td>操作</td>
  11. </tr>
  12. <?php
  1. if(!empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否非空
  2. $arr = $_SESSION["gwc"]; //非空将$_SESSION["gwc"]交给$arr
  3. foreach($arr as $v){ //遍历数组
  4. $sql = "select name,price from fruit where ids = \'{$v[0]}\'";//创建SQL语句,查询商品名和单价
  5. $arr1 = $db->query($sql); //执行SQL语句并用数组接收
  6. echo "<tr>
  7. <td>{$arr1[0][0]}</td>
  8. <td>{$arr1[0][1]}</td>
  9. <td>{$v[1]}</td>
  10. <td><input type=\'button\' class=\'sc\' code=\'{$v[0]}\' value=\'删除\'></td>
  11. </tr>"; //输出表格,包括商品名,单价,选中数量,操作按钮,操作按钮中包含自定义属性code,值为商品的主键值
  12. }
  13. $zj=0; //设$zj代表总价格
  14. foreach($arr as $v){ //遍历查询累加总价
  15. $sql = "select price from fruit where ids = \'{$v[0]}\'";
  16. $dj = $db->strquery($sql);
  17. $zj += $v[1]*$dj;
  18. }
  19. echo "<div>总计{$zj}元</div>"; //输出总价
  20. }
  1. ?>
  2. </table>
  3. <input type="button" value="提交订单" id="tj"><!--提交订单按钮-->
  4. <div id="tishi"></div> <!--输出提示内容-->
  5. </body>
  6. <script type="text/javascript">
  7. $(".sc").click(function(){ //给所有删除按钮添加点击事件
  8. var code = $(this).attr("code"); //取出删除按钮对应的商品的主键值code
  9. $.ajax({ //用于删除商品个数
  10. type:"post",
  11. data:{code:code}, //传值为code值
  12. dataType:"text",
  13. url:"gwc-7-delete.php", //处理页面为gwc-7-delete.php
  14. success: function(e){ //回调函数会刷新页面
  15. window.location.href="gwc-6-chagwc.php";
  16. }
  17. })
  18. })
  19. $("#tj").click(function(){ //给提交按钮添加点击事件
  20. $.ajax({
  21. dataType:"text",
  22. url:"gwc-8-tijiao.php", //处理页面是gwc-8-tijiao.php
  23. success: function(e){ //回调函数判断传回结果执行不同代码
  24. if(e=="0"){
  25. $("#tishi").html("余额不足"); //返回0提示余额不足
  26. }
  27. if(e=="1"){
  28. $("#tishi").html("库存不足"); //返回1提示库存不足
  29. }
  30. if(e=="2"){
  31. window.location.href=\'gwc-1-zhu.php\'; //返回2跳转到主页面gwc-1-zhu.php
  32. }
  33. }
  34. })
  35. })
  36. </script>
  37. </html>

 

 7.

  1. <?php
  2. //这里是gwc-7-delete.php,是gwc-6-chagwc.php的处理页面之一,用于删除购物车中商品数量
  3. session_start(); //开启session
  4. $code = $_POST["code"]; //接收$_POST["code"]和$_SESSION["gwc"]
  5. $arr = $_SESSION["gwc"];
  6. foreach($arr as $k=>$v){ //循环遍历
  7. if($v[0]==$code && $v[1]>1){ //判断此code的数量是否大于一,大于一则数量减一
  8. $arr[$k][1]--;
  9. $_SESSION["gwc"] = $arr;
  10. }else if($v[0]==$code && $v[1]=1){ //判断此code数量是否为一,为一则清除此code所在的数组
  11. unset($arr[$k]);
  12. $_SESSION["gwc"] = $arr;
  13. }
  14. }

 

8.

  1. <?php
  2. //这里是gwc-8-tijiao.php,是gwc-6-chagwc.php的处理页面之一,用于将购物车的内容形成订单提交给数据库
  3. session_start(); //开启session
  4. require_once("../DBDA.class.php"); //引入数据库连接类
  5. $db = new DBDA();
  6. $user = $_SESSION["user"]; //取出user值
  7. if(!empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否非空
  8. $arr = $_SESSION["gwc"]; //非空则用数组接收$_SESSION["gwc"]
  9. $count = count($arr); //取出数组的元素个数作为商品种类数
  10. $zj=0; //设$zj为总价
  11. $kc=0; //设$kc为库存
  12. foreach($arr as $v){ //循环遍历
  13. $sql = "select price from fruit where ids = \'{$v[0]}\'"; //创建SQL语句查询单价
  14. $sql1 = "select numbers from fruit where ids = \'{$v[0]}\'"; //创建SQL语句查询库存
  15. $dj = $db->strquery($sql); //执行SQL语句并把值赋予$dj和$kc
  16. $kc = $db->strquery($sql1);
  17. $zj += $v[1]*$dj; //累加总价
  18. if($kc<$v[1]){ //判断库存是否小于选中的该商品选中的数量
  19. echo "1"; //小于则返回1,并停止执行之后的代码
  20. exit;
  21. }
  22. }
  23. $sql = "select account from login where username = \'{$user}\'"; //创建SQL语句查询用户的账户余额
  24. $yue = $db->strquery($sql); //执行SQL语句并用$yue接收
  25. if($yue<$zj){ //判断余额是否小于总价
  26. echo "0"; //小于则返回0并停止执行之后的代码
  27. exit;
  28. }
  29. $msy = $yue-$zj; //$msy为用户余额减总价
  30. $time = date("Y-m-d H:i:s"); //$time为当前的格式化时间
  31. $arr = $_SESSION["gwc"]; //$arr接收$_SESSION["gwc"]
  32. $code = $user.time(); //$code为用户名和当前时间戳的拼接
  33. $sql1 = "insert into orders values(\'{$code}\',\'{$user}\',\'{$time}\') "; //创建SQL语句,给orders添加数据
  34. $db->query($sql1,1);
  35. $sql2 = "update login set account={$msy} where username=\'{$user}\' "; //创建SQL语句,修改用户余额
  36. $db->query($sql2,1);
  37. foreach($arr as $v){
  38. $sql3 = "update fruit set numbers=numbers-{$v[1]} where ids = \'{$v[0]}\' "; //创建SQL语句,修改对应商品的库存
  39. $db->query($sql3,1) ;
  40. }
  41. foreach($arr as $v){
  42. $sql4 = "insert into orderdetails values(0,\'{$code}\',\'{$v[0]}\',\'{$v[1]}\')"; //创建SQL语句给orderdetails添加数据
  43. $db->query($sql4,1);
  44. }
  45. unset($_SESSION["gwc"]); //清除购物车的session
  46. echo "2"; //返回2
  47. }

 

9.

  1. <!--这里是gwc-9-chauser.php,是gwc-1-zhu.php点击查看账户跳转过来的页面,显示用户的信息和余额-->
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>无标题文档</title>
  7. </head>
  8. <?php
  1. session_start(); //开启session
  2. if(empty($_SESSION["user"])){ //防止绕过登录访问
  3. header("location:gwc-2-d.php");
  4. exit;
  5. }
  1. ?>
  2.  
  3. <body>
  4. <!--用于显示用户信息的表格-->
  5. <table width="100%" border="1" cellpadding="0" cellspacing="0">
  6. <tr>
  7. <td>用户名</td>
  8. <td>姓名</td>
  9. <td>余额</td>
  10. </tr>
  11. <?php
  1. require_once("../DBDA.class.php"); //引入数据库连接类
  2. $db = new DBDA();
  3. $user = $_SESSION["user"]; //取user值
  4. $sql = "select * from login where username = \'{$user}\'"; //创建SQL语句查询该user的数据
  5. $arr = $db->query($sql); //执行SQL语句并用$arr接收
  6. echo "<tr>
  7. <td>{$arr[0][0]}</td>
  8. <td>{$arr[0][1]}</td>
  9. <td>{$arr[0][3]}</td>
  10. </tr>"; //输出数据
  1. ?>
  2. </table>
  3. </body>
  4. </html>

 

10.

  1. <?php
  2. //这里是gwc-10-qing.php,是gwc-1-zhu.php点击退出跳转过来的处理页面,用来清除所有session值
  3. session_start(); //开启session
  4. unset($_SESSION["user"],$_SESSION["gwc"]); //清除$_SESSION["user"]和$_SESSION["gwc"]
  5. header("location:gwc-2-d.php"); //跳转到登录页面gwc-2-d.php

 

版权声明:本文为zxbs12345原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zxbs12345/p/8449196.html