📄 makeinvoice.asp
字号:
<!--#INCLUDE file="config.inc" -->
<%
' 如果用户已经结账
If session("hasitem")<>session.sessionid Then
Response.Write "<center><font style=""font:10pt"">目前您的购物车里没有货物或者购买数为零!</font><center><br>"
response.write "<center><font style=""font:10pt"">请您继续在本店购物<a href=""show.asp"">>>go</a></font></center>"
response.end
end if
' 判断用户是否已经登录
if session("login")<>session.sessionid then
response.redirect "login.asp"
end if
' 函数sqlstr用来规范sql查询语句
function sqlstr(data)
sqlstr="'" & Replace(data,"'","''") & "'"
end function
' 连接数据库
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open ConnString
set objusersrs=server.createobject("ADODB.recordset")
ssql2="select * from users"
objusersrs.open ssql2,conn,1,3
loginuser=session("loginuser")
' 为了防止一切可能的情况,这里还对会员数据库进行检查。有这样的一种可能:管理员可能发现该用户不合法,将他从数据库中删除;而此时该会员用户正在进行定单操作。这就会产生一个冲突,事实上定单操作进行时,该用户已经不存在,所以在这里进行一个判断。如果发生这种情况,则提前终止程序的继续执行。
if objusersrs.eof then
response.write "<font style=""font:10pt"">对不起这个用户已经被删除,请<a href=""enroll.asp"">重新注册</a></font>"
response.end
end if
objusersrs.movefirst
do until objusersrs.eof
if loginuser = objusersrs("userid") then
exit do ' 找到了该用户,退出循环
end if
objusersrs.movenext
loop
' 求出定单号,为现有定单号中最大的一个再加上1
application.lock
' 定单号的计算涉及到数据表中已经存在的最大定单号,所以需要锁定。而且,下面的程序中涉及到多次对数据库的存储、修改操作。
set objordersrs=server.createobject("adodb.recordset")
ssql3="select orderid from orders order by orderid"
objordersrs.open ssql3,conn,1,3
if objordersrs.eof then
idtemp="00001" ' 表明这是第一个定单
else
objordersrs.movelast
' 因为打开数据表时排序了,所以最后一个记录就是最大号的记录。存储在数据库中的定单号是字符串型的,需先把字符串型的数据修改为数值型的,加上1以后再转换回来,并且需要规范为统一的5位定单号
idtemp=cint(objordersrs("orderid"))
idtemp=idtemp+1
end if
' 结束定单号的计算,开始规范化定单号
ordernumber = CStr(idtemp)
lentemp=len(ordernumber)
for i=lentemp to 4
ordernumber="0"&ordernumber
next ' 将定单号规范化,统一为5位
ordertime = now
custid=objusersrs("custid")
response.write "<center><font color=#FF0000 style=""font:10pt"">恭喜您完成了一次购物!</font></center>"
' 打印出定单的细节部分,在此同时把计算的结果存入数据库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)) ' 获取此项商品的购买数
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 ' 循环,读取
Response.Write "</TABLE><br>" & vbCrLf
' 将定单信息插入定单表
conn.execute("INSERT INTO orders VALUES ('"&ordernumber&"','"&ordertime&"','"&custid&"','"&details&"','"&totalitem&"','"&totalmoney&"',0)")
session("insert")=session.sessionid ' 标记用户刚进行了一次定单操作
session("hasitem")=false ' 完成了插入,则购物车为空
' 更新用户的积点数,积点数为数字型
points=cint(objusersrs("points"))
change=cint(totalmoney*0.1)
points=points+change
response.write "<font color=#FF0000 style=""font:10pt"">恭喜您在这次购物中获得了"&change&"点积分!</font>"
response.write "<br><font color=#FF0000 style=""font:10pt"">您的积分累计已达"&points&"分!继续努力!</font>"
ssql="update users set points="& points
ssql=ssql & " where custid=" & sqlstr(custid)
conn.execute(ssql)
application.unlock
%>
<HTML>
<HEAD>
<TITLE>下定单</TITLE>
<meta http-equiv="content-language" content="zh-CN">
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
<!--
input{background-color:#eeeeee;border-style:solid;border-color:#6666cc;border-width:1;}
td{font:10pt;}
-->
</style></HEAD>
<BODY style="font:10pt">
<center>请您继续在本店购物<a href="temp.htm">>>Go...</a></center></body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -