Uc user merge

出自Discuz! 技术文库

跳转到: 导航, 搜索

uc_user_merge

integer uc_user_merge(string/ oldusername , string newusername, integer uid, string password, string email)

目录

描述

本接口函数用于把重名的用户合并到 UCenter。

参数

参数名 类型 是否必需 说明 备注
oldusername string 是 老用户名
newusername string 是 新用户名
uid integer 是 用户 ID
password string 是 密码
email string 是 电子邮件


范例

$uid = uc_user_merge($_GET['username'], $_GET['usernamenew'], $user['uid'], $_GET['password'], $user['email']);
if($uid > 0) {
	echo '用户名可用';
} elseif($uid == -1) {
	echo '用户名不合法';
} elseif($uid == -2) {
	echo '包含要允许注册的词语';
} elseif($uid == -3) {
	echo '用户名已经存在';
}

$db->query("UPDATE {$tablepre}members SET username='$_GET[usernamenew]' WHERE uid='$uid'");


返回值

返回值类型 说明 备注
integer 大于 0:返回用户 ID,表示用户注册成功
-1:用户名不合法
-2:包含不允许注册的词语
-3:用户名已经存在


用户的合并和用户重名的处理

如果您的应用程序集成到 UCenter 时包含旧的用户数据,我们建议您可以采取以下范例的方式把您的用户导入到 UCenter。

function getmaxuid() {
	global $ucdb;
	$query = $ucdb->query("SHOW CREATE TABLE ".UC_DBTABLEPRE."members");
	$data = $ucdb->fetch_array($query);
	$data = $data['Create Table'];
	if(preg_match('/AUTO_INCREMENT=(\d+?)[\s|$]/i', $data, $a)) {
		return $a[1] - 1;
	} else {
		return 0;
	}
}

$maxuid = getmaxuid();

$query = $db->query("SELECT * FROM {$tablepre}members");

while($data = $db->fetch_array($query)) {
	$salt = rand(100000, 999999);
	$password = md5($data['password'].$salt);
	$data['username'] = addslashes($data['username']);
	$lastuid = $data['uid'] += $maxuid;
	$queryuc = $ucdb->query("SELECT count(*) FROM ".UC_DBTABLEPRE."members WHERE username='$data[username]'");
	$userexist = $ucdb->result($queryuc, 0);
	if(!$userexist) {
		$ucdb->query("INSERT LOW_PRIORITY INTO ".UC_DBTABLEPRE."members SET uid='$data[uid]', username='$data[username]', password='$password',
			email='$data[email]', regip='$data[regip]', regdate='$data[regdate]', salt='$salt'", 'SILENT');
		$ucdb->query("INSERT LOW_PRIORITY INTO ".UC_DBTABLEPRE."memberfields SET uid='$data[uid]'",'SILENT');
	} else {
		$ucdb->query("REPLACE INTO ".UC_DBTABLEPRE."mergemembers SET appid='".UC_APPID."', username='$data[username]'", 'SILENT');
	}
}

$ucdb->query("ALTER TABLE ".UC_DBTABLEPRE."members AUTO_INCREMENT=".($lastuid + 1));

本方式的基本流程是:首先,获取当前 UCenter 中的最大用户 ID 的值。然后,读取应用程序自己的用户表,判读用户名是否在 UCenter 重复。如果重复,把重名的用户名保存到 UCenter 的 mergemembers 表中,不合并这个用户。如果不重名,则按正常方式导入用户进行合并。当用户插入到 mergemembers 表后,用户在这个应用程序登录的时候,登录状态的返回数组中 [4] 的值将返回 1(请参考关于 uc_user_login 函数的说明)。当登录状态返回重名状态后建议您在应用程序中判读用户合法性后进行更名的处理,调用本接口函数。

个人工具