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 编辑 ]