蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年8月25日 8:28

[ASP]共享我改写的购物车的[session部分]代码

都是过程和函数的方式。
原来那个是类的形式,我比较菜,不会用,都改成过程和函数的了。
原来那个是固定大小数组的,不爽,我改成动态数组的了。买多少东西都行啊。
原来那个添加商品的时候,如果商品已经存在,它是直接更新成新的数量的,
是不是不符合习惯啊,我改成在原来数量上加上新数量了。
使用方法:
可以把下面的代码放在一个asp文件里,include一下。

使用方法范例:
===============================
<%
myAction=trim(request("myAction"))
select case myAction
[b]case "addProduct"[/b]
        ID=trim(request("ID"))
        quantity=trim(request("quantity"))
        if quantity="" then
                quantity=1
        end if
        [color=blue]call AddItem(ID,quantity)[/color]
[b]case "addManyProduct"[/b]
        for i=1 to request("ID").count
                myNumber=request("quantity")(i)
                If myNumber>0 Then
                        [color=blue]call AddItem(CLng(request("ID")(i)),CLng(myNumber))[/color]
                End IF
        next
[b]case "modifyNumber"[/b]
        for i=1 to request("ID").count
                myNumber=request("quantity")(i)
                If myNumber<=0 Then
                        myNumber=1
                End IF
                [color=blue]call UpdateItem(CLng(request("ID")(i)),CLng(myNumber))[/color]
        next
[b]case "deleteProduct"[/b]
        ID=trim(request("ID"))
        [color=blue]call RemoveItem(Clng(ID))[/color]
[b]case "clearCart"[/b]
        Session("Cart")=NULL
end select
'session.Abandon
call showCart()
%>
===================================
[code]<%
Sub CreateCart()
  If IsArray(Session("Cart")) = False Then
    Dim aryCart()
    Redim aryCart(1,0)
    Session("Cart") = aryCart
  End If
End Sub

Function CheckCart()
  If IsArray(Session("Cart")) Then
    CheckCart = True
  Else
    CheckCart = False
  End If
End Function

Function CheckItem(ID)
  Dim aryCart,findFlag,i
  If CheckCart = True Then
    aryCart = Session("Cart")
    findFlag=False
        For i = LBound(aryCart,2) To UBound(aryCart,2)
          If CLng(aryCart(0,i)) = ID Then
            findFlag=True
            Exit For
          End If
        Next
        CheckItem = findFlag
  End If
End Function

SUB RemoveItem(ID)
        ID=Clng(ID)
        IF NOT CheckItem(ID) Then
                Exit SUB
        End If
  dim i,intPos,aryCart,newSize
  aryCart = Session("Cart")
  For i = LBound(aryCart,2) To UBound(aryCart,2)
    If Clng(aryCart(0,i)) = ID Then
          intPos = i
          Exit For
        End If
  Next
  For i = intPos To UBound(aryCart,2) - 1
    If Not aryCart(0,i) = "" Then
          aryCart(0,i) = aryCart(0,i+1)
          aryCart(1,i) = aryCart(1,i+1)
    End If
  Next
  newSize=UBound(aryCart,2)-1
  redim preserve aryCart(1,newSize)
  Session("Cart") = aryCart
End SUB

SUB UpdateItem(ID,Num)
  ID=Clng(ID)
  Num=Clng(Num)
  dim aryUpdateCart,i
  aryUpdateCart = Session("Cart")
  For i = LBound(aryUpdateCart,2) To UBound(aryUpdateCart,2)
    If CLng(aryUpdateCart(0,i)) = ID Then
          aryUpdateCart(1,i) = Num
          Session("Cart") = aryUpdateCart
          Exit For
        End If
  Next
End SUB

SUB AddItem(ID,Num)
  ID=Clng(ID)
  Num=Clng(Num)  
  Dim btnCartStatus,aryAddCart,newSize,i
  btnCartStatus = CheckCart
  If btnCartStatus = False Then
    CreateCart
    aryAddCart = Session("Cart")
    aryAddCart (0,0) = ID
    aryAddCart (1,0) = Num
        Session ("Cart") = aryAddCart
        Exit SUB
  ElseIf btnCartStatus = True Then
        If CheckItem(ID) = True Then
            aryAddCart = Session("Cart")
            For i = LBound(aryAddCart,2) To UBound(aryAddCart,2)
                    If Clng(aryAddCart(0,i)) = ID Then
                                  aryAddCart(1,i) = aryAddCart(1,i)+Num
                                  Session("Cart") = aryAddCart
                                  Exit For
                        End If
                  Next
        ElseIf CheckItem(ID) = False Then
          aryAddCart = Session("Cart")
          newSize=UBound(aryAddCart,2)+1
          redim preserve aryAddCart(1,newSize)
                  aryAddCart(0,newSize) = ID
                  aryAddCart(1,newSize) = Num
                  Session("Cart") = aryAddCart
                  Exit SUB
        End If
  End If
End SUB
Sub showCart()
        If CheckCart=False Then
                response.write "您的购物车里没有商品"
                Exit Sub
        End if
        aryCart=Session("Cart")
        dim productCount,moneyCount
          '========这里根据自己的需要写吧==========
End Sub
%>[/code]

正在研究着咧~~~

小雨:
研究了一下,还是jsp写起来方便,你觉得呢?

不错哦.谢谢.可以置顶了.
问题:设置购物数量为0的时候,能否自动删除这个物品?

session太占资源啊,怎么解决呢

非常棒的思路,有些问题请教以下小雨版主:

1.session中的数组是这样的(153,3,141,1,166,2 )
如何把他们分割开来一行行列出来,每个产品的信息应该是(153,3)(141,1)(166,2)这样的吧

2.如何调用购物车中每个产品在数据库里的详细信息
难道每一条都要用一次       
set rs=conn.execute("SELECT * FROM [products] where [ID]="&id&"")吗?
真是这样的话,购物车里有多少个产品就要查询多少次,好像也太。。。


1。我用的是二维数组,
===============
100 103 104 110
1.....30...2.....41
================
像上面,每列是商品号和数量,简单循环就行了。
其实不管你session里怎么保存的,总还是有规律的吧,只要根据规律拆分就行了。

2。你说的这个是最直接,最简单,最看着不爽的方法。
其实也没啥大碍,asp的效率没有我们想得那么差。

如果想查询一次,那么就从session里把商品编号取出来,拼接成1,2,3的形式,
然后用where productID IN(1,2,3)这种方式查询吧。
....
rs.open sql,conn,0,1
productArray=rs.GetRows '把查询结果保存在productArray里,这是一个二维数组
rs.close
..
注意这个二维数组和上面1里的数组格式是一样的,每列是一条记录。
最后一步,就是根据session里的商品编号到productArray里去找对应的记录。
还是个循环。

减少的是数据查询的次数,增加的是数组查询。效率应该高点吧?




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com