上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除、提交订单后,库存的减少 以及客户账户的余额都没有完善,

这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一些,我们要把前面

链接删除页面的时候 获取ids的值改为获取 arr的索引值arr的索引值k   改为

<a href='shanchu.php?sy={$k}'>删除</a></td>

这样我们进入删除页面后  就可以直接获取索引值sy 这样删除页面写起来就简单多了

下面就是删除页面的代码了 shanchu.php

 1 <?php
2 session_start();
3 $sy = $_GET["sy"];
4
5 //根据索引找到该数据
6 $arr = $_SESSION["gwc"];
7 $arr[$sy]; //要删除的数据
8
9 //如果数量不为1,数量减1
10 if($arr[$sy][1]>1)
11 {
12 $arr[$sy][1] = $arr[$sy][1]-1;
13 }
14 else //如果数量为1,移除
15 {
16 unset($arr[$sy]);
17 }
18
19 $_SESSION["gwc"] = $arr; //最后存一下购物车的内容
20
21 header("location:gouwuche.php");

这样删除页面就可以了,下面就是提交页面的代码了,相对来说比较繁琐,说到提交页面,我们会想到的是 库存、余额,我们只要提交订单,那么库存就会减少,

相对的 余额也会 减少,当然如果库存不足,或者余额不足的话,也要给购买者提示

在这个地方做了两个表格 用来存储数据的 

在gouwuche.php最后的时候加一个标签

<div><a href="tijiaodd.php"></a><div>

下面就是tijiaodingdd.php的代码了

 1 <?php
2 session_start();
3 header("Content-type:text/html;charset=utf-8"); //防止出现乱码
4 $uid=$_SESSION["uid"];
5 //先查一下账户余额
6 include("DADB.class.php");
7 $db=new DADB();
8 $ysql="select account from login where username='{$uid}'";
9 $yarr=$db->Query($ysql);
10 $yarr[0][0];//总额
11
12
13 //购物车的总价格,前面有写过
14
15 $arr=array();
16
17 if (!empty($_SESSION["gwc"]))
18 {
19 $arr=$_SESSION["gwc"];
20 }
21 $sum=0;
22 foreach($arr as $v)
23 {
24 $v[1];//购物车中产品的数量
25 $psql="select price from fruit WHERE ids='{$v[0]}'";
26 $parr=$db->Query($psql);
27 foreach($parr as $k)
28 {
29 $k[0];//产品的单价
30 $sum+=$k[0]*$v[1];
31 }
32 }
33
34 //判断余额是否满足购买
35 if($yarr[0][0]>=$sum)
36 {//余额满足,要判断库存
37 foreach($arr as $v)
38 {
39 $ksql="select number from fruit where ids='{$v[0]}'";
40 $karr=$db->Query($ksql);
41 $karr[0][0];//这是库存
42 if($karr[0][0]<$v[1]) //表示库存不足,这时要给顾客提示库存不足
43 {
44 echo"库存不足";
45 exit;
46 }
47 }
48
49 //判断之后需要提交订单了
50 //账户扣除余额
51 $kcsql="update login set account=account-{$sum} where username='{$uid}'";
52 $db->Query($kcsql,0);//这里是修改语句,所以要加上0
53
54 //扣除库存
55 foreach($arr as $v)
56 {
57 $kcksql="update fruit set number=number-$v[1] where ids='{$v[0]}'";
58 $db->Query($kcksql,0);
59 }
60
61 //所有的工作都做完了,这时我们就该提交订单了
62 // 这里我在数据库中做了两张表,把提交的订单添加到表中就可以保存了
63
64 //添加订单
65 $ddh = date("YmdHis");
66 $time = date("Y-m-d H:i:s");
67 $sdd = "insert into orders values('{$ddh}','{$uid}','{$time}')";
68 $db->Query($sdd,0);
69
70 //添加订单详情
71 foreach($arr as $v)
72 {
73 $sddxq = "insert into orderdetails values('','{$ddh}','{$v[0]}','{$v[1]}')";
74 $db->Query($sddxq,0);
75 }
76 }
77
78 else
79 {
80 echo "余额不足";
81 exit;
82 }
83
84 ?>

购物车还是和上一篇购物车中的产品是一样的,这时我们再去看看数据库中的表

备注:因为之前有过多次测试用的都是zhangsan的账号, 所以login表中的account价格发生了变化,变为33.6元,我们放入购物车的产品价格是16.8元,所以这里是没有问题的

php 实现简单购物车功能(2)的更多相关文章

  1. vue 入门 ------简单购物车功能实现(全选,数量加减,价格加减)

    简易购物车功能(无任何布局 主要是功能) 数量的加减 商品的总价钱 全选与全不选 删除(全选.价格 受影响) <script src="https://cdn.jsdelivr.net ...

  2. 用python实现简单购物车功能

    all_asset = 0 i1 = input("请输入总资产:") all_asset = int(i1) goods = [ {'name':'电脑','price':199 ...

  3. jq实现简单购物车增删功能

    https://www.cnblogs.com/sandraryan/ jq实现购物车功能 点击+- 增减数量,计算价格: 点击删除,删除当前行(商品) 点击- ,减到0 询问是否删除商品 点击全选 ...

  4. Android 购物车功能的实现

    首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一 ...

  5. ASP.NET之电子商务系统开发-2(购物车功能)

    一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...

  6. 微信小程序之购物车功能

    前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...

  7. vue实现淘宝购物车功能

    淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=" ...

  8. vue2.0实现购物车功能

    购物车功能是一件比较繁琐的事情,逻辑功能太多,今天就用vue2.0实现一个简单的购物车功能,数据都本地自己写的假数据 功能列表: 1.全选和单选结算 2.减少和增加数量 3.商品的删除 界面搭建以及布 ...

  9. [转]微信小程序之购物车功能

    本文转自:https://www.cnblogs.com/linxin/p/6834206.html 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法 ...

随机推荐

  1. Docker三剑客之Docker Compose

    一.什么是Docker Compose Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/comp ...

  2. Java时间类(转)

    package com.chinagas.common.utils; import java.text.ParseException; import java.text.SimpleDateForma ...

  3. CentOS6.7-64bit编译spark-1.6.1和spark-1.3.1

    编译spark-1.6.1 tar -zxvf spark-1.6.1.tgz -C /usr/local/src/ cd /usr/local/src/spark-1.6.1/ #设置内存2G ex ...

  4. 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)

    python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...

  5. ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 2

    这是sqoop的 迁移数据到hive的报错 解决方案: 1,已经尝试不是  晚上大多数说的 libthrity的原因 2,查看自己的配置  sqoop-env.sh  如果配置的路径写的不对,对应的包 ...

  6. Gen类的字符串操作

    public void t(String d){ final String str = "b"; String s = "a"+"c"+st ...

  7. springboot @value和@configurationproperties注解的区别

      @ConfigurationProperties @value 功能 批量注入配置文件中的属性 一个个指定 松散绑定(松散语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 ...

  8. Solidity的自定义结构体深入详解

    一.结构体定义 结构体,Solidity中的自定义类型.我们可以使用Solidity的关键字struct来进行自定义.结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型.数组 ...

  9. offsetTop、offsetLeft、offsetWidth、offsetHeight的用法

    假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素. obj.offsetLeft ...

  10. UVA 227 Puzzle(基础字符串处理)

    题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...