自从转为使用 Discuz!7 后不久,发现每天垃圾注册的 ID 非常多,垃圾广告满屏皆是,验证码、验证问答对其几乎不起作用。
Discuz!7 后台提供了‘用户栏目定制’功能,在这里添加几个必填、必选项是不错的选择,可以有效地防止机器注册。
但添加的这些项目一方面对我们并不是太重要,只是为了防止垃圾注册。另一方面这对论坛老会员修改个人资料的时候会产生烦恼,就是会员进入‘个人中心’修改自己资料的时候会提示你‘您没有填写必填项目,请返回修改。’,而这些我们增加的注册必填项在‘个人中心’里还没有加 * 号,这时,会员无法识别究竟哪些要必须填写。
当然,我们可以修改文件让这些必填项显示 * 号,或更新数据库给每个会员以默认值来解决。
但我更希望将论坛固有的一些项目来设置为注册必填项,比如:性别、来自何方等常用信息,一方面起来防止垃圾注册的作用,一方面完善会员资料。修改方法如下:
1、修改 bbs/templates/default/register.htm 文件:
查找:
<label><em>{lang email}:</em>
在这行上面加入代码:
<label><em>{lang gender}:</em>{lang please_select}<input type="radio" name="fufuok" value="1" tabindex="1" /> {lang authorinfoitems_gender_male} <input type="radio" name="fufuok" value="2" tabindex="1" /> {lang authorinfoitems_gender_female} *</label> <label><em>{lang location}:</em><input type="text" name="ffokok" autocomplete="off" size="25" id="ffokok" tabindex="1" class="txt" /> *</label>
为了防止自动填表,在表单中将‘性别’和‘来自何方’分别用‘fufuok’和‘ffokok’代替。
2、修改 bbs/templates/default/messages.lang.php 文件:
查找:
register_activation_invalid
在这行下面加入代码:
//Fufu_for register.htm 'register_gender_invalid' => '请正确选择性别。', 'register_location_invalid' => '请填写你来自何方。', //Fufu_end
3、修改 bbs/register.php 文件:
查找:
if($bbrules && $bbrulehash != $_POST['agreebbrule']) { showmessage('register_rules_agree'); }
在这一段代码下面添加代码:
if($fufuok!= '1' && $fufuok!= '2') { showmessage('register_gender_invalid'); } $ffokok = trim($ffokok); if($ffokok == '') { showmessage('register_location_invalid'); }
再查找:
$db->query("INSERT INTO {$tablepre}members
照下面的代码修改,完整代码如下:
$db->query("INSERT INTO {$tablepre}members (uid, username, password, secques, adminid, groupid, regip, regdate, lastvisit, lastactivity, posts, credits, extcredits1, extcredits2, extcredits3, extcredits4, extcredits5, extcredits6, extcredits7, extcredits8, email, showemail, timeoffset, pmsound, invisible, newsletter, gender) VALUES ('$uid', '$username', '$password', '$secques', '0', '$groupinfo[groupid]', '$onlineip', '$timestamp', '$timestamp', '$timestamp', '0', $initcredits, '$email', '0', '9999', '1', '$invisiblenew', '1', '$fufuok')"); $db->query("REPLACE INTO {$tablepre}memberfields (uid, authstr $fieldadd1, location) VALUES ('$uid', '$authstr' $fieldadd2, '$ffokok')");
保存文件,二进制上传到服务器,更新缓存。
上一篇:局域网无法访问 IIS 网站 | 下一篇:百度、Google 的搜索参数
Thank you!
有个问题请教您,我是按照你上面说的一步一步改的,但现在论坛注册后没有提示是否成功,登入刚注册的账号就提示:您的帐号需要激活,也没说怎么激活,下面只有个“提交”选项,点了后就提示一个叉叉+’register_gender_invalid’
是不是您代码遗漏了什么?
检查你的修改,我用的是 Discuz!7 ,改了三个文件,流程是先修改默认模板下的 register.htm ,增加两个注册时的表单项,然后在 messages.lang.php 文件中定义标签文字,即注册时的提示信息,最后是修改 register.php 判断增加的两个必填项是否填写以及入库。按这个思路和方法,可以增加更多的注册项,以丰富注册资料和抑制垃圾注册。
打包下载(注册备份自己的相关文件):
http://f.fufuok.com/w10/discuz/dz7-register.rar
另外,复制代码时注意单引号的问题。
非常感谢,解决了我现在正发愁的问题。
感谢分享,按教程一步步操作,仍有点问题,您来自哪里,这个数据传不进库,不知何因?
另外,无法下载你提醒的RAR文件!! 可否再传一下,分享一下可以吗?
已修正下载地址,可以试试看是否可行。请注意程序的版本是Discuz!7。
办法很简单。后台的 全局-安全验证-验证码设置-验证码使用 英文图片验证码,其他不动,随机 TTF 字体:选择是 然后按说明上传几个英文字体到images/fonts/en 目录。英文字体网上很多比如www.hellofont.com。因为广告贴基本都是软件自动注册自动发表的,自动注册在填写验证码那块因为是使用的discuz默认的几种字体所以软件很好识别。但是你使用其他的字体就不一样,用户注册不会造成影响因为人是智能的嘛但是软件就不行了,它识别不了验证码,结果。。。。
但防君子不防小人,人肉广告就没办法了。