实例练习:购物车
Posted 黑山大胖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实例练习:购物车相关的知识,希望对你有一定的参考价值。
运用session实现购物车的内容的存储,
数据库包含4个表分别为
1.login表,每列代表用户名、姓名、密码、余额
2.fruit表,每列代表主键自增长列、商品名称、商品单价、产地、堆数、库存
3.orders表,每列代表订单编号、用户名、订单形成时间
4.orderdetails表,每列代表主键自增长列、订单编号、商品编号、数量
共10个网页,功能有登录验证,防止绕过登录,购物车添加、删除、清除,查询账户,提交订单等
1.
<!--这里是登录页面gwc-2-d.php,用于登录购物网站,登录成功会跳转到主页面gwc-1-zhu.php--> <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script src="../js/jquery-3.3.1.min.js"></script> </head> <body> <h1>登录</h1> <!--以下分别是用户名栏,密码栏和登录按钮--> <div>用户名<input type="text" name="uid" id="uid"></div> <div>密码<input type="password" name="pwd" id="pwd"></div> <input type="submit" value="登录" id="dl"> </body> <script type="text/javascript"> $("#dl").click(function(){ //给登录按钮添加点击事件 var uid = $("#uid").val(); //分别取出用户名栏和密码栏内填的内容 var pwd = $("#pwd").val(); $.ajax({ url:"gwc-3-yan.php", //处理页面为gwc-3-yan.php type:"post", //传输方式为post dataType:"text", //传回格式为text data:{uid:uid,pwd:pwd}, //传输的数据为用户名栏和密码栏内填的内容 success: function(e){ //回调函数判断执行结果,验证成功跳转到主页面,失败弹出提示 if(e=="1"){ window.location.href="gwc-1-zhu.php"; }else if(e=="0"){ alert("用户名或密码错误!"); } } }) }) </script> </html>
2.
<?php //这里是gwc-3-yan.php,是gwc-2-d.php的ajax的处理页面,用来验证用户名密码是否正确,正确返回1,错误返回0 session_start(); //开启session require_once("../DBDA.class.php"); //引入数据库连接类 $db = new DBDA(); $uid = $_POST["uid"]; //取出传输的用户名栏和密码栏内填的内容 $pwd = $_POST["pwd"]; $sql = "select password from login where username = \'{$uid}\'"; //创建SQL语句,以传过来的用户名查询密码 $mm = $db->strquery($sql); //以返回字符串方法执行SQL语句并用$mm接收 if($pwd==$mm){ //判断传过来的密码和查询出来的密码是否相同 $_SESSION["user"] = $uid; //相同说明验证成功,把用户名值赋予$_SESSION["user"]并返回1 echo "1"; }else{ echo "0"; //不相同说明验证失败返回0 }
3.
<!--这里是主页面gwc-1-zhu.php,显示商品的具体信息--> <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script src="../js/jquery-3.3.1.min.js"></script> </head> <?php
session_start(); //开启session if(empty($_SESSION["user"])){ //防止绕过登录访问 header("location:gwc-2-d.php"); exit; }
?> <body> <a href="gwc-1-zhu.php">查看商品</a> <!--查看商品跳转到自己--> <a href="gwc-9-chauser.php">查看账户</a><!--查看账户,跳转到gwc-9-chauser.php--> <a href="gwc-6-chagwc.php">查看购物车</a><!--查看购物车内容,跳转到gwc-6-chagwc.php--> <a href="gwc-5-qinggwc.php">清空购物车</a><!--清空购物车,跳转到处理页面gwc-5-qinggwc.php--> <a href="gwc-10-qing.php">退出</a><!--退出登录,跳转到处理页面gwc-10-qing.php--> <div id="xianshi"></div> <!--用于显示购物车中商品的种类数和总价--> <!--用于显示商品内容的表格--> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>水果名称</td> <td>水果价格</td> <td>水果产地</td> <td>水果库存</td> <td></td> </tr> <?php
require_once("../DBDA.class.php"); //引用数据库连接类 $db = new DBDA(); $sql = "select * from fruit "; //创建SQL语句,查询水果表的所有内容 $arr = $db->query($sql); //执行SQL语句并用$arr接收 foreach($arr as $v){ //遍历并输出商品内容 echo " <tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[5]}</td> <td><a ><input type=\'button\' class=\'tj\' code=\'{$v[0]}\' value=\'添加\'></a></td> </tr>"; }
?> </table> </body> <script type="text/javascript"> var code = ""; //设置空的变量code jiaZai(); //执行jiaZai()方法 /* jiaZai()方法用来实时显示购物车中商品的种类和总价格 */ function jiaZai(){ $.ajax({ url:"gwc-4-add.php", //处理页面是gwc-4-add.php data:{code:code}, //传值是code值 dataType:"text", //传回的值的格式 type:"POST", //传值方式为post success: function(e){ //回调函数,最终显示购物车中的商品数量和总价格 var attr = e.split("|"); var str = "选中了"+attr[0]+"种水果,价格共"+attr[1]+"元。" ; $("#xianshi").html(str); } }) } $(".tj").click(function(){ code = $(this).attr("code"); //给code赋值,值为点击的那栏商品的code值 jiaZai(); }) </script> </html>
4.
<?php //这里是gwc-4-add.php,是gwc-1-zhu.php的ajax的处理页面,用来把购物车内容传入session中并根据用户操作修改购物车的session,并且输出购物车中商品种类数和总价 session_start(); //开启session require_once("../DBDA.class.php"); //引入数据库连接类 $db = new DBDA(); if(!empty($_POST["code"])){ //判断$_POST["code"]是否为非空,为空说明没有点击,非空执行之后的代码 $code = $_POST["code"]; //接收code值 if(empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否为空 $arr = array(array($code,1)); //$_SESSION["gwc"]为空则创建一个二维数组,数组中包含的一个小数组是code值和数字1组成的,代表存入一个此商品 $_SESSION["gwc"] = $arr; //将新建的数组赋予$_SESSION["gwc"] }else if(panDuan($_SESSION["gwc"],$code)){ //判断$_SESSION["gwc"]的数组中是否有包含含有code的数组 $arr = $_SESSION["gwc"]; //如果有说明添加的商品已经存在于购物车中,将$_SESSION["gwc"]赋值给$arr foreach($arr as $k=>$v){ //遍历出此code的数组,将代表数量的数字加一,注意这里要取出此code所在数组的索引,以直接操作数组而不是代表值$v if($v[0]==$code){ $arr[$k][1]++; } $_SESSION["gwc"] = $arr; //将修改后的二维数组重新赋值给$_SESSION["gwc"] } }else{ //判断出$_SESSION["gwc"]的数组中不包含含有code的数组 $arr1 = array($code,1); //创建一个数组包含code和数字1,代表存入一个此商品 $_SESSION["gwc"][] = $arr1; } } if(!empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否为非空, $arr = $_SESSION["gwc"]; //不为空则将$_SESSION["gwc"]交给$arr $count = count($arr); //取$arr的元素数量代表商品种类数 $zj=0; //设$zj代表总价格 foreach($arr as $v){ //遍历查询累加价格 $sql = "select price from fruit where ids = \'{$v[0]}\'"; //创建SQL语句,查询商品单价 $dj = $db->strquery($sql); //执行SQL语句把单价交给$dj $zj += $v[1]*$dj; //累加总价 } echo "{$count}|{$zj}"; //输出返回值为 商品种类数|总价 格式 }else{ echo "0|0"; //购物车为空返回 0|0 } /* *用来判断一个二维数组$arr中某个数组中是否包含某个元素$x *@param $arr 二维数组 *@param $x 元素 *@return 返回true或者false */ function panDuan($arr,$x){ $result = false; foreach($arr as $v){ if($v[0]==$x){ $result = true; } } return $result; }
5.
<?php //这里是gwc-5-qinggwc.php,是gwc-1-zhu.php点击清空购物车后跳转过来的处理页面,用来清空购物车的session session_start(); //开启session unset($_SESSION["gwc"]); //清除购物车session header("location:gwc-1-zhu.php"); //跳转到主页面gwc-1-zhu.php
6.
<!--这里是gwc-6-chagwc.php,是主页面gwc-1-zhu.php中点击查看购物车跳转过来的页面,可以显示购物车的具体内容,操作购物车内容(删除商品个数),显示选中商品的总价格,提交购物车内容形成订单-->
<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script src="../js/jquery-3.3.1.min.js"></script> </head> <?php
session_start(); //开启session if(empty($_SESSION["user"])){ //防止绕过登录访问 header("location:gwc-2-d.php"); exit; } require_once("../DBDA.class.php"); //引入数据库连接类 $db = new DBDA();
?> <body> <!--用于显示购物车的内容--> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>水果名称</td> <td>水果单价</td> <td>水果数量</td> <td>操作</td> </tr> <?php
if(!empty($_SESSION["gwc"])){ //判断$_SESSION["gwc"]是否非空 $arr = $_SESSION["gwc"]; //非空将$_SESSION["gwc"]交给$arr foreach($arr as $v){ //遍历数组 $sql = "select name,price from fruit where ids = \'{$v[0]}\'";//创建SQL语句,查询商品名和单价 $arr1 = $db->query($sql); //执行SQL语句并用数组接收 echo "<tr> <td>{$arr1[0][0]}</td> <td>{$arr1[0][1]}</td> <td>{$v[1]}</td> <td><input type=\'button\' class=\'sc\' code=\'{$v[0]}\' value=\'删除\'></td> </tr>"; //输出表格,包括商品名,单价,选中数量,操作按钮,操作按钮中包含自定义属性code,值为商品的主键值 } $zj=0; //设$zj代表总价格 foreach($arr as $v){ //遍历查询累加总价 $sql = "select price from fruit where ids = \'{$v[0]}\'"; $dj = $db->strquery($sql); $zj += $v[1]*$dj; } echo "<div>总计{$zj}元</div>"; //输出总价 }
?> </table> <input type="button" value="提交订单" id="tj"><!--提交订单按钮--> <div id="tishi"></div> <!--输出提示内容--> </body> <script type="text/javascript"> $(".sc").click(function(){ //给所有删除按钮添加点击事件 var code = $(this).attr("code"); //取出删除按钮对应的商品的主键值code $.ajax({ //用于删除商品个数 type:"以上是关于实例练习:购物车的主要内容,如果未能解决你的问题,请参考以下文章