当前位置: 首页 > news >正文

纯干货丨PHP实现购物车的构建

购物车描述的是在线购物的特定机制。当浏览在线类目时,可以在购物车添加特定商品。在完成浏览后,可以直接在在线商店支付,即购买购物车的商品。

要实现Book-O-Rama项目的购物车,需要实现如下功能:

  • 保存有在线售卖商品的数据库

  • 按类目组织的商品在线类目

  • 记录用户希望购买商品的购物车

  • 处理支付和货运详情的结账脚本

  • 管理界面 

 

解决方案组件

你可能记得本书第二篇开发的Book-O-Rama 数据库。在这个项目中,你将实现该数据库的在线商店并在线售卖。解决方案组件将实现如下常规目标:

  • 需要有方法将数据库连接到用户浏览器,应用应该能够按类目浏览商品。

  • 用户还应该可以从类目选取商品以供购买,你应该能够记录用户选择的商品。

  • 在用户完成购物后,需要能够统计订单金额,获取用户送货详情并处理支付。

  • 还应该有Book-O-Rama 站点的管理界面,这样管理员可以添加并编辑站点的图书和类目信息。

在了解了项目目标后,就可以开始设计解决方案和组件了。


构建在线类目

我们已经创建了保存Book-O-Rama 类目信息的数据库。然而要支持在线类目,可能需要对这个数据库进行一些修改和添加。例如,一种添加操作包括添加图书类目,已经在上述需求目标提到。

你还需要在已有数据库添加如下信息:送货地址、支付详情等。你已经了解如何使用PHP 构建访问MySQL 数据库的界面,因此关于管理界面的需求,应该相对简单。在完成顾客订单时,技术上必须采用事务。你需要将Book-O-Rama 表转换为InnoDB存储引擎。这个操作也相对比较直观。

记录用户希望购买的商品

有两种方法可以记录用户希望购买的商品。一种是将用户选择保存在数据库,另一种是使用会话变量。

在页面切换过程中使用会话变量记录用户选择更容易编写,因此它不要求持续的查询数据库来获取该信息。使用这种方法,你也可以避免由于用户随意浏览并不断改变想法从而在数据库中产生垃圾数据的情况。

因此,需要设计会话变量或变量集来保存用户选择。当用户完成购物并支付购买商品时,你可以将这些信息作为事务记录保存在数据库中。

你也可以使用该数据在页面角落显示购物车当前状态的总结,这样用户可以在任何时间都知道其订单总金额。


实现支付系统

在这个项目中,你将增加用户订单以及获取送货详情的功能,但不会真正处理支付。目前有很多可用的支付系统,每个系统实现也各不相同。在这个项目中,你将编写空函数,这个空函数可以由选定的支付系统接口所替代。

尽管可以使用不同的支付系统网关,而且每个网关都有许多不同的接口,实时信用卡处理接口功能大多相似。你需要开启一个商家账户,并提供自己的银行卡,通常你的银行也会有推荐的支付系统服务提供商。支付系统服务提供商将指定需要传递的参数,以及如何传递参数。许多支付系统都有使用PHP 的示例代码,你可以用这些示例代码来代替本章所创建的空函数。

在使用时,支付系统将你的数据传送给银行并且返回成功码或不同的错误码类型。在数据交换的过程,支付网关将对你收取一定费用或年费,以及基于事务涉及金额的费用。有些提供商甚至会收取事务失败(被拒绝)的费用。

支付系统最少要收集如下信息:买家信息(例如信用卡号)、能够标识商家的信息(指定收钱的商家账号)以及该事务涉及的总金额。

你也可以从用户购物车会话变量计算订单金额。然后再将最终订单详情记录到数据库并删除该会话变量。


构建管理界面

除了支付系统,你也需要构建能够增加、删除和编辑数据库中图书及类目信息的管理界面。

常见的编辑操作是修改商品价格(例如,特殊价格或营销活动)。这意味着当保存顾客订单时,应该保存顾客为每个商品支付的价格。如果只有每个顾客订购的商品及每个商品的当前价格,你将会遇到大问题。这意味着如果客户要求退换货,你将无法给顾客返回正确的金额。不必构建履行和订单跟踪界面。但是,你可以根据需要将其添加到系统。


