集成的购物车系统全.docx

上传人:b****1 文档编号:1405930 上传时间:2023-04-30 格式:DOCX 页数:39 大小:1.69MB
下载 相关 举报
集成的购物车系统全.docx_第1页
第1页 / 共39页
集成的购物车系统全.docx_第2页
第2页 / 共39页
集成的购物车系统全.docx_第3页
第3页 / 共39页
集成的购物车系统全.docx_第4页
第4页 / 共39页
集成的购物车系统全.docx_第5页
第5页 / 共39页
集成的购物车系统全.docx_第6页
第6页 / 共39页
集成的购物车系统全.docx_第7页
第7页 / 共39页
集成的购物车系统全.docx_第8页
第8页 / 共39页
集成的购物车系统全.docx_第9页
第9页 / 共39页
集成的购物车系统全.docx_第10页
第10页 / 共39页
集成的购物车系统全.docx_第11页
第11页 / 共39页
集成的购物车系统全.docx_第12页
第12页 / 共39页
集成的购物车系统全.docx_第13页
第13页 / 共39页
集成的购物车系统全.docx_第14页
第14页 / 共39页
集成的购物车系统全.docx_第15页
第15页 / 共39页
集成的购物车系统全.docx_第16页
第16页 / 共39页
集成的购物车系统全.docx_第17页
第17页 / 共39页
集成的购物车系统全.docx_第18页
第18页 / 共39页
集成的购物车系统全.docx_第19页
第19页 / 共39页
集成的购物车系统全.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

集成的购物车系统全.docx

《集成的购物车系统全.docx》由会员分享,可在线阅读,更多相关《集成的购物车系统全.docx(39页珍藏版)》请在冰点文库上搜索。

集成的购物车系统全.docx

集成的购物车系统全

第9章集成的购物车系统

9.1系统功能与组成

本章讲解顾客购物系统的实现方法,以此引入更多的知识点和技巧。

一个真正的购物系统,其商品达到一定的数量,通过单纯的浏览功能找到一件商品是相当辛苦和损害视力的苦差使。

因此,提供根据特定条件搜索商品的功能是必不可少的,类似的搜索功能会在大多数电子商务网站上看到。

购物过程中,顾客可能想看一下到目前为止选了哪些商品,这个功能即典型的电子商务网站上的购物车功能。

9.2数据库设计

与本章密切相关的是shoppingcart表,该表用来存储顾客购物车的信息,也就是顾客到目前为止选了哪些商品,但这些商品仍未结账,其中各字段的意义如下。

图9-1网上书店的整体数据库结构

username:

字段类型为“文本型”,长度为20,存放内容为“顾客的账号”,用于区分不同顾客的购物车。

productID:

字段类型为“文本型”,长度为20,存放内容为“商品代码”,用于表示哪个商品放在购物车里。

quantity:

字段类型为“整数型”,存放内容为“该商品的数量”。

由于商品的其他信息在catalog表里都有,因此shoppingcart表用这些字段就够了。

shoppingcart表以username和productID为主键。

另一个与本章密切相关的是order表,该表用来存储顾客的订单信息,也就是顾客最终购买了哪些商品。

其中各字段的意义如下。

orderID:

字段类型为“文本型”,长度为10,存放内容为“一次购买的订单号”。

username:

字段类型为“文本型”,长度为20,存放内容为“顾客账号”,说明是哪个顾客的订单。

productID:

字段类型为“文本型”,长度为20,存放内容为“商品代码”,用于表示购买了哪个商品。

quantity:

字段类型为“整数型”,存放内容为“该商品的数量”。

listprice:

字段类型为“货币型”,小数为2,存放内容为“该商品的单价”。

orderdate:

字段类型为“日期型”,长度为8,存放内容为“下单的日期时间”。

由于商品的其他信息在catalog表里都有,因此order表用这些字段就够了。

order表以orderID和productID为主键,从商务的角度讲,订单号的编码规则必须保证orderID是惟一的,任意两个订单的订单号都不能相同。

虽然在catalog表里也有listprice字段,但还要放进order表中,这是因为catalog表的商品单价随着时间的变化和促销手段的变化是会变的,而order表中的商品单价,一旦下单就以下单时的单价为准而不变了。

因此凡是catalog里需要瞬时定价不变的那些字段都应该放入order表。

具体哪些字段应放入order表,视商务应用设计的需要而定,对这个例子来说,认为listprice是需要瞬时定价的。

到此为止,本课程所涉及的数据库表都建完了,为了实现本章购物车的功能,需要对数据库中的四个表根据主键建立关系,如图9-1所示。

具体方法同学们回顾数据库知识,在次不再赘述。

 

