近期我和同学处理关于一个医院护士节投票系统的限制时间间隔问题就是通过下面这种方法来解决的。
主要利用到了datediff,这个函数。
程序代码
If Request.Form("submit")="投票" Then
If RestrictIP=True Then
fIP=Request.ServerVariables("Remote_Addr")
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open "Select * from NF_IP where sid="&sid&" and ip='"&fIP&"' and datediff('h',vtime,now())<"&refuseTime,conn,1,3
If not(rs.eof and rs.bof) Then
Response.Write "<script>alert('你已经投过票了!');window.close()</script>"
Response.End
Else
rs.addnew
rs("sid")=sid
rs("ip")=fIP
rs("vtime")=now()
rs.update
End If
rs.close
Set rs=nothing
conn.execute("delete from NF_IP where datediff('h',vtime,now())>="&refuseTime)
End If
If RestrictIP=True Then
fIP=Request.ServerVariables("Remote_Addr")
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open "Select * from NF_IP where sid="&sid&" and ip='"&fIP&"' and datediff('h',vtime,now())<"&refuseTime,conn,1,3
If not(rs.eof and rs.bof) Then
Response.Write "<script>alert('你已经投过票了!');window.close()</script>"
Response.End
Else
rs.addnew
rs("sid")=sid
rs("ip")=fIP
rs("vtime")=now()
rs.update
End If
rs.close
Set rs=nothing
conn.execute("delete from NF_IP where datediff('h',vtime,now())>="&refuseTime)
End If
注:
vtime----投票者投票的时间
now()--系统现在的时间
refusetime--间隔时间(可根据需要在前台设置,这里单位为小时h)
核心在下面这句话:
conn.execute("delete from NF_IP where datediff('h',vtime,now())>="&refuseTime)
如果datediff('h',vtime,now)的值,也就是投票时间与系统现在的时间间隔大于所设置的refusetime(前台设置的投票时间间隔),那么删除掉那条记录。这样就限制了每个IP在同一时间间隔内只能投一票。
关于datediff('h',vtime,now)
datadiff这个函数是取得两个日期时间值的差,第一个参数"h",表示取后面两个时间值的小时部分的差值。