PHP项目开发全程实录(第4版)
上QQ阅读APP看书,第一时间看更新

2.10 在线订购模块设计

视频讲解

在线订购模块的功能是实现在线购买企业推出的软件产品,其操作的流程主要通过购物车和订单管理来实现。

2.10.1 在线订购模块概述

在线订购的功能对所有访问网站的人开放,没有任何的权限限制。其操作流程如图2.28所示。

图2.28 在线订购模块的操作流程

2.10.2 在线订购模块技术分析

在线订购管理模块中,不可缺少的一项内容就是对订单进行打印。下面就来讲解一下订单打印功能的实现方法。在线订购管理模块中运用的是WebBrowser打印方法。WebBrowser是IE内置的浏览器控件,无须用户下载。其优点是客户端独立完成打印目标文档的生成,减轻服务器负荷;缺点是源文档的分析操作复杂,并且对源文档中要打印的内容进行约束。

下面介绍WebBrowser控件的具体参数,如表2.8所示。

表2.8 WebBrowser控件的具体参数说明

该技术的实现原理是:首先通过onClick事件调用一个JavaScript脚本,然后执行openprintwindow()函数,将指定的变量值传递到订单打印页中(printwindow.php),最后在订单打印页中实现打印及打印预览的功能。调用JavaScript脚本和执行openprintwindow()函数在shopping_dd.php页中完成。关键代码如下:

例程09 代码位置:资源包\TM\02\bcty365\shopping_dd.php

代码贴士

❶open():打开一个窗口,可以设置其URL、名称、大小、按钮以及其他属性。该方法的基本语法结构如下:


    window.open(url,name,features,replace)

其中,url是要在新窗口中打开文档的URL地址;name是要打开窗口的名字,用HTML链接的target属性进行定位时会有用;features是一个用逗号分隔的字符串,列举窗口的特征;replace是一个可选的Boolean值,指出是否允许URL替换窗口的内容。

❷onclick():表明某元素被鼠标单击触发的事件。

订单的打印和打印预览的功能在printwindow.php页中完成,首先编写一个实现打印预览功能的JavaScript脚本,然后建立HTML的object标签,调用WebBrowser控件,最后获取变量传递的值,当变量的值为p时执行打印功能;当变量的值为v时执行打印预览的功能。printwindow.php页的关键代码如下:

例程10 代码位置:资源包\TM\02\bcty365\printwindow.php

代码贴士

❶document.all.WebBrowser1.ExecWB(7,1):WebBrowser控件中的参数,表示打印预览。

❷onLoad:表明某对象已载入窗口。

❸print():window对象中的一个方法,实现打印的功能。

订单打印操作的运行结果如图2.29所示。

图2.29 订单打印操作的运行结果

2.10.3 购物车的实现过程

 购物车使用的数据表:tb_bccd

购物车的功能是临时储存用户选购的商品,用户可以对购物车中的商品进行添加、修改、删除和更新操作,也可以选择进行结算。其运行的结果如图2.30所示。

图2.30 购物车的运行结果图

购物车功能实现的第一步是为想要购买产品的用户分配一辆购物车,使其能够记录自己已经选购的产品。其工作的原理与超市中顾客使用购物车进行购物是相同的,只是这里使用的不是真正意义上的购物车,而是两个session变量,一个存储用户选购商品的ID($goodsid),另一个存储用户选购该商品的数量($goodsnum)。如果用户在一次购物中选购多种不同类的商品,则使用@对不同类商品的不同ID和数量进行分割。例如,用户选购的不同类商品id为1、2、3,则session变量$goodsid中存储的值为“1@2@3@”;其中同一种商品不能购买两次,如果想要购买多个同种产品,可以在购物车中更改购买商品的数量。在本案例中,购物车的分配功能通过shopping_cart_first.php文件来完成,该文件的代码如下:

例程11 代码位置:资源包\TM\02\bcty365\shopping_cart_first.php

代码贴士

❶session_start():初始化session变量。

❷explode():将字符串依指定的字符串或字符进行分割。返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串separator作为边界点分隔出来。如果设置了limit参数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分;如果separator为空字符串(""),explode()函数将返回false;如果separator所包含的值在string中找不到,那么explode()函数将返回包含string单个元素的数组;如果参数limit是负数,则返回除了最后的-limit个元素外的所有元素。

❸in_array():在指定的数组中搜索某个值,如果找到则返回true,否则返回false。

在实现购物车的分配和添加商品的功能后,接下来要做的就是查看购物车中的商品,即实现购物车中商品展示的功能。在购物车的商品展示中,可以实现很多的操作,如清空购物车、删除购买商品、更改购买商品数量、继续购物和结算。

购物车商品展示的功能主要通过shopping_cart.php文件来完成,首先从session变量中读取商品的ID和数量,然后根据商品的ID循环输出购物车中的商品,最后以商品ID为标识符设置不同的超链接,执行删除商品或者更改购买商品数量等操作。代码如下:

例程12 代码位置:资源包\TM\02\bcty365\shopping_cart.php

2.10.4 商品订单的实现过程

 商品订单使用的数据表:tb_bccd、tb_dd、tb_city

在确定所要购买的商品之后,接下来要做的就是进行购物结算,填写用户购物订单,将订单保存到数据库中,并且随机生成一个订单号,作为订单的唯一标识。生成订单的运行结果如图2.31所示。

订单提交以后用户可以选择汇款的方式:一是选择网上支付,那么将跳转到企业指定的网上银行进行汇款,汇款的操作将在企业指定的网上银行中进行,这里不做讲解;二是选择到指定的银行向企业提供的账号中汇款。企业将在收到汇款后按照用户指定的地址和方式将产品送到。商品订单的生成和处理由shopping_cart_getuserinfo.php和savebuyuser.php文件来完成。

图2.31 生成订单的运行结果

订单处理由savebuyuser.php完成,首先连接数据库,随机生成一个订单号,然后获取购物车中的商品信息,最后将商品信息和订单号存储到数据库中。代码如下:

例程13 代码位置:资源包\TM\02\bcty365\savebuyuser.php

2.10.5 单元测试

在在线订购模块的测试过程中,当执行删除购物车中某个商品的操作时,发现该项操作没能正确执行,指定的商品没有被删除。首先,从该功能实现的思路入手分析出错原因,并且仔细核对其中使用的变量以及函数是否正确。

删除商品的操作是根据商品的ID来进行处理的,当单击“删除”超链接时,将指定商品的ID通过变量$ides传入到执行删除商品操作的文件delgoods.php中,然后在该文件中获取变量$ides传入的ID值,并且根据ID值完成删除购物车中指定商品的操作。在查看该功能实现的过程中发现,定义的变量$ides与delgoods.php文件中$_GET["id"]获取的变量值不一致,从而导致删除商品的操作没有正确执行,代码的出错位置如图2.32所示。

图2.32 代码中的错误显示

查找出错误原因,将定义的变量与获取的变量值统一使用id,保存文件,重新运行程序,删除操作可以正常运行。