9.3实现商品搜索功能

9.3.1实现基本的搜索功能

这一节将给网上书店添加初级的搜索功能,能够让顾客按照关键字来搜索商品,具体实现的操作步骤如下。

1.创建商品搜索页面

先创建一个新的支持ASPVBScript的动态页面。

2.定义购书系统的数据库连接

由于同一应用可以共享数据库连接,因此这个页面仍然可以使用purchasesys数据库连接,不需要另外定义。

3.创建页面布局和页面元素

(1)在新页面中加入如图9-2所示的基本元素,其中标题和其他静态部分,读者都可以根据自己的喜好用前面各章节描述的创作静态页面的方法来设计,使页面美观实用。

图9-2搜索商品的网页页面

表单部分是必须有的,用它来生成动态行为,如图9-2所示,添加一个表单,表单包含的元素类型和属性如表9-1所示。

表9-1表单元素、属性和说明

元素类型

属性值

说明

表单

名字:

frmsearchcatalog

动作searchresult.asp

本表单

文本域

名字:

txtname

类型:

单行

接受商品名称或描述包含的字符串

按钮

名字:

btnsearchcatalog

标签:

开始查找

动作:

提交表单

提交商品信息的按钮

按钮

名字:

btnclear

标签:

清除重填

动作:

重置表单

把表达那内容清除到未填状态的按钮

(2)选择主菜单中的【文件】|【保存】命令,把这个页面保存到purchasesys子目录下,取名为searchcatalog.asp。

4.创建搜索结果页面

先创建一个新的支持ASPVBScript的动态页面,保存为searchresult.asp。

5.定义购书系统的数据库连接

由于同一应用可以共享数据库连接,因此这个页面仍然可以使用purchasesys数据库连接,不需要另外定义。

6.定义传递参数用的表单元素

在【应用程序】浮动面板的【绑定】选项卡中,定义【名称】的类型为“请求”的请求变量“txtname”。

图9-3【记录集】对话框

7.创建搜索用的记录集rstsearchresult

(1)创建一个复杂的查询记录集,这个记录集将用于在提交表单后,真正的执行数据库查询功能。

如图9-3所示,在【记录集】对话框中,单击【高级】按钮,进入高级【记录集】对话框,如图9-4所示。

(2)在高级【记录集】对话框中,设置各个选项。

【记录集】对话框中的【名称】和【连接】两项参数的设置不需要再作解释,完成如图9-4所示的设置即可。

(3)高级记录集是基于高级SQL查询语句SELECT的。

首先,在变量设置区域中添加在SELECT语句中需要用到的变量,使用变量可以方便地引用表单元素的值。

图9-4高级【记录集】对话框

在这里变量有两类值:

【默认值】和【运行时值】。

【默认值】在表单提交前起作用,因为此时表单元素还没有有效的值,同时它还在测试时起作用,如果单击【测试】按钮,出现的查询结果就是以默认值为条件填入上面的SQL语句所得到的查询结果。

【运行时值】通常都是用表单元素值,在表单提交后起作用,当然,也可以用别的动态值。

这里添加的变量如表9-2所示。

表9-2变量的值和说明

变量名

说明

mmnameStr

默认值:

XXXXXXXXXX

运行时值:

Request(“txtname”)

用于引用前一页表单提交后txtname的值

要点提示:

可以通过设置不同的默认值来测试复杂记录集的运行效果。

(4)接下来是到目前为止最难的一个任务,即编写SELECT查询语句,把它填入【SQL】文本框中,文本框中的完整的语句如下:

SELECT*

FROMcatalog

WHERE(nameLIKE'%'+LTRIM(RTRIM('mmnameStr'))+'%')

OR(descriptionLIKE'%'+LTRIM(RTRIM('mmnameStr'))+'%')

变量在SQL语句中作为字符串值出现。

%是SQL字符串模式中的一个通配符,它能够与任何字符串等值。

加号用于连接两个字符串,并不表示做加法的意思。

因此,形式为“'%'+字符串A+'%'”的含义为包含字符串A的任何字符串。

“字符串ALIKE字符串B”的意思为:

字符串A符合字符串B的形式。

表单未提交时,应该一条记录都查不到才对。

因此,mmnameStr的默认值设为XXXXXXXXXX,一般商品名称和描述中不会有这样的字样,以便基本能保证表单未提交时,即使通过URL全路径直接访问该结果页面,找到的商品列表也是空的。

LTRIM和RTRIM两个函数联用,用于去掉字符串左右两边的空格,因为空格也算作字符串的一部分,因此在字符串的比较中如果不去掉两边的空格,那么'Newton'和'Newton'将被认为是不同的值,这显然不是用户所期望的。

