• 懒鸟飞:帝国cms模板专业分享平台,新域名:lanniaofei.com

帝国cms8.0会员修改安全信息必须填写新密码否则提示“密码位数不够或过长”的bug

帝国cms8.0会员修改安全信息时,发现个bug,你想修改邮箱、手机信息时,需要填写会员密码,原则上不需要修改新密码,但如果你不填写新密码,直接提交,会提示“密码位数不够或过长”,如下图:



而这是帝国cms8.0的一个bug,帝国cms7.5没有这个问题,这时候我们就需要修改一下系统文件,具体位置是/e/member/class/member_editinfofun.php ,如下图:

修改后的代码如下:

<?php
//--------------- 修改信息函数 ---------------

//修改安全信息
function EditSafeInfo($add){
    global $empire,$dbtbpre,$public_r;
    $user_r=islogin();//是否登陆
    $userid=(int)$user_r['userid'];
    $username=$user_r['username'];
    $rnd=$user_r['rnd'];
    //必填
    $email=trim($add['email']);
    $email=addslashes(RepPostStr($email));
    $email=RepPostVar($email);
    $phno=RepPostVar($add['phno']);
    if($public_r['regmustef']!=3)
    {
        if($public_r['regmustef']==1)//邮箱必填
        {
            if(!$email)
            {
                printerror('EmptyMemberEmail','history.go(-1)',1);
            }
        }
        elseif($public_r['regmustef']==2)//手机必填
        {
            if(!$phno)
            {
                printerror('EmptyMemberPhno','history.go(-1)',1);
            }
        }
        else//邮箱和手机必填
        {
            if(!$email||!$phno)
            {
                printerror('EmptyMemberMF','history.go(-1)',1);
            }
        }
    }
    //邮箱
    if($email&&!chemail($email))
    {
        printerror("EmailFail","history.go(-1)",1);
    }
    //手机
    if($phno&&!echphno($phno))
    {
        printerror('PhnoFail','',1);
    }
    //验证原密码
    $oldpassword=RepPostVar($add['oldpassword']);
    if(!$oldpassword)
    {
        printerror('FailOldPassword','',1);
    }
    $pr=$empire->fetch1("select regemailonly,min_passlen,max_passlen,regphonly from {$dbtbpre}enewspublic".do_dblimit_one());
    $add['password']=RepPostVar($add['password']);
    $add['repassword']=RepPostVar($add['repassword']);
    //是否修改密码:新密码/确认新密码任一填写即视为要改密码(用!==''避免密码为"0"时被误判为未填)
    $editpassword=($add['password']!==''||$add['repassword']!=='')?1:0;
    //密码字数:仅在要修改密码时校验,留空则跳过(修复不填新密码无法修改邮箱/手机的问题)
    if($editpassword)
    {
        $passlen=strlen($add['password']);
        if($passlen<$pr['min_passlen']||$passlen>$pr['max_passlen'])
        {
            printerror('FailPasslen','',1);
        }
    }
    $num=0;
    $ur=$empire->fetch1("select ".eReturnSelectMemberF('userid,password,salt,email,phno')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$userid'");
    if(empty($ur['userid']))
    {
        printerror('FailOldPassword','',1);
    }
    if(!eDoCkMemberPw($oldpassword,$ur['password'],$ur['salt']))
    {
        printerror('FailOldPassword','',1);
    }
    //邮箱
    if($pr['regemailonly'])
    {
        if($ur['email']<>$email)
        {
            $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('email')."='$email' and ".egetmf('userid')."<>'$userid'".do_dblimit_cone());
            if($num>=$pr['regemailonly'])
            {
                printerror("ReEmailFail","history.go(-1)",1);
            }
        }
    }
    //手机
    if($pr['regphonly'])
    {
        if($ur['phno']<>$phno)
        {
            $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('phno')."='$phno' and ".egetmf('userid')."<>'$userid'".do_dblimit_cone());
            if($num>=$pr['regphonly'])
            {
                printerror("RePhnoFail","history.go(-1)",1);
            }
        }
    }
    //密码
    $a='';
    $salt='';
    $truepassword='';
    if($editpassword)
    {
        if($add['password']!==$add['repassword'])
        {
            printerror('NotRepassword','history.go(-1)',1);
        }
        $salt=eReturnMemberSalt();
        $password=eDoMemberPw($add['password'],$salt);
        $a=",".egetmf('password')."='".addslashes($password)."',".egetmf('salt')."='".addslashes($salt)."'";
        $truepassword=$add['password'];
    }
    $sql=$empire->query("update ".eReturnMemberTable()." set ".egetmf('email')."='$email',".egetmf('phno')."='$phno'".$a." where ".egetmf('userid')."='$userid'");
    if($sql)
    {
        //易通行系统
        DoEpassport('editpassword',$userid,$username,$truepassword,$salt,$email,$user_r['groupid'],'');
        printerror("EditInfoSuccess","../member/EditInfo/EditSafeInfo.php",1);
    }
    else
    {
        printerror("DbError","history.go(-1)",1);
    }
}

