Archive for 2012年7月24日

升级至Discuz! X2.5后,导致楼层错乱的快速解决办法

2012年7月24日

Discuz! X2.5的帖子表(post)新增position字段,通过执行updata.php执行升级,如果post表数据过大,会有一定概率导致position自增值不准,官网有个解决方案,但有些站点出现问题的帖子数实在太多,执行解决方案中的脚本太慢,现在把存MySQL命令给出,速度还不错。如果你执行了update.php,那么需要你去数据库中删除掉联合主键 (tid,position)和position字段,由于position有自增属性,所以需要先去掉自增属性(AUTO_INCREMENT)再进行删除。准备工作做完后,就可以执行下面的命令了,

ALTER TABLE pre_forum_post ADD `position` INT(8) UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(`tid`, `position`);

注意,我这里写的pre_是表前缀,依据你的站点数据库配置进行调整。操作之前一定要备份post表

Discuz! 找回密码提示“账户资料不匹配,不能使用取回密码功能”问题

2012年7月20日

最近处理问题,遇到站长反馈,有部分用户出现找回密码提示“抱歉,您填写的账户资料不匹配,不能使用取回密码功能,如有疑问请与管理员联系”,出现这个问题的原因大概是因为早前有过其它应用,当时对邮件地址大小写不做限制,现在填写邮箱及用户名找回密码的时候,程序里会把用户输入的邮箱处理成小写,那么就与UCenter中保存的用户邮箱匹配不上了,最后导致了这个错误。解决方法就是把从UCenter读出来的邮箱也处理为小写的字符串,要改哪里呢?看代码:
source/module/member/lostpassword.php文件,

	if($_GET['username']) {
		list($tmp['uid'], , $tmp['email']) = uc_get_user(addslashes($_GET['username']));
		if($_GET['email'] != strtolower($tmp['email']) { //这里加上strtolower小写函数处理就可以了。
			showmessage('getpasswd_account_notmatch');//这里就是报错提示
		}
		$member = getuserbyuid($tmp['uid'], 1);
	}