忘了去掉两边的空格,这是初学者常犯的错误之一。

整个查询条件的含义是,返回catalog表中所有name字段包含txtname表单元素输入值的,或者description字段包含txtname表单元素的那些记录。

(5)单击【确定】按钮,完成记录集定义。

8.布局返回结果

(1)在页面中表单的下方,用第8章中所述的服务器行为【重复区域】、【记录集分页】创建如图9-5所示的重复区域和导航条,设置重复区域和导航条时,应选择这些服务器行为针对rstsearchresult记录集起作用。

图9-5检索符合要求的商品列表

(2)由于希望导航条在没有记录时不要出现,所以还要添加一个【显示区域】类的服务器行为,来控制整个导航条的显示。

在【设计视图】中用鼠标选择导航条,在【应用程序】浮动面板的【服务器行为】选项卡中,单击按钮,选择【显示区域】|【如果记录集不为空则显示区域】命令,可以看到如图9-6所示的对话框,设置参数后单击【确定】按钮。

图9-6【显示区域】类的服务器行为

(3)相反,希望网页下方的“抱歉,没有符合条件的商品!

”这一条提示信息仅在没有记录时出现,因此,还要添加另一个【显示区域】类的服务器行为。

用鼠标选择整行信息后,在【应用程序】浮动面板的【服务器行为】选项卡中,单击按钮,选择【显示区域】|【如果记录集为空则显示区域】命令,可以看到如图9-7所示的对话框,如图设置【记录集】参数为rstsearchresult后,单击【确定】按钮确认。

图9-7【显示区域】类的服务器行为

9.保存页面

保存页面并更新主功能页面中的链接,指向搜索页面。

同步站点后,测试一下效果。

从主功能页面选择“搜索特定商品”,将看到如图9-8所示的页面。

查看名称或描述中包含“网络”两字的商品,结果如图9-9所示。

图9-8网站的主功能页面

图9-9商品查询结果

9.3.2实现复杂的搜索功能

(1)在如图9-10所示的搜索页面searchcatalog.asp中,调整页面布局,添加表单元素,调整后的表单元素如表9-3所示。

表9-3表单元素类型、属性和说明

元素类型

属性值

说明

表单

名字:

名字:

frmsearchcatalog

本表单

文本域

名字:

txtname

类型:

单行

接受商品名称或描述包含的字符串

单选按钮

名字:

radwhichcriteria

选定值:

bykeyword

初选状态:

已勾选

接受检索条件选择的单选按钮

单选按钮

名字:

radwhichcriteria

选定值:

bycategory

初选状态:

未勾选

接受检索条件选择的单选按钮

列表/菜单

名字:

selcategory

类型:

菜单

列表值:

电子商务、计算机(以下略)

初始化时选定:

电子商务

接受商品种类输入的菜单

按钮

名字:

btnsearchcatalog

标签:

开始查找

动作:

提交表单

提交商品信息的按钮

按钮

名字:

btnclear

标签:

清除重填

动作:

重置表单

把表单内容清除到未填状态的按钮

(2)在【应用程序】浮动面板的【绑定】选项卡中,增加名称为radwhichcriteria和selcategory,类型为“请求”的请求变量。

(3)在结果页面searchresult.asp,修改如图9-11所示的rstsearchresult记录集的设置。

图9-10搜索商品的网页页面

图9-11【记录集】对话框

其中,添加了用于在SELECT语句中引用表单中selcategory元素值的mmcategoryStr变量和用于引用radwhichcriteria元素值的mmwhichcriteriaStr变量。

另外,SELECT语句变得更加复杂,完整的SELECT语句如下:

SELECT*FROMcatalog

WHERE('mmwhichcriteriaStr'='bykeyword'AND((nameLIKE'%'+LTRIM(RTRIM('mmnameStr'))+'%')OR(descriptionLIKE'%'+LTRIM(RTRIM('mmnameStr'))+'%')))OR('mmwhichcriteriaStr'='bycategory'ANDcategory='mmcategoryStr')

由于两种搜索方式只取其一,因此对应的搜索条件表达式用OR连接,搜索条件1如下:

('mmwhichcriteriaStr'='bykeyword'

AND((nameLIKE'%'+LTRIM(RTRIM('mmnamestr'))+'%')

OR(descriptionLIKE'%'+LTRIM(RTRIM('mmnameStr'))+'%')))

其中包含两个子条件,必须同时满足才算满足搜索条件1,因此两个子条件用AND相连。

