php 实现简单购物车功能(2)
上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除、提交订单后,库存的减少 以及客户账户的余额都没有完善,
这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一些,我们要把前面
链接删除页面的时候 获取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)的更多相关文章
- vue 入门 ------简单购物车功能实现(全选,数量加减,价格加减)
简易购物车功能(无任何布局 主要是功能) 数量的加减 商品的总价钱 全选与全不选 删除(全选.价格 受影响) <script src="https://cdn.jsdelivr.net ...
- 用python实现简单购物车功能
all_asset = 0 i1 = input("请输入总资产:") all_asset = int(i1) goods = [ {'name':'电脑','price':199 ...
- jq实现简单购物车增删功能
https://www.cnblogs.com/sandraryan/ jq实现购物车功能 点击+- 增减数量,计算价格: 点击删除,删除当前行(商品) 点击- ,减到0 询问是否删除商品 点击全选 ...
- Android 购物车功能的实现
首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一 ...
- ASP.NET之电子商务系统开发-2(购物车功能)
一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...
- 微信小程序之购物车功能
前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...
- vue实现淘宝购物车功能
淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=" ...
- vue2.0实现购物车功能
购物车功能是一件比较繁琐的事情,逻辑功能太多,今天就用vue2.0实现一个简单的购物车功能,数据都本地自己写的假数据 功能列表: 1.全选和单选结算 2.减少和增加数量 3.商品的删除 界面搭建以及布 ...
- [转]微信小程序之购物车功能
本文转自:https://www.cnblogs.com/linxin/p/6834206.html 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法 ...
随机推荐
- odoo开发笔记 -- 权限机制
转两篇关于权限的2篇文章,加深这方面的认识.注:后面附有原作者地址,希望不构成侵权. https://www.cnblogs.com/crazyguo/p/6999408.html 第一篇:http: ...
- Android开发艺术探索学习笔记(十)
第十章 Android的消息机制 面试中经常会被问到的一个问题:handler是如何在子线程和主线程中进行消息的传递的,这个问题通过了解Android的消息机制可以得到一个准确的答案. Androi ...
- Chapter 2 Open Book——26
"Oh." He let it drop. I looked away awkwardly. 哦,他让它走了.我笨拙的看向别处. “哦.”他不再纠缠于这个问题.我笨拙地移开视线. ...
- Redis+Jedis封装工具类
package com.liying.monkey.core.util; import java.io.IOException; import java.util.ArrayList; import ...
- OpenKM6.2.5的安装和配置详细过程(附启动失败原因)
继上文“解决OpenKM启动失败的详细历程”过后,这几天一直在使用OpenKM,OpenKM使用起来很简单,但是一些相关配置什么的中文资料较少,且有的资料欠缺正确性,存在误导性,下面就简单将配置过程和 ...
- Spring总结 1.装配bean
本随笔内容要点如下: 依赖注入 Spring装配bean的方式 条件化装配 一.依赖注入 我理解的依赖注入是这样的:所谓的依赖,就是对象所依赖的其他对象.Spring提供了一个bean容器,它负责创建 ...
- Javascript权威指南阅读笔记--第3章类型、值和变量(1)
之前一直有个想法,好好读完JS权威指南,便于自己对于JS有个较为全面的了解.毕竟本人非计算机专业出生,虽然做着相关行业的工作,但总觉得对于基础的掌握并没有相关专业学者扎实,正好因为辞职待业等原因,还是 ...
- HDU 3613 Best Reward(拓展KMP算法求解)
题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...
- Netty 源码剖析之 unSafe.write 方法
前言 在 Netty 源码剖析之 unSafe.read 方法 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧. 1. ...
- 并发编程—— FutureTask 源码分析
1. 前言 当我们在 Java 中使用异步编程的时候,大部分时候,我们都会使用 Future,并且使用线程池的 submit 方法提交一个 Callable 对象.然后调用 Future 的 get ...