今天查看我这个博客的访问来源和访问入口时点击了其中一个被访页面,发现出现错误:[quote]错误 '80020009'
/blog/article.asp,行 33
[/quote]
仔细一想,这个文章是在原来的服务器上用上个版本时忘了开启目录写权限,发布文章时文章没显示出来就多发布了几次后来删除掉的,但由于前几天转移服务器时原来的数据没及时备份出来,把老的数据处理了下,这时删除掉的不是原来删除掉的文章,导致搜索引擎收录也变化了,以至于我把备份恢复后访问到的文章是原来已经删除掉的文章。
知道问题的起因,那解决起来就容易了。初步判断是程序里判断文章存在与否的语句出现问题。找到article.asp,从行33开始,相关代码如下:[code] If (log_View.EOF or log_View.bof) or (log_View(“log_IsDraft”) = True And not stat_Admin And memName <> log_View(“log_Author”)) Then
log_View.Close
showmsg “错误信息”, “不存在当前日志!<br/><a href=””default.asp””>单击返回</a>”, “ErrorIcon”, “”
End If
[/code]
果然,33行这个判断语句有业务逻辑上的错误。这里的意思是判断文章存在与否及是否有阅读权限。由于VBS里的Or是要把所有的条件都执行一次的,所以虽然前面已经能判断出记录不存在,但后面还是继续做判断,而在记录不存在的情况下再读取其中的字段值就会出错了。修改下判断的流程,做两步判断,先判断记录是否存在,然后再判断是否有阅读权限。修改后的代码如下:[code] If log_View.EOF or log_View.bof Then
log_View.Close
showmsg “错误信息”, “不存在当前日志!<br/><a href=””default.asp””>单击返回</a>”, “ErrorIcon”, “”
End If
If log_View(“log_IsDraft”) = True And not stat_Admin And memName <> log_View(“log_Author”) Then
log_View.Close
showmsg “错误信息”, “不存在当前日志!<br/><a href=””default.asp””>单击返回</a>”, “ErrorIcon”, “”
End If
[/code]
测试通过。
错误问题是解决,但随后我又考虑到一个问题,像这种从搜索引擎过来的,都是找相关信息的,如果遇到这样删除掉的文章,或者像我这样文章还在,只是id变了,最终看到的却只是文章不存在的提示,多不友好。我想可以通过来源获取相关关键字,然后搜索本站,找到相关的文章供来访者参考。由于时间关系,具体实现代码有空再写。