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

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

链接删除页面的时候 获取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. [LeetCode] 206. Reverse Linked List_Easy tag: Linked List

    Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...

  2. (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

    原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...

  3. Windows7下无法打开chm(mk:@MSITStore:路径[cannot open the file mk@MSITstore:路径]),chm索引就关闭的解决办法

    解决方法1是: 1,右键关联chm文件的“打开方式”到\Windows\HH.exe 2,在命令行运行regsvr32 itss.dll 3,在命令行运行regsvr32 hhctrl.ocx 方法2 ...

  4. 使用vue3.0和element实现后台管理模板

    通过自己所学的这段时间,利用空余时间,使用vue3.0脚手架搭建的一个关于后台的管理模板,所实现功能也是模仿一个后台的界面,数据分为两种存放,一种是直接存储到mlab,这里的数据是存放这登录注册,只有 ...

  5. Undo日志文件的产生和使用

    Undo 日志 比如A有200块钱, B有50 块钱,现在A要给B转100块” . (1)  开始事务 T1 (假设T1是个事务的内部编号) (2)  A余额 = A余额 -100 (3)  B余额 ...

  6. JavaScript时间操作工具类

    /** * 时间操作工具类 * * @author zwq * */ var TimeFrameUtil = { /** * 格式化日期 * @param date {Date} 日期 * @para ...

  7. SpringMvc @JsonView 使用方式

    准确来说,@JsonView注解不是Spring的,它位于jackson-annotation包中: 作用:SpringMvc使用@ResponseBody将结果以json返回客户端,  有些实体类的 ...

  8. Java面试——你必须知道的122题

    1.Java面向对象中所有类的最终基类是什么? 参考答案 object,所有类都默认最终继承object,object是所有类的基类 2.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语 ...

  9. #if _MSC_VER &gt; 1000 #pragma once #endif 含义

    前提:MFC应用程序中,MainFrm 类头文件 MainFrm.h 中#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000解释 ...

  10. MFC获取系统信息

    一.获取系统时间 CString str,str2; CTime time; time = CTime::GetCurrentTime(); str = time.Format("%Y年%m ...