租赁信息表
字段名 描述 键 类型 长度 空值 默认值
TAC_ID_N 租赁号 ● auto count Not Null
TAC_VI_ID_FN 租赁影片ID ○ int Not Null
TAC_UI_ID_FN 租赁用户ID ○ int Not Null
TAC_ReserveTime_D 预定时间 datetime Not Null
TAC_TimeOut_B 是否超时 datetime Not Null False
TAC_Return_B 是否返还 boolean Not Null False
TAC_StartTime_D 起租时间 datetime
TAC_Lease_N 租期 int 1
TAC_EndTime_D 结租时间 datetime
TAC_UserPayment_N 用户付款数 single 0
TAC_Status_N 租赁状态 int Not Null
影片承载介质表
字段名 描述 键 类型 长度 空值 默认值
TI_ID_N 介质ID ● autocount Not Null
TI_Description_S 介质名 varchar 100 Not Null
影片信息表
字段名 描述 键 类型 长度 空值 默认值
VI_ID_N 影片ID ● autocount Not Null
VI_TI_ID_FN 影片介质ID ○ int Not Null
VI_VS_ID_FN 影片类型ID ○ int Not Null
VI_PMT_ID_FN 租价方案ID ○ int Not Null
VI_PI_ID_FN 供应商ID ○ int Not Null
VI_Title_S 影片名 varchar 50 Not Null
VI_Content_S 内容 big varchar
VI_Director_S 导演 varchar 100
VI_Playactor_S 演员 varchar 100
VI_Issuer_S 发行商 varchar
VI_Rank_N 评价 int Not Null 1
VI_RentCount_N 出租次数 int Not Null 0
VI_Count_N 浏览计数 int Not Null 0
VI_Status_N 影片状态 int Not Null 1
VI_AddTime_D 添加时间 datetime Not Null Now()
VI_Img_S 图片地址 varchar 150
影片类型表
字段名 描述 键 类型 长度 空值 默认值
VS_ID_N 影片类型ID ● autocount Not Null
VS_Description_S 描述 varchar 50 Not Null
VS_Count_N 类型浏览技术 int Not Null 0
VS_RentCount_N 类型租赁计数 int Not Null 0
用户信息表
字段名 描述 键 类型 长度 空值 默认值
UI_ID_N 用户ID ● autocount Not Null
UI_PI_ID_FN 供应商ID ○ int Not Null 0
UI_Name_S 用户名 varchar 20 Not Null
UI_Password_S 密码 varchar 100 Not Null
UI_IsLock_B 用户是否锁定 boolean Not Null False
UI_CerRank_N 信用级别 int Not Null 0
UI_IsProvider_B 用户是否为供应商 boolean Not Null False
UI_Email_S Email varchar 50 Not Null
UI_QQ_S QQ varchar 20
UI_IsAdmin_B 用户是否为管理员 boolean Not Null False
UI_RentCount_N 用户租赁计数 int Not Null 0
注意:键类型中,“●”标注的为主键;“○”标注的为外键。
‘如果检测到浏览器传递的值IsReg不为空,则执行代码;如果为空,则显示页面
‘代码部分
If Request("IsReg")<>"" Then
'判断用户输入的合法性
‘用户名、密码、确认密码、Email不能为空
If Request("UserName")="" Or Request("UserPassword")=""&_
Or Request("ConfirmPassword")="" Or Request("Email")="" Then
ResultMsg("必填的项目没有填写,请返回重新填写完整的信息!")
Response.End
End If
‘用户名不能为一排空格
Dim tmpUserName
For i=1 To Len(Request("UserName"))
tmpUserName=tmpUserName&" "
Next
If tmpUserName=Request("UserName") Then
ResultMsg("请不要输入空格代替必填项目,请返回重新填写完整的信息!")
Response.End
End If
‘密码与确认密码的输入必须匹配
If Request("UserPassword")<>Request("ConfirmPassword") Then
ResultMsg("两次输入的密码不匹配,请返回重新输入!")
Response.End
End If
‘Email必须符合格式
If IsValidEmail(Request("Email"))=False Then
ResultMsg("Email输入不符合规范,请返回重新输入!")
Response.End
End If
‘若QQ号不为空,则输入必须为数字
If Request("QQ")<>"" Then
If IsNumeric(Request("QQ"))=False Then
ResultMsg("QQ号码必须为数字,请返回重新输入!")
Response.End
End If
End If
‘用户名与密码中不能包含SQL字符“’”
If InStr(Request("UserName"),"'")>0 Or InStr(Request("UserPassword"),"'")>0 Then
ResultMsg("字符“'”为非法输入,请去掉此字符!")
Response.End
End If
‘用户名、密码、Email和QQ的字符数量不能超过数据库项目的数据类型的限制
If Len(Request("UserName"))>20 Or Len(Request("UserPassword"))>20&_
Or Len(Request("Email"))>50 Or Len(Request("QQ"))>20 Then
ResultMsg("输入超出了最大字符数量限制(用户名20字符以内”&_
”,密码20字符以内,Email 50字符以内,QQ 20字符以内。)")
Response.End
End If
'取得用户输入
Dim UserName,UserPassword,Email,QQ
UserName=Server.HTMLEncode(Request("UserName"))
'根据用户名判断用户是否已存在
strSQL="SELECT UI_Name_S FROM [UserInfo]”&_
” WHERE UI_Name_S='"&Request("UserName")&"'"
Set objRS=Server.CreateObject("ADODB.RecordSet")
objRS.Open strSQL,objConn,1,3
‘如果没有找到任何用户,则输出操作信息
If Not objRS.BOF Or Not objRS.BOF Then
ResultMsg("所注册的用户名已存在,请更换用户重新注册!")
Response.End
End If
objRS.Close
'将用户信息写入数据库
strSQL="INSERT INTO [UserInfo] (UI_PI_ID_FN,UI_Name_S,UI_Password_S”&_
”,UI_IsLocked_B””,UI_CerRank_N,UI_IsProvider_B,UI_Email_S,UI_QQ_S,”&_
”UI_IsAdmin_B,UI_RentCount_N)VALUES(0,'"&UserName&"','"&UserPassword&_
"',False,0,False,'"&Email&"','"&QQ&"',False,0)"
objConn.Execute(strSQL)
ResultMsg("您的注册已成功!")
Set objRS=Nothing
CloseDatabase
Else
5.2.2用户登陆界面及代码分析
用户登录时,需要检测用户名和用户密码;用户名和密码通过检测后,需要判断用户是否被锁定。检测通过后,还需要遍历数据库中的数据,找出有没有用户的租赁超过了期限,如果超过了则在数据库中进行标注。
代码分析:
<!--#include file="CONN.ASP"-->
<!--#include file="ChkSQL.asp"-->
<!--#include file="ChkErr.asp"-->
<%
Dim strSQL,objRS
Set objRS=Server.CreateObject("ADODB.RecordSet")
'取得用户文件名、密码
Dim UserName,UserPassword
'过滤SQL字符,防止SQL漏洞注入
UserName=ChkSQL(Request("UserName"))
‘UserPassword= Request("UserPassword")
'在数据库中查找用户
strSQL="SELECT * FROM [UserInfo] WHERE UI_Name_S='"&UserName&"'"
objRS.Open strSQL,objConn,1,3
'判断用户是否存在
'若用户不存在则通过GetErr()函数提交并显示错误代码
If objRS.BOF Or objrs.EOF Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(3)
Response.End
Else
'若用户存在,则检测用户密码的正误
If objRS("UI_Password_S")<>UserPassword Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(4)
Response.End
End IF
'判断用户是否被锁定
If objRS("UI_IsLocked_B")=True Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(5)
Response.End
End If
'每当有用户登录则刷新数据库,判断是否有影片的预订超时或超期未还
strSQL="SELECT TAC_ReserveTime_D,TAC_StartTime_D FROM [Tenancy]”&_
” WHERE TAC_StartTime_D IS NULL"
objRS.Open strSQL,objConn,1,3
For i=1 To objRS.RecordCount
'有超时的预订则删除
If IsNull(objRS("TAC_StartTime_D"))=True And&_
DateDiff("h",objRS("TAC_ReserveTime_D"),Now())>12 Then
objRS.Delete
End If
objRS.MoveNext
Next
objRS.Close
strSQL="SELECT * FROM [Tenancy] WHERE TAC_StartTime_D”&_
” IS NOT NULL AND TAC_EndTime_D IS NULL"
objRS.Open strSQL,objConn,1,3
Dim MsgUser
For i=1 To objRS.RecordCount
'有超期租赁的则标注
If DateDiff("d",DateAdd("d",objRS("TAC_Lease_N"),&_
objRS("TAC_StartTime_D")),Now())=>objRS("TAC_Lease_N") Then
strSQL="UPDATE [Tenancy] SET TAC_TimeOut_B=True,”&_
”TAC_MsgUser_B=True WHERE TAC_ID