//信息修改
function EditInfo($post){
    global $empire,$dbtbpre,$public_r;
    $user_r=islogin();//是否登陆
    $userid=(int)$user_r['userid'];
    $username=$user_r['username'];
    $dousername=$username;
    $rnd=$user_r['rnd'];
    $groupid=$user_r['groupid'];
    if(!$userid||!$username)
    {
        printerror("NotEmpty","history.go(-1)",1);
    }
    //验证附加表必填项
    $addr=$empire->fetch1("select * from {$dbtbpre}enewsmemberadd where userid='$userid'");
    $user_getr=$empire->fetch1("select ".eReturnSelectMemberF('groupid')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$userid'");
    $fid=GetMemberFormId($user_getr['groupid']);
    if(empty($addr['userid']))
    {
        $mr['add_filepass']=$userid;
        $member_r=ReturnDoMemberF($fid,$post,$mr,0,$dousername);
    }
    else
    {
        $addr['add_filepass']=$userid;
        $member_r=ReturnDoMemberF($fid,$post,$addr,1,$dousername);
    }
    //附加表
    if(empty($addr['userid']))
    {
        //IP
        $regip=egetip();
        $regipport=egetipport();
        $lasttime=time();
        $sql=$empire->query("insert into {$dbtbpre}enewsmemberadd(userid,regip,lasttime,lastip,loginnum,regipport,lastipport".$member_r[0].") values('$userid','$regip','$lasttime','$regip',1,'$regipport','$regipport'".$member_r[1].");");
    }
    else
    {
        $sql=$empire->query("update {$dbtbpre}enewsmemberadd set userid='$userid'".$member_r[0]." where userid='$userid'");
    }
    //更新附件
    UpdateTheFileEditOther(6,$userid,'member');
    if($sql)
    {
        printerror("EditInfoSuccess","../member/EditInfo/",1);
    }
    else
    {
        printerror("DbError","history.go(-1)",1);
    }
}

//上传会员头像
function EditUpic($add,$file,$file_name,$file_type,$file_size){
    global $empire,$dbtbpre,$ecms_config,$public_r;
    $user_r=islogin();//是否登陆
    $userid=(int)$user_r['userid'];
    $username=$user_r['username'];
    $rnd=$user_r['rnd'];
    //文件
    if(!$file_name)
    {
        printerror("EmptyQTranFile","",1);
    }
    $filetype=GetFiletype($file_name);//取得文件类型
    if(CheckSaveTranFiletype($filetype))
    {
        printerror("NotQTranFiletype","",1);
    }
    /*
    if('dg'.$public_r['upictype']<>'dg'.$filetype)
    {
        printerror("NotQTranFiletype","",1);
    }
    */
    if(!strstr($public_r['upictype'],"|".$filetype."|"))
    {
        printerror("NotQTranFiletype","",1);
    }
    if(!strstr($ecms_config['sets']['tranpicturetype'],','.$filetype.','))
    {
        printerror("NotQTranFiletype","",1);
    }
    if($file_size>$public_r['upicsize']*1024)
    {
        printerror("TooBigQTranFile","",1);
    }
    $upic=eMember_UpicReturnGupic($filetype);
    $upic=(int)$upic;
    //上传
    $mupic_r=eMember_UpicReturnPathfile($userid,$upic);
    $mynewspath=$mupic_r['rpath'];
    $myfn=$mupic_r['rinsertfile'];
    $tfr=ecp_DoTranFile($file,$file_name,$file_type,$file_size,$mynewspath,3,1,1,'','',$myfn,0);
    //更新
    $sql=$empire->query("update ".eReturnMemberTable()." set ".egetmf('upic')."='$upic' where ".egetmf('userid')."='$userid'");
    //dely
    if($user_r['upic']&&$user_r['upic']!=$upic)
    {
        eMember_UpicDelFile($userid,$user_r['upic']);
    }
    if($sql)
    {
        printerror("EditUpicSuccess","../member/EditInfo/EditUpic.php",1);
    }
    else
    {
        printerror("DbError","history.go(-1)",1);
    }
}
?>

QQ客服

扫码添加客服QQ

使用QQ扫一扫,或长按识别二维码

QQ二维码

如无法扫码,请手动添加QQ:

长按图片保存或识别二维码