实例练习:购物车

运用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:"post",
            data:{code:code},    //传值为code值
            dataType:"text",
            url:"gwc-7-delete.php",    //处理页面为gwc-7-delete.php
            success: function(e){    //回调函数会刷新页面
                window.location.href="gwc-6-chagwc.php";
            }
        })
    })
    $("#tj").click(function(){    //给提交按钮添加点击事件
        $.ajax({
            dataType:"text",
            url:"gwc-8-tijiao.php",    //处理页面是gwc-8-tijiao.php
            success: function(e){    //回调函数判断传回结果执行不同代码
                if(e=="0"){
                    $("#tishi").html("余额不足");        //返回0提示余额不足
                }
                if(e=="1"){
                    $("#tishi").html("库存不足");        //返回1提示库存不足
                }
                if(e=="2"){
                    window.location.href=‘gwc-1-zhu.php‘;    //返回2跳转到主页面gwc-1-zhu.php
                }
            }
        })

    })

</script>
</html>

7.

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

8.

<?php
//这里是gwc-8-tijiao.php,是gwc-6-chagwc.php的处理页面之一,用于将购物车的内容形成订单提交给数据库
session_start();    //开启session
require_once("../DBDA.class.php");    //引入数据库连接类
$db = new DBDA();
$user = $_SESSION["user"];    //取出user值

    if(!empty($_SESSION["gwc"])){    //判断$_SESSION["gwc"]是否非空
        $arr = $_SESSION["gwc"];    //非空则用数组接收$_SESSION["gwc"]
        $count = count($arr);    //取出数组的元素个数作为商品种类数
        $zj=0;    //设$zj为总价
        $kc=0;    //设$kc为库存
        foreach($arr as $v){    //循环遍历
            $sql = "select price from fruit where ids = ‘{$v[0]}‘";        //创建SQL语句查询单价
            $sql1 = "select numbers from fruit where ids = ‘{$v[0]}‘";    //创建SQL语句查询库存
            $dj = $db->strquery($sql);    //执行SQL语句并把值赋予$dj和$kc
            $kc = $db->strquery($sql1);
            $zj += $v[1]*$dj;    //累加总价
            if($kc<$v[1]){    //判断库存是否小于选中的该商品选中的数量
                echo "1";    //小于则返回1,并停止执行之后的代码
                exit;
            }
        }

        $sql = "select account from login where username = ‘{$user}‘";    //创建SQL语句查询用户的账户余额
        $yue = $db->strquery($sql);        //执行SQL语句并用$yue接收
        if($yue<$zj){    //判断余额是否小于总价
            echo "0";    //小于则返回0并停止执行之后的代码
            exit;
        }
        $msy = $yue-$zj;    //$msy为用户余额减总价
        $time = date("Y-m-d H:i:s");    //$time为当前的格式化时间
        $arr = $_SESSION["gwc"];    //$arr接收$_SESSION["gwc"]

        $code = $user.time();    //$code为用户名和当前时间戳的拼接
        $sql1 = "insert into orders values(‘{$code}‘,‘{$user}‘,‘{$time}‘) ";    //创建SQL语句,给orders添加数据
        $db->query($sql1,1);
        $sql2 = "update login set account={$msy} where username=‘{$user}‘ ";    //创建SQL语句,修改用户余额
        $db->query($sql2,1);
        foreach($arr as $v){
            $sql3 = "update fruit set numbers=numbers-{$v[1]} where ids = ‘{$v[0]}‘ ";    //创建SQL语句,修改对应商品的库存
            $db->query($sql3,1)    ;
        }
        foreach($arr as $v){
            $sql4 = "insert into orderdetails values(0,‘{$code}‘,‘{$v[0]}‘,‘{$v[1]}‘)";    //创建SQL语句给orderdetails添加数据
            $db->query($sql4,1);
        }
        unset($_SESSION["gwc"]);    //清除购物车的session
        echo "2";    //返回2
    }

9.

<!--这里是gwc-9-chauser.php,是gwc-1-zhu.php点击查看账户跳转过来的页面,显示用户的信息和余额-->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<?php
    session_start();    //开启session
    if(empty($_SESSION["user"])){    //防止绕过登录访问
        header("location:gwc-2-d.php");
        exit;
    }
?>

<body>
<!--用于显示用户信息的表格-->
<table width="100%" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td>用户名</td>
            <td>姓名</td>
            <td>余额</td>

        </tr>
        <?php
            require_once("../DBDA.class.php");    //引入数据库连接类
            $db = new DBDA();
            $user = $_SESSION["user"];    //取user值
            $sql = "select * from login where username = ‘{$user}‘";    //创建SQL语句查询该user的数据
            $arr = $db->query($sql);    //执行SQL语句并用$arr接收
            echo "<tr>
                    <td>{$arr[0][0]}</td>
                    <td>{$arr[0][1]}</td>
                    <td>{$arr[0][3]}</td>
                </tr>";        //输出数据
