记录访问次数的问题

xzf888 2009-05-25 10:27:17
在下面这段语句中,能记录来访者的次数并加1及IP和日期,日期时间为一天,一天后来访者又可以更新日期并记录来访次数加1,但是又来了一个来访后,而这个来访者就不更新了,原因日期已经更新,因为下面的代码日期是新的就不更新, 现在我想要的就是来访者IP不同也要更新来访次数加1, 如果IP和日期相同就不更新了,如何改写?


<%
set rs = createobject("adodb.recordset")
sql = "select * FROM Jkjs_news where ip='"& isnull=("userip") &"' and news_id="&news_id
rs.cursorLocation = 3
rs.open sql,conn,1,3
if not rs.eof and rs.bof then

else
if dateDiff("d",rs("data"),date) <>0 Then
rs("data")=date
rs("news_count") = rs("news_count").value + 1
end if
end if
rs("ip") = userip
rs("url") = url
rs("data") = date()
rs.update
if rs.state <> 0 then rs.close
set rs = nothing
%>

...全文
191 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzf888 2009-05-27
  • 打赏
  • 举报
回复
谢谢,那我就建表,,这个结贴了,
  • 打赏
  • 举报
回复
晕,你不同的表肯定要用不同的,不然你就会有不同的表用相同的news_id和IP还有时间了,
xzf888 2009-05-27
  • 打赏
  • 举报
回复
按照你的思路我修改代码如下:

<%
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") '捕获代理IP
If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
dim userip,redate,news_id
set rs = createobject("adodb.recordset")
sql = "select * from renew where ip='"& userip &"' and news_id="&news_id
rs.cursorLocation = 3
rs.open sql,conn,1,3
if rs.eof and rs.bof then
rs.addnew
rs("ip") = userip
rs("redate")=date
rs("news_id") = news_id
conn.execute("update Jkjs_news set news_count=news_count+1 where news_id="&news_id)
elseif dateDiff("d",rs("redate"),date) <>0 Then
rs("redate")=date
conn.execute("update Jkjs_news set news_count=news_count+1 where news_id="&news_id)
end if
rs.update
if rs.state <> 0 then rs.close
set rs = nothing
%>

这样确实可以,
条件一, ip与news_id相同而redate不同就更新并在news_count加1
条件二, ip与redate相同而news_id不同就添加一条记录并news_count加1
条件三, IP不同而redate与news_id相同也添加一条记录并news_count加1
条件四, 三个值全相同什么也不做

问题:在同一表中这样可以了,那么我有多个文章表,使用同样redate表,这样在Jkjs_news2的情况下就有问题,news_id有重复,那么我应该是再建redate这个表还是再写判断语,如果是建表那就不用动脑子了,反正复制一个改下表名就行,这样数据库多表,如果写判断语该如何写,
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 xzf888 的回复:]
VBScript code

<%
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") '捕获代理IP
If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
dim userip,redate,news_id
set rs = createobject("adodb.recordset")
sql = "select * FROM renew where (ip='"&userip&"' and dateDiff('d',redate,'"&date()&"')=0 ) and news_id="&news_id
rs.cursorLocation = 3'这句删了看看
rs.open sql…
[/Quote]
汗!!
你只要更新日期的话那就不能这么写

告诉你思路:

sql = "select * FROM renew where (ip='"&userip&"' and dateDiff('d',redate,'"&date()&"')=0 ) and news_id="&news_id
换成
sql = "select * FROM renew where ip='"&userip&"' and news_id="&news_id

然后下面要分2种大情况

第一种:
记录存在:
记录存在的话,那么就要判断日期是否相等,日期相等的就不做任何更新,日期不等的就更新日期和次数+1

第二种:
记录不存在,不存在就增加一条记录并且次数+1
xzf888 2009-05-26
  • 打赏
  • 举报
回复
谢谢,我测试下看,
  • 打赏
  • 举报
回复
<%
set rs = createobject("adodb.recordset")
sql = "select * FROM renew where (ip='"&userip&"' or dateDiff('d',redate,date()) <>0 ) and news_id="&news_id
rs.cursorLocation = 3
rs.open sql,conn,1,3
if not rs.eof and rs.bof then
else
rs.addnew
rs("news_id")=news_id
rs("ip") = userip
rs("redate") = date()
rs.update
conn.execute("update Jkjs_news set news_count=news_count+1 where news_id="&news_id)
end if
if rs.state <> 0 then rs.close
set rs = nothing
%>
  • 打赏
  • 举报
回复
加一个表
这个表存访问者的IP和访问日期还有被访问的文章ID
比如
表名:renew
结构: id ip redate new_id

然后
<%
set rs = createobject("adodb.recordset")
sql = "select * FROM renew where ip='"&userip&"' and news_id="&news_id
rs.cursorLocation = 3
rs.open sql,conn,1,3
if not rs.eof and rs.bof then
else
rs.addnew
rs("news_id")=news_id
rs("ip") = userip
rs("redate") = date()
rs.update
conn.execute("update Jkjs_news set news_count=news_count+1 where news_id="&news_id)
end if
if rs.state <> 0 then rs.close
set rs = nothing
%>
xzf888 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chinmo 的回复:]
仔细看了下你的结构
你用他的同样不行
原因如下:
你的IP和时间都在新闻表里
那么肯定要出问题,怎么说呢?我来给你举一个理,A,B来访问

