| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 605 人关注过本帖
标题:购物车中的数量如何得来?折腾了好久,请行家指教一下。
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1529
专家分:180
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:4 
购物车中的数量如何得来?折腾了好久,请行家指教一下。
购物车中的数量如何得来?折腾了好久,请行家指教一下。代码实在太长了,把无关的已删了一些,把主要的放上了。望谅介。详细的代码见附件
--------------------------------

您已经选择了以下商品
如果有您不需要的,在购买数中输入0即可
________________________________________
编号    名称    单价    购买数
 
f1    夏装    79            7

________________________________________
     现在结帐

---------------------------------------------
恭喜您完成了一次购物!

您的购买信息
商品名    单价(元)    购买数    合计金额(元)
夏装    79    7    553
--------------------------
我在第一个框中输入7,在第二个框中显示7,这个7从何处得来?请见makeinvoice.asp中用红色标记的代码:
3个asp.rar (6.34 KB)
   quantity=cint(session(i)) ' 获取此项商品的购买数  此处的session(i))来之何方           


下面是第一个框中输入7的代码
viewcart.asp
set conn=server.createobject("adodb.connection")
conn.open connstring
set objbuyrs=server.createobject("adodb.recordset")

' Session("insert")变量是记录用户进行定单操作的的变量。如果它不为空,则表明用户刚刚进行了一次定单操作。如果刚刚进行了一次定单操作,则需要首先清空购物车。清空的办法就是将购物车(Cookies字典)中各关键字的值设置为空值。在清空购物车的同时,还要将Session("insert")赋予一个非空值,以表明用户刚才进行的不是定单操作
if session("insert")=session.sessionid then
   session("insert")=false
   for each key in request.cookies("itembuy")
       response.cookies("itembuy")(key)=""
   next
end if

' 如果用户还没有选择过商品,那么记录选购商品的Cookies(“itembuy”)字典中将不会有任何关键字。用字典的haskeys属性来判断其是否不具有关键字,如果没有关键字,则提示用户当前购物车中没有商品
if not request.cookies("itembuy").haskeys then
       response.write "<font style=""font:10pt;color:ff0000"">目前您的购物车里没有商品</font>"
       session("hasitem")=false
       response.write "<hr color=#999933 size=1>"
       response.write "<input type=button value=""继续购物"" onclick=""window.close()"">"
else
  point=1'循环变量,用来遍历cookies 字典itembuy
  count=cint(request.cookies("itembuy").count)'字典中关键字的数量

  ' 此时表明Cookies(“itembuy”)字典中有关键字,但是并不知道是否都为空。因此用这个循环来判断字典中所有的关键字。用数字来引用Cookies字典中的关键字是Cookies字典关键字引用的另一种方法。如果遇到第一个不为空的关键字,则说明当前购物车中有商品,且该商品没有进行过定单操作,是一个合法的商品(所谓合法指可以进行交易),并且结束循环
  do while point<=count
     if request.cookies("itembuy")(point)="" then
        point=point+1'如果此关键字的值为空,则循环继续
     else
        exit do'如果遇到第1个不为空的关键字,则跳出循环
     end if
  loop
  if  point>count then
       response.write "<font style=""font:10pt;color:ff0000"">目前您的购物车里没有商品</font>"
       session("hasitem")=false
       response.write "<hr color=#999933 size=1>"
       response.write "<input type=button value=""继续购物"" onclick=""window.close()"">"
  else

   '开始制表显示购物车里所有的商品,并提供一个文本框,让用户填写所需要购买的数量。如果用户在其中填写了0,则表明放弃该商品的购买
   response.write "<font style=""font:10pt;color:ff0000"">您已经选择了以下商品<br>如果有您不需要的,在购买数中输入0即可</font>"
   response.write "<hr color=#999933 size=1>"
   response.write "<center><table><tr><td width=50>编号</td><td width=150>名称</td><td width=100>单价</td><td width=100>购买数</td></tr>"
  response.write "<form action=""forinvoice.asp"" method=post target=""main"" name=""view"">"
  
    do  while point<=count
       '获取商品的编号
       productid=request.cookies("itembuy")(point)
   

 if productid="" then
          point=point+1
       else  '如果这个cookie中的key不为空,才显示这条记录

       '根据编号在表中找到这个记录
       ssql="select * from product where productid=" & sqlstr(productid)
       objbuyrs.activeconnection=conn
       objbuyrs.source=ssql
       objbuyrs.open
      
       '输出当前记录的信息
       response.write "<tr><td>" & objbuyrs("productid") & "</td>"
       response.write "<td>" & objbuyrs("name") & "</td>"
       response.write "<td>" & objbuyrs("price") & "</td>"
   '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'下面的输入框用来收集每件商品的购买数,默认为1,'如果输入为0,则表示取消此件商品的购买。请注意这里给每个文本框起属性“name”的方式:将每个商品的货号作为各商品购买数文本框的名字。由于商品的货号在数据库中是惟一的,因此每个文本框的名字也是惟一,这样在定单操作程序中,使用该文本框的名字就能接收到它代表的商品的购买数和相应的商品货号
       nametemp=objbuyrs("productid")
      
      
   
       response.write "<td><input type=text size=2 value=1 name=" & nametemp & "></td>"
       response.write "</tr>"
       point=point+1
       '如果循环变量越界,则退出循环
       if point>request.cookies("itembuy").count then
          exit do
       end if
       '因为objbuyrs需要再次使用,所以必须先关闭
       objbuyrs.close
       end if
   loop
     
    response.write "</table>" '完成制表
        
    '关闭所有操作数据库的变量
    conn.close
    set conn=nothing

    response.write "<hr color=#999933 size=1>"
