好多网友反映织梦自带的留言模块经常被注入垃圾留言,好多还是英文的,有些留言虽然不是垃圾,但是其留的个人主页多是一些购物网站的链接。久久电影吧(http://www.film-8.com)也深受其害,而在管理后台也没发现有批量删除留言的工具,只能一个一个的删除,很是麻烦,在官方论坛搜了一下,也没发现官方给出很好的解决方案。舍弃留言模块,对用户体验不好。最近笔者经过努力,发现了一个解决此问题的办法,希望对有同样困惑的网友能有帮助。
据最近观察,几天后不审核的留言,自动不显示。但这些数据还存放在数据库里,占据着宝贵的数据库资源。如何实现这些垃圾数据的批量删除呢?
首先在前台设置成留言需要审核后才能发布,平时有好的留言及时审核,不好的坚决不通过。
网站后台垃圾留言页面
与后台页面对应的未被审核的mysql数据库后台页面(图1)
下面的方法是通过phpMyAdmin工具直接对织梦数据库里的数据表进行操作,为了安全起见,最好先通过后台的备份工具将数据库的所有表或部分表做一下备份,一旦误伤,也可以很快恢复。(具体方法详见织梦官网或百度一下)
久久电影吧(http://www.film-8.com)用的是DedeCMSV57_UTF8_SP1代码(以下基于此版本的SQL代码经过测试能顺利执行,gbk的是否能成功执行还有待验证!)。
通过phpMyAdmin(2.6.4-pl4)工具管理mysql数据库,实现垃圾数据的批量删除和更新。大家一定弄明白SQL语句的意义,再进行相关操作,否则容易造成数据库数据的丢失。首先您应有数据库的管理权限。本文直接通过phpMyAdmin管理的mysql数据库(本例以MySQL 5.0.27为测试数据库),以下代码都是在这个工具里测试的,织梦后台也有一个sql工具,有兴趣的可以试一下,代码是否也能成功执行。
利用dede_guestbook字段ischeck(审核开关,1通过审核,0未通过审核)
首先看一下dede_guestbook的数据库结构,了解这个后下面的命令出错的几率小点。
dede_guestbook的数据库结构
让后台显示留言者的IP全址 ,而非222.77.*.*
找到guestbook.htm文件(位于/templests/plus/文件夹下)找到约115行的如下代码:
<td height="20"> 来自:<?php echo preg_replace("#[^\.]*\.[^\.]*$#","*.*",$fields['ip']); ?></td>,将其改为:
<td height="20"> 来自:<?php echo $fields['ip']?></td>
guestbook.htm页面修改ip和主页链接代码后的截图页面(图2)
怎样查看未被审核的垃圾数据?
SELECT title,uname,ip,homepage,dtime,ischeck,msg FROM `dede_guestbook` WHERE ischeck=0
如图1
查看某一IP地址(如:112.248.60.26.)的所有留言:
Select title,uname,ip,homepage,dtime,ischeck,msg FROM `dede_guestbook` WHERE ip='112.248.60.26'
删除所有未被审核的垃圾留言。
Delete from dede_guestbook where ischeck=0
执行删除命令时出现的对话框
删除后已查不到原记录
删除某一IP的所有留言(通常是被恶意刷贴的,如IP:112.248.*.*)
由于织梦后台,看不到IP的完整信息(如:112.248.*.*可以用上文的方法将其改为显示IP全址),也可以通过上文的select语句来查找IP的完整信息(如:112.248.60.26),然后再删除。(此后的两语句笔者在织梦后台sql工具中成功执行)
SELECT title,uname,ip,homepage,dtime,ischeck,msg FROM `dede_guestbook` WHERE ischeck=0
Delete from dede_guestbook where ip='112.248.60.26'
织梦留言模块有一“个人主页”项,该项常是被恶意注入的要地,本可以删除此项,但不利于想展示自己主页的网友晒其个人网页,笔者通过修改guestbook.htm(位于/templests/plus/文件夹下)的代码,并将个人主页网址显示出来,如果是广告链,也可以对其删除。
约128行有如下代码:
<a href='http://<?php echo $fields['homepage']?>' target='_blank'><img src='guestbook/images/home.gif' border=0 width='16' height='16' />[主页]</a>
将其改为:
<a href='http://<?php echo $fields['homepage']?>' target='_blank'><img src='guestbook/images/home.gif' border=0 width='16' height='16' />[主页]</a>——http://<?php echo $fields['homepage']?>
代码修改后的留言前台页面如图2所示。
1、更新已审核的所有留言主页链接为http://www.film-8.com
update `dede_guestbook` set homepage = 'www.film-8.com' WHERE ischeck=1
2、更新某一IP(如:112.248.60.26.)的所有留言主页链接为http://www.film-8.com
update `dede_guestbook` set homepage = 'www.film-8.com' WHERE ip=’ 112.248.60.26’
最近发现,有些留言并无恶意,但是留下的个人主页多是一些销售产品的网址,如果按以上的方法也行,但方法1太耗资源,方法2太慢,所以10月27日又推出了方法3。(方法3中的代码在织梦后台SQL工具中验证通过)
3、查看所有主页不是http://www.film-8.com(网址可根据您的需要替换)的所有记录
SELECT title,uname,ip,homepage,dtime,ischeck,msg FROM `dede_guestbook` WHERE homepage<>'www.film-8.com'
更新近期已审核的但是主页不是http://www.film-8.com(网址可根据您的需要替换)的所有记录
update `dede_guestbook` set homepage = 'www.film-8.com' WHERE homepage<>'www.film-8.com'
2013年10月27日执行方法3后的久久电影吧留言板截图
(文:大鹏展翅,作者系久久电影吧 站长,原文链接:http://www.wanminw.com/zztd/show.asp?id=31)