解决方案概述

下面将所有内容整合起来。该系统有两个基本视图:用户视图和管理员视图。在考虑了所需功能后,有两个可用的系统流设计分别对应这两个视图,如图所示。

图1 所示的是Book-O-Rama 站点用户视图中脚本间的连接。顾客将首先访问主页,该主页列出了站点所有在售图书目录,以及每本图书的详情。你将为每本图书给出用来添加至购物车的链接,然后顾客再在在线商店结账。

图2 是管理界面,实现它需要较多脚本,但并没有太多新脚本。这些脚本允许管理员登录

并插入图书和类目信息。

实现图书及类目编辑和删除最简单的方法是为管理员提供不同版本的用户界面。管理员可以浏览类目和图书,但是除了访问购物车,管理员可以找到特定图书或类目并且编辑或删除该图书

或目录。通过使相同脚本适用于普通用户和管理员,可以节省大量时间和精力。

该应用的三个主要代码模块如下所示:

  • 类目

  • 购物车和订单处理(将二者绑定是因为它们强相关)

  • 管理功能

就像其他项目一样,你需要创建并使用函数库。对于这个项目,你使用的函数API 类似于其他项目使用的API。可以将输出HTML 的代码保存在单个函数库中,这样可以遵循将逻辑与内容分开的原则,更重要的是,代码更易于阅读和维护。

针对这个项目,需要对Book-O-Rama 数据库进行简单修改。我们将数据库重命名为book_sc(ShoppingCart,购物车)并将其(购物车数据库)与本书第二篇创建的数据库区分开。购物车应用包含的文件如表1所示。

——本文摘自《PHP和MySQL Web开发(原书第5版)》

(第31章节)    

推荐阅读

《PHP和MySQL Web开发》

原书第5版

ISBN:978-7-111-58773-6

作 者:Luke Welling,Laura Thomson

译 者:熊慧珍 武欣 罗云峰 等译

定 价:129.00元

出版时间:2018/02

内容简介:

PHP和MySQL Web应用开发“圣经”!Luke Welling最新力作!十余年畅销不衰。

与本书第4版相比,第5版进行了全面更新、重写和扩展,详尽介绍了PHP 5.6到7的版本更新和新特性,以及MySQL最新版本的新特性。

点击“阅读原文”查看书籍详情

相关文章:

  • February丨月度书单
  • 计算机科学丛书20周年——20本跨世经典 夯筑科技基石
  • TIOBE 2月编程语言排行榜:Java稳居第一,Go 还在跌!
  • 十年程序员用眼告诉你 2018 PHP 不一样
  • 第3届《洞见区块链·深度探索区块链》技术沙龙
  • 干货丨Spark度量系统分析
  • 刚入门区块链的程序员应该看什么?
  • 程序媛的芳华,女神节快乐!
  • IT程序员如何披荆斩棘?教你几招可好
  • 盘点那些让程序员目瞪口呆的Bug都有什么?
  • 世间再无霍金,时间永留简史!
  • 程序员需要具备哪些能力才能找到一份月薪2W+的工作
  • IBM展示“世界最小电脑”成本只有10美分
  • 【洞见区块链】众专家探讨企业级区块链未来之路
  • 2017年图灵奖得主:荣誉属于体系架构
  • Druid 在有赞的实践
  • express.js的介绍及使用
  • Idea+maven+scala构建包并在spark on yarn 运行
  • leetcode386. Lexicographical Numbers
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • springMvc学习笔记(2)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue学习系列(二)vue-cli
  • 给Prometheus造假数据的方法
  • 基于组件的设计工作流与界面抽象
  • 检测对象或数组
  • 聊聊redis的数据结构的应用
  • 排序(1):冒泡排序
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 树莓派 - 使用须知
  • 微信开放平台全网发布【失败】的几点排查方法
  • 译自由幺半群
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 我们雇佣了一只大猴子...
  • ​flutter 代码混淆
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #define
  • #define用法
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1)bark-ml
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)Controller接口控制器详解(三)
  • (转载)hibernate缓存
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net 生成二级域名
  • .Net 中Partitioner static与dynamic的性能对比
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [.net]官方水晶报表的使用以演示下载