




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 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. 创建商品搜索页面先创建一个新的支持 ASP VBScript 的动态页面。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. 创建搜索结果页面先创建一个新的支持 ASP VBScript 的动态页面,保存为 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 *FROM catalogWHERE (name LIKE %+LTRIM(RTRIM(mmnameStr)+%) OR (description LIKE %+LTRIM(RTRIM(mmnameStr)+%)变量在 SQL 语句中作为字符串值出现。 % 是 SQL 字符串模式中的一个通配符,它能够与任何字符串等值。加号用于连接两个字符串,并不表示做加法的意思。因此,形式为“ % +字符串 A + %”的含义为包含字符串 A 的任何字符串。“字符串 A LIKE 字符串 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 * FROM catalogWHERE (mmwhichcriteriaStr = bykeyword AND (name LIKE %+LTRIM(RTRIM(mmnameStr)+%) OR (description LIKE %+LTRIM(RTRIM(mmnameStr)+%) OR (mmwhichcriteriaStr = bycategory AND category = mmcategoryStr)由于两种搜索方式只取其一,因此对应的搜索条件表达式用 OR 连接,搜索条件 1 如下: (mmwhichcriteriaStr = bykeyword AND (name LIKE %+LTRIM(RTRIM(mmnamestr)+%) OR (description LIKE %+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 形式。这是因为 Dreamweaver 8 在实现【记录集分页】服务器行为的代码时,使用了模拟 GET 方式的 URL 来实现重复区域翻页,因此,如果使用 Request.Form 形式,只能在页面的第一次显示时取到正确的值,而在翻页以后就取不到正确的值了(通过 Request.QueryString 可以取到) 。在以上步骤中,对于在【应用程序】浮动面板的【绑定】选项卡上定义的请求变量,其实定义不定义都无所谓,并不是必须在【绑定】选项卡定义后才能引用请求变量。在【应用程序】浮动面板的【绑定】选项卡中定义请求变量的作用是,提供方便的手段,可以在【设计视图】中随时以拖曳的方式来在页面中引用请求变量。9.4 实现专门的放入购物车功能购物车这个名字来自于超级市场,其工作流程是当顾客选到了喜欢的商品后可放入购物车,需要时可显示购物车的信息,更新购物车中的商品信息,最后完成购物后到收银台付款。购物车要实现的功能主要有: 将商品添加到购物车; 显示购物车中的信息; 更新或清空购物车中的商品信息。9.4.1 实现查看购物车的功能先完成查看购物车商品清单的页面,将商品放入购物车成功后直接显示该页面,其操作步骤如下所述。(1) 创建查看购物车页面。先创建一个新的支持 ASP VBScript 的动态页面。(2) 定义购书系统的数据库连接。由于同一应用可以共享数据库连接,因此这个页面仍然可以使用 purchasesys 数据库连接,不需要另外定义。 (3) 创建记录集 rstcart,定义如下所述。其中完整的 SQL 语句为: SELECT ductID, , catalog.category,shoppingcart.quantity, catalog.description, catalog.listprice, catalog.imageFROM catalog, shoppingcartWHERE ductID=ductID AND 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. 创建放入购物车页面先创建一个新的支持 ASP VBScript 的动态页面。2.定义购书系统的数据库连接由于同一应用可以共享数据库连接,因此这个页面仍然可以使用 purchasesys 数据库连接,不需要另外定义。3. 定义记录集将 modifycatalog.asp 中的记录集 rstcatalog 复制、粘贴过来直接用。 4. 创建页面布局和页面元素(1) 在新页面中,加入如图 9-18 所示的基本元素。其中标题和其他静态部分,可以根据自己的喜好来创作静态页面。表单部分是必须有的,将用它来生成动态行为,如图 9-18 所示。添加一个表单,表单包含的元素如表 9-4 所示。图 9-18 选择商品页面表 9-4 表单元素类型、属性和说明元素类型 属性值 说明表单 名字:名字:frmselectcatalog 本表单隐藏区域 名字 :hidusername值:用于存放用户名的隐藏区域,插入新纪录到 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【检查新用户名】对话框要点提示:检查新用户名。因为 Dreamweaver 8 没有提供检查多个字段为主键的记录是否已存在的服务器行为,因此此处将利用【检查新用户名】服务器行为,并对 Dreamweaver 8 自动生成的对应的脚本代码做简单的修改,来实现主键是否重复的检查功能。(4) 切换到【代码视图】 ,并且在【应用程序】浮动面板的【服务器行为】选项卡中,选中刚才添加的【检查新用户名】服务器行为,可以看到对应该服务器行为,Dreamweaver 8 生成了哪段脚本代码。 (5) 找到 MM_dupKeySQL=“SELECT productID FROM shoppingcart WHERE productID=“ & MM_dupKeyusernameValue & “这一句,将它改为: MM_dupKeySQL=“SELECT productID FROM shoppingcart WHERE productID=“ & MM_dupKeyusernameValue & “ AND username=“ & CStr(Request.Form(“hidusername“) & “这一句脚本语句的作用是生成 SELECT 语句字符串,待接下来的语句交给数据库来执行。&运算符用于将两个字符串连接成一个长串。读者可以自己演算一下,比较原来生成的 SELECT 语句和修改后生成的 SELECT 语句,有什么不同。这样一改,就把检查某商品是否重复的 SELECT 语句扩展为符合要求的形式,从只检查 productID 字段,改为同时检查 productID 和 username 字段。(6) 保存页面 selectcatalog.asp。同步站点,测试一下效果。当试图向购物车放入车中已经有的商品时,将会得到如图 9-22 所示的错误提示信息。 图 9-22 重复购买提示信息9.5 完善购物车系统9.5.1 集成的搜索和选购功能在本节中将介绍如何在返回结果中集成功能。到目前为止,搜索功能和选购功能是互相独立的两个功能,如本章开头所述,更加方便的做法是把搜索和选购功能结合在一起,在搜索到的商品清单里直接提供了对商品的操作,比如选购,这样会更方便。现在就通过完善搜索页面来实现这一功能,其操作步骤如下。 (1) 打开 searchresult.asp。(2) 在重复区域中的返回记录表格中增加一行,在新行中添加一个表单,如图 9-23所示,表单包含的元素如表 9-5 所示。图 9-23 选购符合要求的商品表 9-5 表单元素类型、属性和说明元素类型 属性值 说明表单 名字:名字:frmsearchcatalog 本表单隐藏区域 名字 :hidusername值: MM_Username 会话变量的值用于存放用户信息隐藏区域 名字:hidproductID值:rstsearchresult 的值 productID字段用于存放通过 rstsearchresult中当前商品记录的商品号信息隐藏区域 名字:hidcount值:1用于存放需要购买的商品数量信息,这里固定为购买一份按钮 名字:btnselect标签:我要选购动作:提交表单提交选购信息的按钮(3) 添加一个如图 9-24 所示的 【插入记录】服务器行为。(4) 保存页面。同步站点后,测试一下效果。开始查找之后,返回的商品清单的每一项后都带有一个【我要选购】的按钮,如图 9-25 所示。如果用户想要选购商品,只要单击这个按钮即可。要点提示:这个选购动作,也要像上一节所述的那样,防止放入重复的商品。对于具体做法不再赘述,请读者自己来完成这一步。图 9-24【插入记录】对话框图 9-25 选购符合要求的商品9.5.2 集成的购物车功能在本节中将讨论以下 3 个问题: 如何手写代码,实现复杂的功能; 如何判断页面是被应用服务器正常地执行,还是由于表单提交被执行; UPDATE 语句的应用。如果不允许像购物车添加同一种商品的话,顾客第一次放入购物车的购买数量不够,想再买怎么办?利用 9.5.1 节介绍的方法,可以在查看购物车的页面集成更多的功能,包括实现修改购物数量这一功能,其步骤如下。 (1) 打开 showcart.asp。(2) 在重复区域中的返回记录表格中增加一行,在新行中添加一个表单,如图 9-26 所示,表单包含的元素如表 9-6 所示。图 9-26 修改购物车商品数量表 9-6 表单元素类型、属性和说明元素类型 属性值 说明表单 名字:名字:frmupdatecart 本表单文本域 名字:txtnewquantity类型:单行用于存放新的购买数量信息隐藏区域 名字 :hidusername值:MM_Username 会话变量的值用于存放用户信息隐藏区域 名字:hidproductID值:rstsearchresult 的 productID字段值用于存放通过 rstsearchresult中当前商品记录的商品号信息按钮 名字:btnsave标签:确认修改动作:提交表单提交修改信息的按钮接下来,读者将接触到本书到目前为止第一段完整的手写脚本代码,这是因为Dreamweaver 8 提供的服务器行为工具有限, 【更新记录】服务器行为不能更新主键由多个字段组成的记录。这段代码并不长,而且很容易看懂。(3) 进入代码视图,在源代码的开头找到: 在这句后面插入以下脚本代码,用于在表单提交后执行购物车更新动作。“) ThenMM_editConnection = MM_purchasesys_STRINGSet cmdSQL = Server.CreateObject(“ADODB.Command“)cmdSQL.ActiveConnection = MM_purchasesys_STRINGcmdSQL.CommandText = “UPDATE shoppingcart SET quantity = “ + LTRIM(RTRIM(CStr(Request(“txtnewquantity“) + “ WHERE LTRIM(RTRIM(productID) = “ + LTRIM(RTRIM(CStr(Request(“hidproductID“) + “ AND LTRIM(RTRIM(username) = “ + LTRIM(RTRIM(CStr(Request(“hidusername“) + “cmdSQL.ExecuteEnd If%注意: 红色部分标注的是命令的文本,不能使用 enter 键换行;frmUpdateCart 的“动作”属性为空,表示表单参数将传给本页处理。具体的处理代码就是上面这一段代码。上述代码通过一个 ADO 的 Command 对象的实例 cmdSQL 来利用 PurchaseSys 数据库连接,执行 cmdSQL.CommandText 定义的 UPDATE 语句。读者可以试着把这句 UPDATE语句的内容展开。(4) 在 frmUpdateCart 中加入一个隐藏区域,如表 9-7 定义。表 9-7 表单元素的类型、属性和说明表单 值 说明表单 名字:frmupdatecart 本表单隐藏区域 名字:MM_MyOWN值:frmupdatecart用于控制更新动作是否执行由于表单的元素在页面第一次被浏览器调用显示时没有值,直到表单被提交时,这些元素才有值,所以应用服务器可以利用 MM_MyOWN 是否有值来判断,本页的这一次被浏览器调用是初次被调用,还是由于表单提交而被再次调用执行。基于这个原理,读者可以看到第(3)步加入的脚本代码,就是利用这点来控制是否执行购物车更新动作的。(5) 保存页面。同步站点后,测试一下效果。现在,顾客在查看购物车时,就可以更改选购的数量。顾客所做的改变,在提交时会马上反映出来,如图 9-27 所示。图 9-27 更改购物车中选购数量的页面9.5.3 如何清空购物车本节将介绍 DELETE 语句的具体应用。增加一个清空购物车的功能,将方便顾客使用购物车,操作方法如下。(1) 打开 showcart.asp。(2) 如图 9-28 所示添加一个新的表单,表单包含的元素如表 9-8 所示。图 9-28 清空购物车表 9-8 表单元素类型、属性和说明元素类型 属性值 说明表单 名字: frmclearcart 本表单隐藏区域 名字 :hidusername值:MM_username 会话变量的值用于存放用户信息隐藏区域 名字:MM_MyOWNforClear值: frmclearcart用于控制清空动作是否执行按钮 名字:btnclear标签:确认清空动作:提交表单确认清空按钮(3) 进入代码视图,在源代码的开头找到: 在这句后面插入以下脚本代码,用于在表单提交后执行购物车更新动作。“) ThenMM_editConnection = MM_purchasesys_STRINGSet cmdSQLforClear= Server.CreateObject(“ADODB.Command“)cmdSQLforClear.ActiveConnection = MM_purchasesys_STRINGcmdSQLforClear.CommandText=“DELETE FROM.shoppingcart WHERE LTRIM(RTRIM(username) = “ + LTRIM(RTRIM(CStr(Request(“hidusername“) + “cmdSQLforClear.ExecuteEnd If%注意: 与 9.5.2 节的做法类似,上述代码通过一个 ADO 的 Command 对象的实例cmdSQLforClear
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爆破与安全试题及答案
- 保温工考试试题及答案
- 安全师试题及答案
- 物联网设备安全漏洞检测与防护策略在智能交通信号控制系统中的实战解析报告
- 2025年快时尚零售行业供应链优化与变革分析报告
- 安全教育考试试题及答案
- 安全规程考试试题及答案
- 职业教育未来趋势:2025年职业院校与企业深度合作研究报告
- 2025年医院信息化建设关键环节:电子病历系统医疗信息化战略规划报告
- 大学生膳食营养与健康
- 能源经营产品技术规范-三轮两轮电动车锂电池组技术规范V1.0
- 大学专业选择演讲课件
- 茂名酒店行业报告
- 富士康大过管理制度
- 一汽大众质量控制体系培训手册2
- 学校桌椅采购投标方案(技术标)
- 十典九章宣贯(终)
- 用人单位评价调查表
- 江苏开放大学2023年秋《公共关系原理与实务050010》过程性考核作业三参考答案
- 2023年上海市普通高中学业水平合格性考试物理试(含答案解析)
- 10kV~500kV输变电及配电工程质量验收与评定标准:06变电自动化工程
评论
0/150
提交评论