ASP程序实现购物车的方法手推车功能的实现

本文介绍了如何使用ASP程序来实现在线购物网站的‘手推车’功能,主要讨论了利用Cookie来保存用户购物信息的方法。包括添加商品、删除商品、修改商品数量、清空购物车及显示统计信息等功能的实现细节,以及JavaScript中操作Cookie的函数源码。

“手推车”是在线购物网站(零售)中一项重要的功能。本文将要探讨用ASP程序实现“手推车”功能的技巧。要想在网站上实现“手推车”功能,有好几种方法,比如用Cookie、Session或者隐藏帧等。这几种方法各有优缺点,这里着重讨论用Cookie来实现“手推车”功能。

  用Cookie实现 “手推车”功能的优缺点

  Cookie是通过服务器端CGI、脚本或者客户端脚本把信息保存在客户机上的,以便为服务器或客户机再次使用这些信息提供方便。在JavaScript中有一些专门用来对Cookie进行操作的函数,如设置Cookie值的Setcookie(name,value),删除Cookie的Deletecookie(name)等(详细见源码)。使用Cookie来保存“手推车”信息的优点是,即使当用户不小心关闭了浏览器窗口,“手推车”中的信息也不会丢失,并且它占用很少的服务器端资源,缺点是必须要求用户端浏览器支持Cookie并且打开它。

  “手推车”包含的功能子项

  1.把商品添加到“手推车”,就是订购。

  2.从“手推车”中删掉已订购的商品。

  3.修改“手推车”中某一商品的数量。

  4.清空“手推车”。

  5.显示,统计“手推车”中的商品。

  往“手推车”中 添加商品

  非常简单,就是把某一商品的信息(名称、价格、数量、折扣等)写入Cookie即可。这里不必把商品的所有信息都写入Cookie,只要记下商品在数据库中编号或ID(这里用catid表示)与商品的数量就行。在显示“手推车”信息时,根据catid可以从商品数据库中查询出这种商品的所有具体信息。往“手推车”中添加商品的实现方法如下:

  function Addcat(catid,number){ //把商品添加到“手推车”函数

  if (number<=0)DeleteCookie(″mycat″+catid); //如果商品的数量少于或等于0,则删除该商品

  else   SetCookie(″mycat″+catid,catid+″,″+number); //把商品ID与数量写入Cookie

  var cat=window.open(″showcat.asp″,″cat″,″toolbar=no,menubar=no,location=no,status=no,width=420,height=280″); //打开一个新窗口来显示统计的商品信息,即显示“手推车”}

  从“手推车”中 删掉商品

  也就是把Cookie中的该商品信息删除掉,调用Deletecat(catid)即可。

  function Deletecat(catid){

  DeleteCookie(″mycat″+catid); //从Cookie中删除

  var cat=window.open(″showcat.asp″,″cat″,″toolbar=no,menubar=no,location=no,status=no,width=420,height=280″); //在CAT窗口显示统计的商品信息,即刷新显示“手推车”   }

  修改“手推车”中 商品的数量

  原理跟往“手推车”中添加商品是一样的,只不过把商品的数量修改成现在所要的数量。

  显示与统计 “手推车”中的商品信息

  显示的效果由Showcat.asp实现。这里使用了ASP中Request.Cookies集合。Request.Cookies用来检索客户中Cookie值。我们通过遍历 Cookies 集合中的所有 Cookie 值取出我们的“手推车”的信息,然后从中分离出商品ID与商品数量。这里使用了VBscript中的SPLIT函数,SPLIT函数返回基于 0 的一维数组,其中包含指定数目的子字符串。

  取出商品ID与商品数量后再根据商品ID从商品数据库中查询出该商品的具体信息,最后输出商品的名称、单价、折扣、数量和小计等,并累计商品总件数与商品总金额。  

源代码如下:

Showcat.asp

<html><head><title>Cat</title></head>

<body>

<form name=cat>

<table border="1" width="360" cellspacing="0" cellpadding="3" bordercolorlight="#FFFFFF" bordercolor="#008000">

<tr>

<td width="100%" colspan="5" align="center"><b>您的手推车信息</b></td>

</tr>

<tr>

<td width="45">名称</td>

<td width="45">单价</td>

<td width="45">折扣</td>

<td width="45">数量</td>

<td width="45">小计</td>

<td width="135"> </td>

</tr>

<% dim conn,rs,sqlstr,cook,catid,number,sum,allnum,i

i=0

set conn=server.createobject("ADODB.CONNECTION") '建立数据库ADO连接实例

conn.open "DSN","USERID","PWD" '打开数据库连接

set rs=Server.CreateObject("ADODB.Recordset") '建立数据库ADO记录集连接实例

for each cook in request.cookies '遍历 Cookies 集合

if instr(cook,"mycat") then '判断是否“手推车”信息

catid=split(request.cookies(cook),",")[0] '分离出商品ID

number=split(request.cookies(cook),",")[1] '分离出商品数量

sqlstr="select * from cat where id="&catid&"" 'SQL查询语句

rs.open conn,sql,1,3 '执行查询,产生记录集

xiaoji=rs("单价")*rs("折扣")*number '计算小计

response.write "<tr><td width=45 ><font size=2 color=#800080>"&rs("名称")&"</font></td>"

response.write "<td width=45 ><font size=2 color=#800080>"&rs("单价")&"</font></td>"

response.write "<td width=45 ><font size=2 color=#800080>"&rs("折扣")&"</font></td>"

response.write "<td width=45 ><input type=text name=number"&i&" value="&number&" size=4></td>"

response.write "<td width=45 ><font size=2 color=#800080>"&xiaoji&"</font></td>"

response.write "<td width=135><input type=button value=更新 onclick=Addcat("&rs("ID")&",document.cat.number"&i&".value)> <input type=button value=删除 onclick=Deletecat("&rs("ID")&")></td></tr>

allnum=allnum+number '累计商品总件数

sum=sum+xiaoji '累计总金额

rs.close

i=i+1

end if

next

set rs=nothing

set conn=nothing

%>

<tr>

<td width="45">合计</td>

<td width="45"> </td>

<td width="45"> </td>

<td width="45"><%=allnum%></td>

<td width="45"><%=sum%></td>

<td width="135"><%=sum%></td>

</tr>

<tr>

<td width="360" colspan="6"> <font size="2"><a href="checkout.asp"><font color="#FF0000">结帐</font></a>

<a href=javascript:window.close()><font color="#008000">继续购物</font></a></font> <a href=javascript:Clearcookie()><font size="2" color="#0000FF">清空“手推车”</font></a></td>

</tr>

</table>

</form>

</body>

</html>

javascript中操作COOKIE的函数源码如下:

function Setcookie (name, value) { //设置名称为name,值为value的Cookie

var argc = SetCookie.arguments.length;

var argv = SetCookie.arguments;

var path = (argc > 3) ? argv[3] : null;

var domain = (argc > 4) ? argv[4] : null;

var secure = (argc > 5) ? argv[5] : false;

document.cookie = name + "=" + value +

((path == null) ? "" : ("; path=" + path)) +

((domain == null) ? "" : ("; domain=" + domain)) +

((secure == true) ? "; secure" : "");

}

function Deletecookie (name) { //删除名称为name的Cookie

var exp = new Date();

exp.setTime (exp.getTime() - 1);

var cval = GetCookie (name);

document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();

}

function Clearcookie() //清除COOKIE

{

var temp=document.cookie.split(";");

var loop3;

var ts;

for (loop3=0;loop3<temp.length;loop3++)

{

ts=temp[loop3].split("=")[0];

if (ts.indexOf('mycat')!=-1)

DeleteCookie(ts); //如果ts含“mycat”则执行清除

}

}

function getCookieVal (offset) { //取得项名称为offset的cookie值

var endstr = document.cookie.indexOf (";", offset);

if (endstr == -1)

endstr = document.cookie.length;

return unescape(document.cookie.substring(offset, endstr));

}

function GetCookie (name) { //取得名称为name的cookie值

var arg = name + "=";

var alen = arg.length;

var clen = document.cookie.length;

var i = 0;

while (i < clen) {

var j = i + alen;

if (document.cookie.substring(i, j) == arg)

return getCookieVal (j);

i = document.cookie.indexOf(" ", i) + 1;

if (i == 0) break;

}

return null;

}

--------------------------------------------------------------------------------
实例 zhaoyemeng,2007-04-21 17:41:11

<%
Sub PutToShopBag( Prodid, ProductList )
    If Len(ProductList) = 0 Then
       ProductList =Prodid
    ElseIf InStr( ProductList, Prodid ) <= 0 Then
       ProductList = ProductList&", "&Prodid &""
    End If
End Sub
%>

<html>
<head>
<title>购物车</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Robots" content="index,follow">
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
<%
ProductList = Session("ProductList")
Products = Split(Request("Prodid"), ",")
For I=0 To UBound(Products)
    PutToShopBag Products(I), ProductList
Next
Session("ProductList") = ProductList

if request("payment")="去收银台" then
response.redirect "payment.asp?action=1"
end if

If Request("cmdShow") = "Yes" Then
    ProductList = ""
    Products = Split(Request("ProdId"), ", ")
    For I=0 To UBound(Products)
       PutToShopBag Products(I), ProductList
    Next
    Session("ProductList") = ProductList
End If
If Len(Session("ProductList")) = 0 Then
Response.write "<table   height=100% width=100%   ><tr><td align=center>您的购物车为空,<a href=index.asp><b>继续购物</b></a> </td></tr></table>"
Response.end
end if
%>
<table width="600" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF">
<tr>
     <td><br>   <font color="#FF3333"><b>以下是您购物车中的商品信息,请核对正确无误后下单,非注册用户请牢记你的订单号以便日后查询!<br>    </b></font></td>
</tr>
<%
Set rsCheck=Server.CreateObject("ADODB.RecordSet")
strsql="select ID,Name,Score,Price2,amount,VipPrice,Stock from Product where ID in ("&Session("ProductList")&") order by ID"
rsCheck.open strsql,conn,1,1
%>
<tr> <td>
<form action="check.asp" method="POST" name="check">
       <table border="0" cellspacing="1" cellpadding="4" align="center" width="100%" bgcolor="#6699FF">
             <tr bgcolor="#FFFFFF" height="25" align="center">
             <td width="40">编 号</td>
             <td width="300">商 品 名 称</td>
             <td width="40">数量</td>
                   <td width="40">积分</td>
                   <td width="60">会员价</td>
                   <td width="40">邮费</td>
             <td width="60">成交价</td>
                  <td width="70">总 计</td>
           </tr>
<%
Sum = 0
SumS = 0
Quatity = 1
Do While Not rsCheck.EOF
      Quatity = CInt( Request.Form( "Q_" & rsCheck("ID")) )
      If Quatity <= 0 Then
         Quatity = CInt( Session(rsCheck("ID")) )
         If Quatity <= 0 Then Quatity = 1
      End If
Session(rsCheck("ID")) = Quatity

IF rsCheck("Stock") < Quatity Then
Quatity = 1
Session(rsCheck("ID")) = 1
response.write "<script language=javascript>alert('对不起,"&rsCheck("Name")&"暂时库存不足,请过段时间再来购买该商品!');window.close();</script>"
Conn.Close
Set Conn = Nothing
response.End()
End IF

Dim YourPrice,strprice2,strvipprice,ProScore
strprice2 = Round(rsCheck("Price2"),2)
strvipprice = Round(rsCheck("VipPrice"),2)
ProScore = rsCheck("Score")
If rsCheck("amount") = 0 Then
YourPrice = strprice2
Else
YourPrice= strprice2*LngDiscount
End If
YourPrice = Round(YourPrice,2)
Sum = Sum + (YourPrice + strvipprice)*Quatity
Sum=Round(Sum,2)
SumS = SumS + ProScore*Quatity
%>
           <tr bgcolor="#FFFFFF" height="25"align="center">
             <td><input type="CheckBox" name="ProdId" value="<%=rsCheck("ID")%>" Checked></td>
                  
             <td align="left"> <a href="product.asp?ID=<%=rsCheck("ID")%>" target="_blank"><%=rsCheck("Name")%></a></td>
             <td><input type="Text" name="<%="Q_" & rsCheck("ID")%>" value="<%=Quatity%>" size="2" class="form"></td>
                  <td><%=ProScore %></td>
                  <td><%=strprice2 %></td>
                  <td><%=strvipprice %></td>
                  <td><%=YourPrice %></td>
                  <td><%=Round((YourPrice + strvipprice)*Quatity,2) %></td>
           </tr>
           <%
      rsCheck.MoveNext
      Loop
rsCheck.close
set rsCheck=nothing
%>
<tr bgcolor="#FFFFFF">
<td colspan="4" align="center" valign="middle">             
                 <input type="submit" name="order" value="更新商品">    
                 <input type="submit" name="payment" value="去收银台">     
                 <input type="button" value="继续购物" language=javascript onClick="javascript:window.close()" name="button">
                 <input type="hidden" name="cmdShow" value="Yes">
                 </td>
<td colspan="4" height="25">
您现在是:<font color="#FF6600"><%= strTitle %></font>
享受折扣:<font color="#FF6600"><% = LngDiscount*100&"%" %></font><br>
折后总计:<font color="#FF6600"><%=Round(Sum,2) %></font> 元<br>
获得积分:<font color="#FF6600"><%=SumS %></font> 分
             </td>
           </tr>
       </table>
                </form>
</td>
</tr>
       </table>
</body>
</html>

 
使用: 第1 '================================================= '建立购物车对象,该对象用于直接在程序中调用 '================================================= dim uCart set uCart= new UserCart 第二 建立一个购物车 uCart.CreateCart (可以重复建立,因为里面有IsArray判断。所以建议这句在建立购物车对象后必写) 第三 增加购物车里的商品,在客户端点了某产品后,服务器端处理的ASP文件中接受传过来的产品标志,并访问数据库。分别把AddItem(aID产品标 志如ID,aName产品名称,aPrice1产品价格一,如单价,aPrice2产品价格二如会员价,aPrice3产品价格三如金牌会员价,如果没这么多可以置空 或置0,aCount购买数量,一般是一个,多个的话后面可以用修改函数修改,aImage产品图片地址) 使用方法:aa=uCart.AddItem(aID产品标志如ID,aName产品名称,aPrice1产品价格一,如单价,aPrice2产品价格二如会员价,aPrice3产品价格 三如金牌会员价,如果没这么多可以置空或置0,aCount购买数量,一般是一个,多个的话后面可以用修改函数修改,aImage产品图片地址),返回 true表示成功,false表示失败 第四 增加了以后进如显示页面,就要用到查看购物车 mycart=uCart.ViewCart() For i =LBound(myCart,2) to UBound(myCart,2) if myCart(0,i)"" then myCart(0,i) '获取标号 myCart(1,i) '获取单价 。。。以此类推 end if next 第五 查看了,可以修改购物车,如更改数量等,或是删除其中的 call uCart.ModifItem(mID唯一标志号,mCount产品数量,mFlag-标志 0-添加 1-删除,2-修改 3-清空) '先用给后面参数赋值 修改其中的商品 可以用第四个显示,先接受session的值,然后循环修改 或清空购物车 uCart.RemoveAll() 然后结帐,很简单 myprice=uCart.TPrice() 然后myprice(0)是产品单价的总价格,myprice(1)是产品会员价的总价格,myprice(2)是高级会员的总价格,myprice(3)是产品总数量商品装入购物车,这时需要用cookie或session来做一个不同页面间传递的全局变量,也就是说关了浏览器(针对session)或清楚了cookie等原因,本次购物车会消失,就象你今天在商场买了一车的东西,最后没结帐,明天肯定没了,又归位了,当然要有特殊需要保存,可以写数据库!所以这里记录的只需要是该商品的相关信息就可以了,这里我们记录他的 物品ID, 物品单价, 物品名称, 物品数量
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值