%>
   <input type=submit name="goinvoice" value="现在结账">&nbsp;
   <input type=button name="close" value="继续购物" onclick="window.close()">&nbsp;
   <input type=button name="remove" value="清空购物车" onclick="window.open('removecart.asp','_self')">
     </form>
<%
  end if
end if
%>
--------------------------
下面是第二框中的代码 makeinvoice.asp
     ' 打印出定单的细节部分,在此同时把计算的结果存入数据库orders表中。
         totalmoney=0 '此次定单的总金额
         totalitem=0       ' 定单中总共的商品种类数量
         details=""        ' 记录所有购买商品的名字和数量的字符串
         writetable=0      ' 标记将要写出的是表头部分还是表元部分
         i=cstr(1)         ' 该变量用来循环取得存储在Session变量中的需要购买的商品数
         for each key in request.cookies("itembuy")
             if request.cookies("itembuy")(key)<>"" then  
                productid=request.cookies("itembuy")(key)   ' 获取商品编号
                quantity=cint(session(i))           ' 获取此项商品的购买数  此处的session(i))来之何方?           
                   i=cint(i)+1
                i=cstr(i)

               ' 在表product中取出这个商品的名称和单价
                set objproductrs=server.createobject("adodb.recordset")
                ssql1="select * from product where productid=" & sqlstr(productid)
                objproductrs.open ssql1,conn,1,3
               
' 打印订购细节的表头部分。由于打印表头和打印表元的格式不同,因此设立了writetable来标识要打印的是表头部分还是表元部分。这里我们提供给用户
                if writetable=0 then
                   writetable=1
                   Response.Write "<center><br><font  style=""font:10pt"">您的购买信息</font><br><TABLE width=400 border=1 bordercolor=#999900 cellspacing=0>"
                   Response.Write "<TR><td width=100>"
                   Response.Write "<center>商品名</center></td>"
                   Response.Write "<td width=100>"
                   Response.Write "<center>单价(元)</center>"
                   Response.Write "</td><td width=100>"
                   Response.Write "<center>购买数</center>"
                   Response.Write "</td><TD width=100>"
                   Response.write "<center>合计金额(元)</center></TD>"
                   Response.Write "</TR>"
               end if
                if quantity<>0 then
                response.write "<tr><td>" & objproductrs("name") & "</td><td>" & objproductrs("price")
                response.write "</td><td>" & cint(quantity) & "</td>"
               
                onetotal=cint(objproductrs("price"))*cint(quantity)
                totalmoney=totalmoney+onetotal
                totalitem=totalitem+1
                  if details="" then
                     details=details & objproductrs("name")&"*"&quantity
                  else
                     details=details & "," & objproductrs("name")&"*"&quantity
                  end if
                response.write "<td>" & onetotal & "</td></tr>"
                end if
                objproductrs.close
             end if
         next     ' 循环,读取
        
搜索更多相关主题的帖子: 购物车 商品名 如何 夏装 信息 
2011-05-19 11:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1529
专家分:180
注 册:2006-6-3
收藏
得分:0 
没有高手呀?还是问题太简单了?
2011-05-21 11:22
wangjy500
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:13
帖 子:457
专家分:2569
注 册:2010-7-11
收藏
得分:10 
js实现

QQ:63572063
2011-05-21 22:27
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1529
专家分:180
注 册:2006-6-3
收藏
得分:0 
我问的是上述本代码中通过哪一句代码来实现的?
2011-05-22 16:44
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:10 
session是ASP的内置对象,这个对象可以跨页面创建,也就是说,在a页面创建session后,可以在b页面直接使用
2011-05-24 10:19
快速回复:购物车中的数量如何得来?折腾了好久,请行家指教一下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017816 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved