怎么修改discuz!用户注册源代码,实现同一Email可以重复注册

jingweiyoung 发布于 2011/07/07 12:32
阅读 5K+
收藏 0
我刚从学校毕业,现在一家小软件公司工作。公司开发了个软件让我配个论坛,我从网上下的Discuz_7.2_SC_UTF8和UCenter_1.6.0_SC_UTF8,已经安装好,可以使用了。现在有个问题,老板让我写个内部注册用的php程序,就和普通用户注册时调用的程序差不多,唯一的区别就是可以使用同一Email重复注册。我看到register.php  ,找到
if(!$activation) {
		$uid = uc_user_register($username, $password, $email, $questionid, $answer, $onlineip);

		if($uid <= 0 and $uid != -6) {
			if($uid == -1) {
				showmessage('profile_username_illegal');
			} elseif($uid == -2) {
				showmessage('profile_username_protect');
			} elseif($uid == -3) {
				showmessage('profile_username_duplicate');
			} elseif($uid == -4) {
				showmessage('profile_email_illegal');
			} elseif($uid == -5) {
				showmessage('profile_email_domain_illegal');
			}
			 elseif($uid == -6) {
				showmessage('profile_email_duplicate');
			} 
			else {
				showmessage('undefined_action', NULL, 'HALTED');
			}
		}
		
	} else {
		list($uid, $username, $email) = $activation;
	}


elseif($uid == -6) {

showmessage('profile_email_duplicate'); 

} 注释掉,把if($uid <= 0 )改成if( $uid <=0 and $uid != -6)

然后把ajax.php中

elseif($action == 'checkemail') {

	$email = trim($email);

	require_once DISCUZ_ROOT.'./uc_client/client.php';

	$ucresult = uc_user_checkemail($email);
	if($ucresult == -4) {
		showmessage('profile_email_illegal', '', 1);
	} elseif($ucresult == -5) {
		showmessage('profile_email_domain_illegal', '', 1);
	} elseif($ucresult == -6) {
		showmessage('profile_email_duplicate', '', 1);
	}

}


里elseif($ucresult == -6) { showmessage('profile_email_duplicate', '', 1); }

部分注释掉,

但是会出现注册完后页面不跳转,数据库discuz中表cdb_members和cdb_memberfields

有数据,但是数据库Ucenter中表uc_memberfields和uc_members中没有。请问该怎么改,麻烦您了,

php和discuz我之前都没接触过,代码看了三天了,还没解决....

 

加载中
0
jingweiyoung
jingweiyoung
..........怎么没人回,还是是我问的太简单了么...
0
笨蛋EGG
笨蛋EGG

我还真没有改过Discuz的代码···只是看过一下.NET版的代码··

不过为什么要一个EMAIL多注册呢,如果没有记错,EMAIL貌似还有其他地方用到了,比如说密码重置,我记得好像用到了吧,这样的话你要改的地方貌似有很多····

或者是不是数据表做了约束的···Discuz好像有日志的,看看日志为什么没有注册成功……

0
jingweiyoung
jingweiyoung

引用来自“笨蛋EGG”的答案

我还真没有改过Discuz的代码···只是看过一下.NET版的代码··

不过为什么要一个EMAIL多注册呢,如果没有记错,EMAIL貌似还有其他地方用到了,比如说密码重置,我记得好像用到了吧,这样的话你要改的地方貌似有很多····

或者是不是数据表做了约束的···Discuz好像有日志的,看看日志为什么没有注册成功……

谢谢, 一个EMAIL多注册是老版的要求,内部使用。系统日志,刚才找了下在.\forumdata\logs下面的几个文件,201107_errorlog.php 里面都 是字段数据重复的问题。我觉得应该要搞清楚用户注册时系统的处理过程,才好办.
0
杨xidian
杨xidian
 uc_user_register 去找这个函数,看这个函数哪里返回了 -6,注释掉。
0
jingweiyoung
jingweiyoung

引用来自“杨xidian”的答案

 uc_user_register 去找这个函数,看这个函数哪里返回了 -6,注释掉。

这个函数的定义是

function uc_user_register($username, $password, $email, $questionid = '', $answer = '') {

return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer));
}
call_user_func()这个就找不到了..


0
fengyqf
fengyqf

MS通过UC管理后台里设置一下就可以允许同一email重复注册了,印像中有这样的设置,没有专门查证。

0
qycms_cn
qycms_cn

第一,我想讲的是同一个email多次注册,已和dz是相违背的.它email也相当username,愿意是可以把email当用户名,唯一的登陆.

 

第二,完全可以独立于discuz(uc)的注册程序,你可以自己重新写一个,方法是:你用完整的discuz注册一个帐号,再观察数据表里添加了哪些数据.完后你写程序实现同样的插入数据.

我在discuz7.0时确实做过这样的工作,discuz7.2也相差不大.

(http://www.itlong.com  我写过程序批量生成9W个随机帐号)

(http://www.job2299.com 原来没有论坛,只有主站,有不少相同email的注册帐号, 我同步到了discuz7.0)

0
与龙共舞
与龙共舞
不用改代码啊 ,后台设置就行。。。。楼上兄弟的截图。。。。
0
jingweiyoung
jingweiyoung

引用来自“杨金焕”的答案


我想要外部用户注册时Email唯一,自己用的注册程序可以重复Email
返回顶部
顶部