A先来访问,然后你记录了A的IP和他访问的日期,如果他在没有别人来访问之前,他再次访问不会更新
但如果A访问过后,B接着来访问,这时IP都不同了,但日期是一样,所以更新了这几个字段
B访问后,这时A接这访问,那么IP是不是又不同了,那么是不是又要更新一次?

所以呢,你这个结构有问题 [/Quote]

让你这么一说,确实存在问题,这下我就更搞不清楚了,到底要怎样在一天内才能不重复更新记录.希望您能否帮助我写段代码,或要增个表也可以,
  • 打赏
  • 举报
回复
仔细看了下你的结构
你用他的同样不行
原因如下:
你的IP和时间都在新闻表里
那么肯定要出问题,怎么说呢?我来给你举一个理,A,B来访问

A先来访问,然后你记录了A的IP和他访问的日期,如果他在没有别人来访问之前,他再次访问不会更新
但如果A访问过后,B接着来访问,这时IP都不同了,但日期是一样,所以更新了这几个字段
B访问后,这时A接这访问,那么IP是不是又不同了,那么是不是又要更新一次?

所以呢,你这个结构有问题
xzf888 2009-05-26
  • 打赏
  • 举报
回复
chinmo 您好,不要挣,你能不能修改我上面全部代码我再试下,因我初学不懂,光一句我确定用不了,因不知道修改下面的代码了,如你所说的一句能完成应该是最好的,这样效力高吗?
  • 打赏
  • 举报
回复
sql = "select * FROM Jkjs_news where (ip='"&userip&"' or dateDiff('d',data,date) <>0 )and news_id="&news_id
  • 打赏
  • 举报
回复
sql = "select * FROM Jkjs_news where (ip='"&userip&"' or dateDiff('d',data,date)) <>0 and news_id="&news_id
  • 打赏
  • 举报
回复
效率上你的绝对比我的那个低不知道多少
  • 打赏
  • 举报
回复
你明白and的用法吗?

  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xcc1965 的回复:]
引用 3 楼 chinmo 的回复:
SQL codesql = "select * FROM Jkjs_news where ip='"&userip&"' and dateDiff('d',data,date) <>0 and news_id="&news_id

多说没意思


chinmo你对楼主的意思可能没看明白,楼主的意思应该是这样,他要求日期和IP不同时都能更新,如果日期和IP一样就不更新,按你写的只是日期不同才会更新, IP不同不会更新数据,楼主要的应该要修改成如下代码

VBScript code
<%
set rs = createobject("ado…
[/Quote]

你懂什么?
我写的不行??

真笑话,一句SQL语句完成的事,被你分开成程序写
xzf888 2009-05-26
  • 打赏
  • 举报
回复
谢谢xcc1965
你修改的代码确实可以达到我的目录,再次感谢,同时也感谢回复我所有热心帮助我的人
xcc1965 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinmo 的回复:]
SQL codesql = "select * FROM Jkjs_news where ip='"&userip&"' and dateDiff('d',data,date) <>0 and news_id="&news_id

多说没意思
[/Quote]

chinmo你对楼主的意思可能没看明白,楼主的意思应该是这样,他要求日期和IP不同时都能更新,如果日期和IP一样就不更新,按你写的只是日期不同才会更新, IP不同不会更新数据,楼主要的应该要修改成如下代码

<%
set rs = createobject("adodb.recordset")
sql = "select * FROM Jkjs_news where news_id="&news_id
rs.cursorLocation = 3
rs.open sql,conn,1,3
if not rs.eof and rs.bof then
else
if dateDiff("d",rs("data"),date) <>0 Then
rs("ip") = userip
rs("data")=date
rs("news_count") = rs("news_count").value + 1
elseif rs("ip")=userip then
else
rs("ip") = userip
rs("data")=date
rs("news_count") = rs("news_count").value + 1
end if
end if
rs.update
if rs.state <> 0 then rs.close
set rs = nothing
%>
lzj34 2009-05-26
  • 打赏
  • 举报
回复
sql = "select * FROM Jkjs_news where ip='"&userip&"' and dateDiff('d',data,date) <>0 and news_id="&news_id

sql = "select * FROM Jkjs_news where ip='"& isnull=("userip") &"' and news_id="&news_id
这个红色的肯定会语法错误这个写法都不对isnull=("userip")
  • 打赏
  • 举报
回复
sql = "select * FROM Jkjs_news where ip='"&userip&"' and dateDiff('d',data,date) <>0 and news_id="&news_id

多说没意思
xzf888 2009-05-26
  • 打赏
  • 举报
回复
这个红色部分是空值时用的,应该没有错吧?,
加载更多回复(27)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