第1个子条件'mmwhichcriteriaStr'='bykeyword'表示单选按钮选中的是“根据关键字搜索”,第2个子条件就是原来那个根据关键字搜索用的搜索条件。

mmcategoryStr和mmwhichcriteriaStr变量的默认值设置,与原来mmnameStr变量的默认值设置目的是一样的,也是为了使搜索页面在未使用条件搜索之前应该不显示任何结果。

要点提示:

可以通过给变量设置不同的默认值的方式,单击【测试】按钮测试记录集的定义效果,即测试SELECT语句的效果。

(4)单击【确定】按钮完成记录集设置。

同步站点后,测试一下效果。

从主功能页面选择“搜索特定商品”,将看到如图9-12所示的页面。

默认情况下根据关键字查询,因此在关键字输入框输入“网络”将查到和前一小节同样的结果。

顾客也可以单击“根据种类查询”单选按钮,并在种类选择菜单中选择想查询的类别,例如“计算机”,即可得到如图9-13所示的结果。

如果输入不符合条件的商品,顾客将看到如图9-6所示的页面。

图9-12搜索特定商品的网页页面

图9-13查找商品的结果信息

图9-14查找商品的结果信息

要点提示:

本章只把搜索方式扩展到两个,因为如果要扩展到更多,使用的方法是一样的。

有兴趣的读者可以试一试定义更多的搜索方式。

另外,有关在页之间传递参数的方法,读者可能会产生这样的疑问:

为什么有的地方用Request.Form(“表单元素名”),有的地方用Request(“变量名”)呢?

到底这些写法有什么区别呢?

其实用Request请求变量来引用从表单或URL传递过来的参数时,有3种写法:

Request.Form(“表单元素名”)、Request.QueryString(“表单元素名”)和Request(“变量名”)。

Request.Form(“表单元素名”)用于获取通过POST方式提交的表单元素值。

Request.QueryString(“表单元素名”)用于获取通过GET方式提交的表单元素值,或者模拟GET方式的URL格式而手工编写的URL中的变量的值。

而Request(“变量名”)则最通用,两种方式的变量值都可以获取。

虽然一般情况下,获取POST方式提交的表单元素值,使用Request或Request.Form形式都可以。

但是,对于使用了【记录集分页】服务器行为的页面,要获取传过来的表单元素值,必须用Request形式。

这是因为Dreamweaver8在实现【记录集分页】

服务器行为的代码时,使用了模拟GET方式的URL来实现重复区域翻页,因此,如果使用Request.Form形式,只能在页面的第一次显示时取到正确的值,而在翻页以后就取不到正确的值了(通过Request.QueryString可以取到)。

在以上步骤中,对于在【应用程序】浮动面板的【绑定】选项卡上定义的请求变量,其实定义不定义都无所谓,并不是必须在【绑定】选项卡定义后才能引用请求变量。

在【应用程序】浮动面板的【绑定】选项卡中定义请求变量的作用是,提供方便的手段,可以在【设计视图】中随时以拖曳的方式来在页面中引用请求变量。

9.4实现专门的放入购物车功能

购物车这个名字来自于超级市场,其工作流程是当顾客选到了喜欢的商品后可放入购物车,需要时可显示购物车的信息,更新购物车中的商品信息,最后完成购物后到收银台付款。

购物车要实现的功能主要有:

将商品添加到购物车;

显示购物车中的信息;

更新或清空购物车中的商品信息。

9.4.1实现查看购物车的功能

先完成查看购物车商品清单的页面,将商品放入购物车成功后直接显示该页面,其操作步骤如下所述。

(1)创建查看购物车页面。

先创建一个新的支持ASPVBScript的动态页面。

(2)定义购书系统的数据库连接。

由于同一应用可以共享数据库连接,因此这个页面仍然可以使用purchasesys数据库连接,不需要另外定义。

(3)创建记录集rstcart,定义如下所述。

其中完整的SQL语句为:

SELECTcatalog.productID,catalog.name,catalog.category,

shoppingcart.quantity,catalog.description,catalog.listprice,catalog.image

FROMcatalog,shoppingcart

WHEREcatalog.productID=shoppingcart.productIDAND

LTRIM(RTRIM(shoppingcart.username))=LTRIM(RTRIM('mm_username'))

此处SELECT语句又与前面见到的那些不同。

第一,它没有用SELECT*来返回所有的字段,而是依次指定每个返回的字段。

注意:

表和从属字段的写法。

第二,它的返回结果来自两个表,而这两个表通过重叠的productID字段连接在一起。

另外,在比较两个字符串值的时候,同样加了LTRIM(RTRIM())来去除左右两边可能有的多余空格,如图9-15所示。

图9-15创建记录集