?>
</table>
</body>
</html>

10.

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

原文地址:https://www.cnblogs.com/zxbs12345/p/8449196.html

时间: 2024-08-04 20:03:55

实例练习:购物车的相关文章

python实例_购物车

一,作者介绍 吴海东:My Blog:http://www.cnblogs.com/whd-672701 二,程序说明 购物车程序: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4.可随时退出,退出时,打印已购买商品和余额 5.在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 6.用户下一次登录后,输入用户名密码,直接回到上次的状态,即

Shell脚本实例——商场购物案例

Shell脚本基础循环.判断语句练习实例 商场购物车案例 #! /bin/bash xie=200 ku=150 yi=100 huan=50 chi=120 num=0 for ((i=1;i<=5;i++)) do echo 是否进入第"$i"家店? read -p "输入(yes & no)" shu while [ $shu = "yes" ] do echo 1.鞋子 ¥"$xie" echo 2.裤子

监听 javascript 对象的变化

这一章话题的由来,还要从一些学员的作业说起.写这篇文章主要是想让大家能从不同的角度分析问题,学习的过程中多看,多练,多想,多查,多用心.在特别多的学习网站中大部分的学习资料基本都是循规蹈矩的,例如慕课网的 javascript 入门教程中,很多讲师都讲了一些实例,而这些例子中的代码风格如出一辙,没什么新意,而且这些教程占了很大一部分比例.在这里,给大家提供另外一种思路 ------ 监听,具体代码的实现大家自己实现.也欢迎大家评论区写出不同想法. 先给出监听的概念:监听一个对象的某个属性是否发生

数据库设计系列之三

一.为什么要进行需求分析? 1.了解系统中所需要存储的数据 2.了解数据的存储特点 3.了解数据的生命周期 二.要搞清楚的一些问题 1.实体及实体之间的关系(1对1,1对多,多对多) 2.实体所包含的属性有什么? 3.哪些属性或属性的组合可以唯一标识一个实体 需求分析实例 实例演示: 以一个小型的电子商务网站为例,在这个电子商务网站的系统中包括了几个核心的模块: 用户模块.商品模块.订单模块.购物车模块.供应商模块 实例演示--用户模块 用于记录注册用户信息 包括属性:用户名.密码.电话.邮箱.

Java script 的dom编程

实例1: ?</head> ?<body> ? <div id="div1"> ? ?<p id="p1">这是一个段落</p> ? ?<p id="p2">这是另外一个段落</p> ? ? ? ? </div> ?</body> ?<script type="text/javascript" language=&

angular学习笔记(一)

入门实例: 一个购物车产品清单,可以自行改变数量,总价自动计算的小例子: 代码如下: <!DOCTYPE html> <html ng-app> <head> <title>1.1实例:购物车</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="

关于DOM的一些总结(未完待续......)

DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.querySelector("选择器"); 通过所需的元素节点,得到我们想要的数据做运算. 实例2:伸缩二级菜单 这里主要是逻辑判断,不同的逻辑给不同的className来控制样式. 需求是:一级菜单可以都关闭,但最多只有一个能打开.(思路是,每次都将所有的一级菜单关闭,然后仅打开当前点击的元素,并

用AngularJS开发下一代Web应用pdf

下载地址:网盘下载 内容简介  · · · · · · AngularJS是一款来自Google的前端JS框架,它的核心特性有:MVC.双向数据绑定.指令和语义化标签.模块化工具.依赖注入.HTML模板,以及对常用工具的封装,例如$http.$cookies.$location等.AngularJS框架的体积非常小,但是设计理念和功能却非常强大,值得前端开发者深入学习. 本书对AngularJS框架的核心特性做了全面的介绍,包括常用的开发工具和开发环境.作为国内第一本关于AngularJS的书籍

Python 系统学习梳理_【All】

Python学习 1. Python学习---Python安装与基础1205 2. Python学习---PyCharm的使用学习 3. Python学习---Python数据类型1206 4. Python学习---range/for/break/continue简单使用 5. Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207[all] 6. Python学习---文件操作的学习1208 7. Python学习---函数的学习1209[all] 8. Python学

Vue(八):监听属性watch

Vue.js 可以通过 watch 来响应数据的变化. 以下实例模拟购物车里商品数量增加,对应价格也增加 <!--模拟购物车商品数量增加,价格也随之增加--> <div id = "app"> <h3>Search Goods</h3> <input type='goodsname' v-model="goodsname" /> <br><br> <table border=1