立即免费下载 Discuz!6.1.0正式版
Discuz! 6.1.0 使用说明
Discuz!NT升级至v2.1
开放源码下载
UCenter Home 1.2 正式版发布
官方站 | 帮助文档
基于ECShop的免费网店托管-卖否
PHP实战精英班培训 | LAMP培训大连
Discuz!收费服务内容及价格
论坛免费升级 手握手
Discuz!/ECShop 专用官方虚拟主机
注册付费广告征集
Comsenz 招聘信息
网店系统ECShop v2.6.0正式版火热发布
基于Discuz!的免费论坛空间5D6D
第二届PHP中国开源发展及人才状况调查
发新话题
打印

修改用户资料BUG-uc_user_edit()

修改用户资料BUG-uc_user_edit()

ucenter中model/user.php
第116-138行
复制内容到剪贴板
代码:
116        function edit_user($username, $oldpw, $newpw, $email, $ignoreoldpw = 0) {
117                $data = $this->db->fetch_first("SELECT uid, password, salt FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
118
119                if($ignoreoldpw) {
120                        $isprotected = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid = '$data[uid]'");
121                        if($isprotected) {
122                                return -8;
123                        }
124                }
125
126                if(!$ignoreoldpw && $data['password'] != md5(md5($oldpw).$data['salt'])) {
127                        return -1;
128                }
129
130                $sqladd = $newpw ? "password='".md5(md5($newpw).$data['salt'])."'" : '';
131                $sqladd .= $email ? ($sqladd ? ',' : '')." email='$email'" : '';
132                if($sqladd || $emailadd) {
133                        $this->db->query("UPDATE ".UC_DBTABLEPRE."members SET $sqladd WHERE username='$username'");
134                        return $this->db->affected_rows();
135                } else {
136                        return -7;
137                }
138        }
132行的判断不足以判断用户是否对资料进行了修改。
当$oldpwd和$newpwd相等时,并且$email没有做修改时,
当$newpwd没做修改,但$email和数据库中的数据一样时,
134行将返回0,而不是未做修改 -7
因此还应该判断新修改的密码是否和原始密码是否相同,还应该判断在修改EMAIL时,EMAIL是否和数据库中的EMAIL一致,
才能返回 -7 未做修改

可以做以下修改
复制内容到剪贴板
代码:
117                $data = $this->db->fetch_first("SELECT uid, password, salt,email FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
130                $sqladd = $newpw && $newpw!=$oldpw ? "password='".md5(md5($newpw).$data['salt'])."'" : '';
131                $sqladd .= $email &&  $email!=$data['email']? ($sqladd ? ',' : '')." email='$email'" : '';
132                if($sqladd ){ // $emailadd 没用了,直接kill掉
[ 本帖最后由 zhy_aid_cn 于 2008-4-23 11:07 编辑 ]
此ID在512地震的废墟中,待援,有事烧香!
CYASK3UC的成功案例
强人啊,字数
嗯!
发新话题
版块跳转