(4)创建页面布局和页面元素。

按如图9-16所示的布局设置新页面,类似的布局在第5章中已经介绍过。

对于重复区域,这里设置为重复所有记录。

保存页面为showcart.asp。

(5)在mainmenu.asp功能菜单里设置菜单中查看购物车的超链接,使它指向showcart.asp。

同步站点后,测试一下效果。

这里假定放入购物车的功能已经做好,购物车里已经有内容。

做完9.4.2节的操作就满足条件了。

图9-16购物车商品列表

图9-17购物车的内容清单

9.4.2完成放入购物车的基本功能

在本节中复习利用隐藏区域补足新记录的字段,然后实现专门的放入购物车的动作,其操作方法如下所述。

1.创建放入购物车页面

先创建一个新的支持ASPVBScript的动态页面。

2.定义购书系统的数据库连接

由于同一应用可以共享数据库连接,因此这个页面仍然可以使用purchasesys数据库连接,不需要另外定义。

3.定义记录集

将modifycatalog.asp中的记录集rstcatalog复制、粘贴过来直接用。

4.创建页面布局和页面元素

(1)在新页面中,加入如图9-18所示的基本元素。

其中标题和其他静态部分,可以根据自己的喜好来创作静态页面。

表单部分是必须有的,将用它来生成动态行为,如图9-18所示。

添加一个表单,表单包含的元素如表9-4所示。

图9-18选择商品页面

表9-4表单元素类型、属性和说明

元素类型

属性值

说明

表单

名字:

名字:

frmselectcatalog

本表单

隐藏区域

名字:

hidusername

值:

<%=Session(“MM_username”)%>

用于存放用户名的隐藏区域,插入新纪录到shoppingcart

表时会引用到

列表/菜单

名字:

selproductID

类型:

菜单

列表值:

动态

来自:

rstcatalog

值字段:

productID

标签字段:

productID

初始化时选定:

rstcatalog的“[第一个记录索引]”

接受商品号输入的菜单

文本域

名字:

txtcount

类型:

单行

用于存放购买数量的文本域

按钮

名字:

btnselect

标签:

放入购物车

动作:

提交表单

提交选购信息的按钮

(2)选择主菜单中的【文件】|【保存】命令,把这个页面保存到purchasesys子目录下,取名为selectcatalog.asp。

5.实现功能

(1)保存选购信息同样是利用【插入记录】服务器行为来实现,设置信息如图9-19所示。

关于设置方法,读者应该已经很熟练了,如果不熟悉,请复习前几章的内容。

(2)将【插入后,转到】页面设置为showcart.asp查看购物车页面。

(3)保存页面。

同步站点,测试一下效果。

测试画面略。

图9-19【插入记录】对话框

9.4.3防止放入重复的商品

在本节中将讨论下述2个问题:

①如何查看服务器行为的对应脚本代码;

②如何扩展【用户身份验证】|【检查新用户名】服务器行为来检查多个字段作为主键的记录。

读者可能已经发现,如果向购物车多次放入同一种商品,会引发错误,浏览器上显示Web服务器内部错误,这是因为username和productID是shoppingcart购物车表的主键,即同一用户的购物车中,每种商品只能出现一次。

为了防止顾客的上述误操作,需要采取检验措施来处理这种情况,操作方法如下。

(1)将如图9-20所示的创建错误信息提示页面,保存为purchasesys下的alreadybuy.asp。

(2)打开selectcatalog.asp,放入购物车页面。

(3)添加一个【用户身份验证】|【检查新用户名】服务器行为,并按图9-21所示进行设置。

图9-20错误提示信息页面

图9-21【检查新用户名】对话框

要点提示:

检查新用户名。

因为Dreamweaver8没有提供检查多个字段为主键的记录是否已存在的服务器行为,因此此处将利用【检查新用户名】服务器行为,并对Dreamweaver8自动生成的对应的脚本代码做简单的修改,来实现主键是否重复的检查功能。

(4)切换到【代码视图】,并且在【应用程序】浮动面板的【服务器行为】选项卡中,选中刚才添加的【检查新用户名】服务器行为,可以看到对应该服务器行为,Dreamweaver8生成了哪段脚本代码。

(5)找到MM_dupKeySQL="SELECTproductIDFROMshoppingcartWHEREproductID='"&MM_dupKeyusernameValue&"'"这一句,将它改为:

MM_dupKeySQL="SELECTproductIDFROMshoppingcartWHEREproductID='"&

MM_dupKeyusernameValue&"'ANDusername='"&CStr(Request.Form("hidusername"))&"'"

这一句脚本语句的作用是生成SELECT语句字符串,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2