微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题统计图片的点击率
栏目互联网时代
作者余疆
发布2000年第27期
  如果你跟我一样,自己的主页是提供各种图片服务的,那么知道哪些图片受欢迎,哪些不受欢迎是相当有必要的。在这里,向大家介绍一下我用ASP如何解决这个问题的。
  我们首先来分析一下。一般作为图片站点,首先显示出来的是一些小尺寸的缩略图,点击后才显示出大图。因此,我们可以在小图与大图之间的链接上做文章,让小图的链接指向一个ASP文件,由这个ASP文件将点击记录下来,然后再显示出大图,原理是相当简单的。
  首先,我们要建立一个用来记录点击的数据库文件,我用的是ACCESS97,其它的数据库也可以。在这个库中,只需要一个表,取名就叫1吧。数据库字段有三个:picturename(字符型),clicktimes(数字型),starttime(日期型),第一个是图片的名字,第二个是点击的总次数,第三个是第一次点击的时间。注意,字段名不能用汉字。
  建好库后,接下来是界面和程序的编制。在FrontPage2000中新建一个HTML文件,插入几张图片,并用缩略图功能把它缩成小图,保存。再新建一个ASP文件,它的源代码如下:
  <% Server.ScriptTimeOut = 60 //设置超时时间
   Response.Expires =0%> //设置网页的过期时间为0
  <!--#include file ="adovbs.inc" --> //调入VB常量说明文件
  <%
  Dim picturename1,clicktimes1,starttime1 //申明用来保存数据的变量。
  Dim connection,record //申明用来打开数据库的变量。
  Picturename1= Request.QueryString("picturename")//取得图片的名字。
  Set connection = Server.CreateObject("ADODB.Connection")
  Set record= Server.CreateObject("ADODB.Recordset")
  Record.locktype=3 //设置record对象的锁定方式
  Record.cursortype=adopenforwardonly //设置游标的方向只能向前
  dsn =server.MapPath("access.dsn") //取得access.dsn在服务器的路径
  mdb=server.mappath("click.mdb")  //取得click.mdb的路径
  mydsn="filedsn="+dsn+";dbq="+mdb+";"
  connection.Open mydsn
  //以上这些是打开数据库的操作。其中access.dsn是一个ACCESS数据库的配置文件。
  下面,我们要取得在数据库中图片名字对应的点击次数。首先在库中查找有没有这个名字。
  sql="SElect * from 1 where picturename='"&picturename1&"'" //构建SQL语句。
  Record.open sql,connection //执行SQL查询
  查询后,我们要判断一下库中有没有对应的记录。如果没有就要新建一个:
  if record.EOF=true then
  thistime=1
  currenttime=date
  Record.close() //关闭record这个对象,下面要重新以另一种方式打开
  sql="insert into 1(picname,clicktimes,starttime) values('"&picturename1&"','"&thistime&"','"&currenttime&"')" '构建SQL插入语句
  set record=connection.Execute(sql)
  else
  totaltimes=cint(record("clicktimes")) //从数据库中取得以前存入的点击次数
  totaltimes=totaltimes+1 //加上这一次
  record("clicktimes")=totoletimes //重新赋值
  record.updata() //更新数据库中的记录
  endif
  %>
  以上,点击记录的工作就基本上完成了,千万别忘了,还要把图显示出来。这也很简单,只需在<body>与</body>间加入一句 <img border ="0" src="<%=picturename1%> >就可以了。如果需要的话,还可以写上总的点击次数:<% Response.Write picturename1&"这幅图片总共被点击"&totaltimes&"次" %>
  到此为止,ASP部分就完成了。在前一个HTML文件中还要作些小改动。把所有的<a href="文件名"><img border="0" src="文件名_small.jpg" alt="文件名.jpg (48344 字节)" width="120" height="98"></a>
  通通都改成<a href="jilu.asp?picturename=文件名><img border="0" src="文件名_small.jpg" alt="文件名.jpg (48344 字节)" width="120" height="98"></a>其中jilu.asp是刚才的那个ASP文件名。
  如果就记录点击情况而言,上面这些基本上就足够了。但是这样记录下的的结果需要下载下来才知道,这似乎有点太原始了。所以下面还要加入在线统计的功能。
  用来统计的程序,应该能够按升序或降序排列记录,显示每天的点击率,如果条目太多,还有必要加入翻页功能。
  查看统计只是让站长做的工作,所以设置一个密码是很有必要的。因此,新建一个HTML文件,插入一个表单:
  <form method="POST" action="tongji.asp">
  <p><input type="radio" value="升" checked name="R1">升序排列
  <input type="radio" name="R1" value="降">降序排列</p>
  <p><input type="text" name="T1" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p>
  <p> </p>
  </form>
  下面是tongji.asp的内容:
  <%
  if (request.From(T1)<>"1234") then
  response.write "你不能进入!!!"
  response.end
  end if
  Set connection = Server.CreateObject("ADODB.Connection")
  Set record= Server.CreateObject("ADODB.Recordset")
  Record.locktype=3
  Record.cursortype=adopenforwardonly
  dsn =server.MapPath("access.dsn") 
  mdb=server.mappath("click.mdb")
  mydsn="filedsn="+dsn+";dbq="+mdb+";"
  connection.Open mydsn
  if request.Form(R1)="升" then
  sql="select * from 1 order by clicktimes"
  Else
   Sql= "select * from 1 order by clicktimes DESC"
  End if
  Record.open sql,connection //执行SQL
  cuttenttime=date
  %>
  下面是显示的部分,这里用一个表格来分隔各种数据:
  <table border="1" width="100%">
  <%while record.eof =false
  if record("clicktimes")=0 then record.MoveNext %> //在数据库中有一些数据并不正常,要排除它们。
  <tr>
  <td width="33%"><%=record("picname")%> </td>
  <td width="33%"><%=record("clicktimes")%> </td>
  <td width="34%"><%=csng( record("clicktimes")/(datediff("d",record("starttime "),currenttime,0,0)+1))%> </td>
  </tr>
  <%
  record.MoveNext //游标向下移
  wend%>
  </table>
  到这里,一个简单的图片点击记录、统计的ASP程序就完成了,希望大家在这个基础上添枝加叶,也欢迎大家与我探讨其它的编程问题,我的信箱是:timer1@cmmail.com。