if(document.loginForm.USERID.value==null|| document.loginForm.USERID.value=="")
{
alert("请输入您的用户名!");
document.loginForm.USERID.focus();
flag=true;
}
if(document.loginForm.PASS.value==null|| document.loginForm.PASS.value=="")
{
alert("请输入密码!");
if (flag==false)
document.loginForm.PASS.focus();
flag=true;
}
if(flag==false)
{
document.loginForm.submit();
}
return false;
}
function userloginkeydown()
{
if (window.event.keyCode=="13")
userloginsubmit();
}
function userloginuserid()
{
if (window.event.keyCode=="13")
document.loginForm.PASS.focus();
}
</script>
在例程3-3中函数userloginsubmit()主要在用户单击【登录】按钮的时候验证用户输入的用户名、密码是否为空。
函数userloginkeydown(),主要完成当用户按回车键时,提交表单,也就时说当用户输入用户名、密码后单击【登录】按钮或者按回车键都会提交表单。实现这个功能是为了用户界面友好,方便最终用户的使用。
函数userloginuserid()主要完成当用户输入完用户名按回车时,焦点跳到输入密码的文本框中。
Userlogindo.asp主要完成用户登录的判定,把用户登录信息更新数据库和session等,例程3-4为页面Uselogindo.asp登录代码。
例程 3-4 Userlogindo.asp 登录代码
<%
dim dbc, url
dim forwardURL
dim strpassword, returnurl
strPassword=Request("strPassword")
stremail=request("stremail")
strpassword=replace(strpassword,"=","")
stremail=replace(stremail,"=","")
stremail=replace(stremail,"'","''")
strpassword=replace(strpassword,"'","")
returnurl=request("returnurl")
if strEmail="" then
sError = sError & "请输入Email<br>"
end if
if strPassword="" then
sError = sError & "请输入口令<br>"
end if
If sError="" then
RetrieveLoginData
else
Serror= "请登录" & "<br>" & Serror
end if
setsess "Loginerror",Serror
Setupreturnurl url
Response.redirect url
Sub RetrieveLogindata
Dim fieldvalue
If GetSess("Login")="" then
SetSess "Login","Force"
end if
LocateCustomer strLastName, stremail , strpassword
If strCustomerID <>"" then
LngLoginCount=lngLoginCount+1
UpdateCustomerSessionData
UpdateLoginData
SetSess "Login",strlastname
SetSess "realname",strlastname
Else
SError = SError & getlang("langLoginLocateFail")
SetSess "Login", ""
end if
ShopCloseDatabase dbc
set rs=nothing
end sub
Sub UpdateLoginData
Dim dbc
'on error resume next
OpenCustomerDB dbc
'response.write "Login count" & lngLoginCount
sql = "update customers set "
sql = sql & "logincount=" & lnglogincount
'sql = sql & ",lastlogindate='" & date() & "'"
sql = sql & ",lastlogindate=" & datedelimit(date() )
sql = sql & " where contactid=" & strcustomerid
dbc.execute(sql)
ShopCloseDatabase dbc
end sub
' determine where to go to
Sub SetupReturnurl (url)
if returnurl<>"" then
if Serror="" then
url=returnurl
exit sub
else
url="UserLogin.asp"
end if
exit sub
end if
If Getsess("Followonurl")="" and getsess("Currenturl")="" then
If Serror="" then
url=getconfig("xhome")
else
url="UserLogin.asp"
end if
exit sub
end if
If Serror="" then
url=GetSess("FollowonURL")
else
url=getSess("CurrentURL")
end if
end sub
%>
3.5前台界面设计与实现
3.5.1首页设计
一般的电子商务网站,首页所含的信息量是非常大的,为了方便维护,对首页进行分块处理,然后用包含的方式,把各个块组装起来,这样不仅使页面结构清晰,而且维护方便。例程3-5为首页的参考代码。
例程3-5 用户首页代码
<%
dim productid
productid=Request("id")
if (productid="") then
response.redirect "index.asp"
Response.end
end if
dim strUrlGo
strUrlGo="/Comment.asp?id="&productid
%>
产品浏览
页面Dir.asp和页面list.asp的实现类试,这里只介绍list.asp页面实现的核心部分。例程3-6为页面ist.aspl的开始部分代码。
图3-19 鲜花分类的目录式检索浏览页面
例程3-6 list.asp页面开始部分代码
<%
dim pagenum
pagenum=16
%>
在例程3-6中pagenum定义每页显示的产品数量,默认显示16个鲜花产品。〈!_ _#includefile=”commondb.asp”_ _>引入commondb.asp公用文件。
从例程3-6可以看出当产品个数大于16的时候,就需要显示在下一页,因此需要实现产品的分页显示,例程3-7为list.asp产品分页显示的代码。
例程3-7 list.asp产品分野显示的代码
<%
dim dir,strPage,nPage
dir=Request("dir")
strPage=Request("Page")
if (strPage="") then
nPage=1
else
nPage=CInt(strPage)
end if
dim MyValue,property
MyValue=Request("MyValue")
property=Request("property")
if (property="") then
property="0"
end if
if (MyValue="") then
MyValue="0"
end if
dim result
result=GetListFlower(property,MyValue)
dim aryReturn,i
aryReturn = Split(result,",")
dim startelment,endelment
startelment=(nPage-1)*pagenum
endelment=nPage*pagenum-1
if (endelment> UBound(aryReturn)) then
endelment=UBound(aryReturn)
end if
dim strSplitPage,allpage
allpage=CInt((UBound(aryReturn)-LBound(aryReturn))/pagenum-0.5) +1
strSplitPage=" <b><font color=red>"&nPage&"/"&allpage&"</font> 页</b> "
dim startShow,endShow,nextShow
if ((nPage-5)<=0) then
startShow=1
else
startShow=nPage-5
end if
if ((nPage+5)>allpage) then
endShow=allpage
else
endShow=nPage+5
end if
dim k
For k=startShow To endShow
dim showone
showone="<a href='List.asp?property="&property&"&MyValue="&MyValue&"&Page="&k&"'>"&k&"</a> "
strSplitPage=strSplitPage&showone
Next
if (nPage>1) then
nextShow="<a href='List.asp?property="&property&"&MyValue="&MyValue&"&Page="&(nPage-1)&"'>上一页</a> "
end if
nextShow=nextShow&" "
if (nPage<allpage) then
nextShow=nextShow&"<a href='List.asp?property="&property&"&MyValue="&MyValue&"&Page="&(nPage+1)&"'>下一页</a> "
end if
%>
<!--#include file="inc/navigation.asp"--></td>
<td width="10"> </td>
<td valign="top">
<table border=0 cellspacing="0" cellpadding="0" width=99%>
<tr bgcolor=#ddFFFF><td colspan=3 height=10>
<%=strSplitPage%>
</td><td align="right">
<%=nextShow%>
</td></tr>
<%
dim n
n=0
For i = startelment To endelment
dim one
one=GetProduct(aryReturn(i))
if one(FIELDAUTOID)>0 Then
if ((n mod 4)=0) then
response.write "<tr>"
end if
%>
<td width=20% align="center">
<!--#include file="inc/ListOne.asp"-->
</td>
<%
if ((n mod 4)=3) then
response.write "</tr>"
end if
n=n+1
end if
Next
%>
例程3-8为list.asp显示产品的代码。
例程3-8 list.asp显示产品的代码
<%
dim n
n=0
For i = startelment To endelment
dim one
one=GetProduct(aryReturn(i))
if one(FIELDAUTOID)>0 Then
if ((n mod 4)=0) then
response.write "<tr>"
end if
%>
<td width=20% align="center">
<!--#include file="inc/ListOne.asp"-->
</td>
<%
if ((n mod 4)=3) then
response.write "</tr>"
end if
n=n+1
end if
Next
%>
例程3-9为页面listone.asp的参考代码。
例程3-9 页面listone.asp 的参考代码
<a href="Detail.asp?id=<%=one(FIELDAUTOID)%>" target="_blank">
<img alt=鲜花 border=0 height=80 src="<%=one(FIELDNETIMAGEMID) %>" width=80>
</a>
<br>
<%=one(FIELDNAME)%><br>
销售价格:<%=one(FIELDSALEPRICE)%>元<br>
<a href="java script:add2cart('<%=one(FIELDAUTOID)%>')"><img src="images/buy.gif" width="40" height="17" border="0"></a>
例程3-9中one是在例程3-8中调用Getproduct()方法得到的一个产品对象(one=Getproduct(aryreturn(i)),one(FIELDNAME)等是获得产品的名称等属性。
3.5.2产品详细信息
用户在产品浏览页面中单击某个产品,就会进入产品的详细信息页面,产品详细页面主要包含两部分内容:一部分是产品信息显示:另一部分是针对该产品的用户评论。图3-20为产品详细信息页面。
图3-20 产品信息页面
产品信息页面的实现文件问Detail.asp,例程3-10为Detail.asp页面的参考代码。
例程3-10 Detail.asp页面的参考代码
<%
dim productid
productid=Request("id")
if (productid="") then
response.redirect "index.asp"
Response.end