2009-03-06

增加 Discuz!7 注册项,防止垃圾注册

8+

自从转为使用 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')");

保存文件,二进制上传到服务器,更新缓存。

本文有 8 篇评论 ↓↓

  1. Thank you!

  2. 大肚皮

    有个问题请教您,我是按照你上面说的一步一步改的,但现在论坛注册后没有提示是否成功,登入刚注册的账号就提示:您的帐号需要激活,也没说怎么激活,下面只有个“提交”选项,点了后就提示一个叉叉+’register_gender_invalid’
    是不是您代码遗漏了什么?

    1. 检查你的修改,我用的是 Discuz!7 ,改了三个文件,流程是先修改默认模板下的 register.htm ,增加两个注册时的表单项,然后在 messages.lang.php 文件中定义标签文字,即注册时的提示信息,最后是修改 register.php 判断增加的两个必填项是否填写以及入库。按这个思路和方法,可以增加更多的注册项,以丰富注册资料和抑制垃圾注册。
      打包下载(注册备份自己的相关文件):
      http://f.fufuok.com/w10/discuz/dz7-register.rar
      另外,复制代码时注意单引号的问题。

  3. 非常感谢,解决了我现在正发愁的问题。

  4. 感谢

    感谢分享,按教程一步步操作,仍有点问题,您来自哪里,这个数据传不进库,不知何因?

  5. 感谢

    另外,无法下载你提醒的RAR文件!! 可否再传一下,分享一下可以吗?

    1. 已修正下载地址,可以试试看是否可行。请注意程序的版本是Discuz!7。

  6. holyfool

    办法很简单。后台的 全局-安全验证-验证码设置-验证码使用 英文图片验证码,其他不动,随机 TTF 字体:选择是 然后按说明上传几个英文字体到images/fonts/en 目录。英文字体网上很多比如www.hellofont.com。因为广告贴基本都是软件自动注册自动发表的,自动注册在填写验证码那块因为是使用的discuz默认的几种字体所以软件很好识别。但是你使用其他的字体就不一样,用户注册不会造成影响因为人是智能的嘛但是软件就不行了,它识别不了验证码,结果。。。。

    但防君子不防小人,人肉广告就没办法了。