购物车中的数量如何得来?折腾了好久,请行家指教一下。
购物车中的数量如何得来?折腾了好久,请行家指教一下。代码实在太长了,把无关的已删了一些,把主要的放上了。望谅介。详细的代码见附件--------------------------------
您已经选择了以下商品
如果有您不需要的,在购买数中输入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="现在结账">
<input type=button name="close" value="继续购物" onclick="window.close()">
<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 ' 循环,读取