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 的用法 ...
随机推荐
- Vue2.5开发去哪儿网App 第五章笔记 下
1. 多个元素或组件的过渡 多个元素的过渡: <style> .v-enter,.v-leace-to{ opacity: 0; } .v-enter-active,.v-leave-ac ...
- Hadoop集群搭建中时间同步步骤
一.设置主节点时间服务器的时区 二.在每一个节点上检查是否安装时间服务ntp 三.在主节点上配置时间同步的相关文件 四.在其他从节点上配置与主节点时间同步的脚本 一.设 ...
- 封了1000多个IP地址段,服务器现在坚如磐石,对付几个小毛贼还是很轻松的
封了1000多个IP地址段,服务器现在坚如磐石 root登陆权限取消,防火墙装上,关闭所有没必要的端口,外层加装路由器映射, 修改常用端口,将常用端口改成陷阱程序,只要访问我这些陷阱端口,程序直接dr ...
- 使用 AngularJS & NodeJS 实现基于 token 的认证应用
认证是任何Web应用中不可或缺的一部分.在这个教程中,我们会讨论基于token的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构建的 ...
- js便签笔记(5)——Dean Edwards大牛的跨浏览器AddEvent()设计(不知道是不是jQuery事件系统的原型)
1. 前言: 在看Aaron的jquery源码解读时候,看到事件系统那块,作者提到了Dean Edwards的添加事件的设计,于是就点进去看了看.首先让我吃惊的是,代码非常少,寥寥几十行,非常简单.于 ...
- 系统启动时队列自动下单--ServletContextListener
package com.liying.pear.queue; import javax.servlet.ServletContextEvent; import javax.servlet.Servle ...
- tensorflow 优化图
当我们把训练好的tensorflow训练图拿来进行预测时,会有多个训练时生成的节点,这些节点是不必要的,我们需要在预测的时候进行删除. 下面以bert的图为例,进行优化 def optimize_gr ...
- Unity3D第一战:软件安装与代码调试
1.软件的安装 Unity3D可以轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,功能非常强大. 最新版下载地址:http://unity3d.com/u ...
- ApiGen安装
# 首先,下载ApiGen(http://apigen.org/apigen.phar) # *nix系统 下载phar文件后, 移动到PATH目录中,以保证全局有权限调用 $ mv apigen.p ...
- 常用的Array相关的属性和方法
Array 对象属性constructor 返回对创建此对象的数组函数的引用. length 设置或返回数组中元素的数目. prototype 使您有能力向对象添加属性和方法. Array 对象方法c ...