帝國cms會員中心二開常用函式

我是小弟弟發表於2024-12-05

判斷使用者是否登入函式

檔案目錄

e\member\class\user.php

函式

function islogin($uid=0,$uname='',$urnd=''){
    global $empire,$dbtbpre,$public_r,$ecmsreurl,$ecms_config;
    if($uid)
    {$userid=(int)$uid;}
    else
    {$userid=(int)getcvar('mluserid');}
    if($uname)
    {$username=$uname;}
    else
    {$username=getcvar('mlusername');}
    $username=RepPostVar($username);
    if($urnd)
    {$rnd=$urnd;}
    else
    {$rnd=getcvar('mlrnd');}
    if($ecms_config['member']['loginurl'])
    {$gotourl=$ecms_config['member']['loginurl'];}
    else
    {$gotourl=$public_r['newsurl']."e/member/login/";}
    $petype=1;
    $rnd=RepPostVar($rnd);
    if(!$userid||!$username||!$rnd)
    {
        if(!getcvar('returnurl'))
        {
            esetcookie("returnurl",EcmsGetReturnUrl(),0);
        }
        if($ecmsreurl==1)
        {
            $gotourl="history.go(-1)";
            $petype=9;
        }
        elseif($ecmsreurl==2)
        {
            $phpmyself=urlencode(eReturnSelfPage(1));
            $gotourl=$public_r['newsurl']."e/member/login/login.php?prt=1&from=".$phpmyself;
            $petype=9;
        }
        printerror("NotLogin",$gotourl,$petype);
    }
    //cookie
    if(getcvar('mluserid'))
    {
        $qcklgr=qCheckLoginAuthstr();
        if(!$qcklgr['islogin'])
        {
            EmptyEcmsCookie();
            if(!getcvar('returnurl'))
            {
                esetcookie("returnurl",EcmsGetReturnUrl(),0);
            }
            if($ecmsreurl==1)
            {
                $gotourl="history.go(-1)";
                $petype=9;
            }
            elseif($ecmsreurl==2)
            {
                $phpmyself=urlencode(eReturnSelfPage(1));
                $gotourl=$public_r['newsurl']."e/member/login/login.php?prt=1&from=".$phpmyself;
                $petype=9;
            }
            printerror("NotSingleLogin",$gotourl,$petype);
        }
    }
    $cr=$empire->fetch1("select ".eReturnSelectMemberF('userid,username,email,groupid,userfen,money,userdate,zgroupid,havemsg,checked,registertime,ingid,agid,isern')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$userid' and ".egetmf('username')."='$username' and ".egetmf('rnd')."='$rnd' limit 1");
    if(!$cr['userid'])
    {
        EmptyEcmsCookie();
        if(!getcvar('returnurl'))
        {
            esetcookie("returnurl",EcmsGetReturnUrl(),0);
        }
        if($ecmsreurl==1)
        {
            $gotourl="history.go(-1)";
            $petype=9;
        }
        elseif($ecmsreurl==2)
        {
            $phpmyself=urlencode(eReturnSelfPage(1));
            $gotourl=$public_r['newsurl']."e/member/login/login.php?prt=1&from=".$phpmyself;
            $petype=9;
        }
        printerror("NotSingleLogin",$gotourl,$petype);
    }
    if($cr['checked']==0)
    {
        EmptyEcmsCookie();
        if($ecmsreurl==1)
        {
            $gotourl="history.go(-1)";
            $petype=9;
        }
        elseif($ecmsreurl==2)
        {
            $phpmyself=urlencode(eReturnSelfPage(1));
            $gotourl=$public_r['newsurl']."e/member/login/login.php?prt=1&from=".$phpmyself;
            $petype=9;
        }
        printerror("NotCheckedUser",'',$petype);
    }
    //預設會員組
    if(empty($cr['groupid']))
    {
        $user_groupid=eReturnMemberDefGroupid();
        $usql=$empire->query("update ".eReturnMemberTable()." set ".egetmf('groupid')."='$user_groupid' where ".egetmf('userid')."='".$cr[userid]."'");
        $cr['groupid']=$user_groupid;
    }
    //是否過期
    if($cr['userdate'])
    {
        if($cr['userdate']-time()<=0)
        {
            OutTimeZGroup($cr['userid'],$cr['zgroupid']);
            $cr['userdate']=0;
            if($cr['zgroupid'])
            {
                $cr['groupid']=$cr['zgroupid'];
                $cr['zgroupid']=0;
            }
        }
    }
    $re[userid]=$cr['userid'];
    $re[rnd]=$rnd;
    $re[username]=$cr['username'];
    $re[email]=$cr['email'];
    $re[userfen]=$cr['userfen'];
    $re[money]=$cr['money'];
    $re[groupid]=$cr['groupid'];
    $re[userdate]=$cr['userdate'];
    $re[zgroupid]=$cr['zgroupid'];
    $re[havemsg]=$cr['havemsg'];
    $re[registertime]=$cr['registertime'];
    $re[ingid]=$cr['ingid'];
    $re[agid]=$cr['agid'];
    $re[isern]=$cr['isern'];
    $re['checked']=$cr['checked'];
    return $re;
}

登入函式

路徑

e\member\class\member_loginfun.php

函式

//登入
function qlogin($add){
    global $empire,$dbtbpre,$public_r,$ecms_config;
    if($ecms_config['member']['loginurl'])
    {
        Header("Location:".$ecms_config['member']['loginurl']);
        exit();
    }
    $dopr=1;
    if($_POST['prtype'])
    {
        $dopr=9;
    }
    $username=trim($add['username']);
    $password=trim($add['password']);
    if(!$username||!$password)
    {
        printerror("EmptyLogin","history.go(-1)",$dopr);
    }
    $tobind=(int)$add['tobind'];
    //驗證碼
    $keyvname='checkloginkey';
    if($public_r['loginkey_ok'])
    {
        ecmsCheckShowKey($keyvname,$add['key'],$dopr);
    }
    $username=RepPostVar($username);
    $password=RepPostVar($password);
    $num=0;
    $r=$empire->fetch1("select ".eReturnSelectMemberF('*')." from ".eReturnMemberTable()." where ".egetmf('username')."='$username' limit 1");
    if(!$r['userid'])
    {
        printerror("FailPassword","history.go(-1)",$dopr);
    }
    if(!eDoCkMemberPw($password,$r['password'],$r['salt']))
    {
        printerror("FailPassword","history.go(-1)",$dopr);
    }
    if($r['checked']==0)
    {
        if($public_r['regacttype']==1)
        {
            printerror('NotCheckedUser','../member/register/regsend.php',1);
        }
        else
        {
            printerror('NotCheckedUser','',1);
        }
    }
    //繫結帳號
    if($tobind)
    {
        MemberConnect_BindUser($r['userid']);
    }
    $rnd=make_password(20);//取得隨機密碼
    //預設會員組
    if(empty($r['groupid']))
    {
        $r['groupid']=eReturnMemberDefGroupid();
    }
    $r['groupid']=(int)$r['groupid'];
    $lasttime=time();
    //IP
    $lastip=egetip();
    $lastipport=egetipport();
    $usql=$empire->query("update ".eReturnMemberTable()." set ".egetmf('rnd')."='$rnd',".egetmf('groupid')."='$r[groupid]' where ".egetmf('userid')."='$r[userid]'");
    $empire->query("update {$dbtbpre}enewsmemberadd set lasttime='$lasttime',lastip='$lastip',loginnum=loginnum+1,lastipport='$lastipport' where userid='$r[userid]'");
    //設定cookie
    $lifetime=(int)$add['lifetime'];
    $logincookie=0;
    if($lifetime)
    {
        $logincookie=time()+$lifetime;
    }
    $set1=esetcookie("mlusername",$username,$logincookie);
    $set2=esetcookie("mluserid",$r['userid'],$logincookie);
    $set3=esetcookie("mlgroupid",$r['groupid'],$logincookie);
    $set4=esetcookie("mlrnd",$rnd,$logincookie);
    //驗證符
    qGetLoginAuthstr($r['userid'],$username,$rnd,$r['groupid'],$logincookie);
    //登入附加cookie
    AddLoginCookie($r);
    $location="../member/cp/";
    $returnurl=getcvar('returnurl');
    if($returnurl)
    {
        $location=$returnurl;
    }
    if(strstr($_SERVER['HTTP_REFERER'],"e/member/iframe"))
    {
        $location="../member/iframe/";
    }
    if(strstr($location,"enews=exit")||strstr($location,"e/member/register")||strstr($_SERVER['HTTP_REFERER'],"e/member/register"))
    {
        $location="../member/cp/";
        $_POST['ecmsfrom']='';
    }
    ecmsEmptyShowKey($keyvname);//清空驗證碼
    $set6=esetcookie("returnurl","");
    if($set1&&$set2)
    {
        //易通行系統
        DoEpassport('login',$r['userid'],$username,$password,$r['salt'],$r['email'],$r['groupid'],$r['registertime']);
        $location=DoingReturnUrl($location,$_POST['ecmsfrom']);
        printerror("LoginSuccess",$location,$dopr);
    }
    else
    {
        printerror("NotCookie","history.go(-1)",$dopr);
    }
}

註冊函式

路徑

\e\member\class\member_registerfun.php

函式

//使用者註冊
function register($add){
    global $empire,$dbtbpre,$public_r,$ecms_config;
    //關閉註冊
    if($public_r['register_ok'])
    {
        printerror('CloseRegister','',1);
    }
    //驗證時間段允許操作
    eCheckTimeCloseDo('reg');
    //驗證IP
    eCheckAccessDoIp('register');
    if(!empty($ecms_config['member']['registerurl']))
    {
        Header("Location:".$ecms_config['member']['registerurl']);
        exit();
    }
    //已經登陸不能註冊
    if(getcvar('mluserid'))
    {
        printerror('LoginToRegister','',1);
    }
    CheckCanPostUrl();//驗證來源
    $username=trim($add['username']);
    $password=trim($add['password']);
    $username=RepPostVar($username);
    $password=RepPostVar($password);
    $email=addslashes(RepPostStr($add['email']));
    $email=RepPostVar($email);
    if(!$username||!$password||!$email)
    {
        printerror("EmptyMember","history.go(-1)",1);
    }
    $tobind=(int)$add['tobind'];
    //驗證碼
    $keyvname='checkregkey';
    if($public_r['regkey_ok'])
    {
        ecmsCheckShowKey($keyvname,$add['key'],1);
    }
    $user_groupid=eReturnMemberDefGroupid();
    $groupid=(int)$add['groupid'];
    $groupid=empty($groupid)?$user_groupid:$groupid;
    CheckMemberGroupCanReg($groupid);
    //IP
    $regip=egetip();
    $regipport=egetipport();
    //使用者字數
    $pr=$empire->fetch1("select min_userlen,max_userlen,min_passlen,max_passlen,regretime,regclosewords,regemailonly from {$dbtbpre}enewspublic limit 1");
    $userlen=strlen($username);
    if($userlen<$pr[min_userlen]||$userlen>$pr[max_userlen])
    {
        printerror('FaiUserlen','',1);
    }
    //密碼字數
    $passlen=strlen($password);
    if($passlen<$pr[min_passlen]||$passlen>$pr[max_passlen])
    {
        printerror('FailPasslen','',1);
    }
    if($add['repassword']!==$password)
    {
        printerror('NotRepassword','',1);
    }
    if(!chemail($email))
    {
        printerror('EmailFail','',1);
    }
    if(strstr($username,'|')||strstr($username,'*'))
    {
        printerror('NotSpeWord','',1);
    }
    //同一IP註冊
    eCheckIpRegTime($regip,$pr['regretime']);
    //保留使用者
    toCheckCloseWord($username,$pr['regclosewords'],'RegHaveCloseword');
    $username=RepPostStr($username);
    //重複使用者
    $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('username')."='$username' limit 1");
    if($num)
    {
        printerror('ReUsername','',1);
    }
    //重複郵箱
    if($pr['regemailonly'])
    {
        $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('email')."='$email' limit 1");
        if($num)
        {
            printerror('ReEmailFail','',1);
        }
    }
    //註冊時間
    $lasttime=time();
    $registertime=eReturnAddMemberRegtime();
    $rnd=make_password(20);//產生隨機密碼
    $userkey=eReturnMemberUserKey();
    //密碼
    $truepassword=$password;
    $salt=eReturnMemberSalt();
    $password=eDoMemberPw($password,$salt);
    //稽核
    $checked=ReturnGroupChecked($groupid);
    if($checked&&$public_r['regacttype'])
    {
        $checked=0;
    }
    $checked=(int)$checked;
    //驗證附加表必填項
    $mr['add_filepass']=ReturnTranFilepass();
    $fid=GetMemberFormId($groupid);
    $member_r=ReturnDoMemberF($fid,$add,$mr,0,$username);

    $sql=$empire->query("insert into ".eReturnMemberTable()."(".eReturnInsertMemberF('username,password,rnd,email,registertime,groupid,userfen,userdate,money,zgroupid,havemsg,checked,salt,userkey').") values('$username','$password','$rnd','$email','$registertime','$groupid','$public_r[reggetfen]','0','0','0','0','$checked','$salt','$userkey');");
    //取得userid
    $userid=$empire->lastid();
    //附加表
    $addr=$empire->fetch1("select * from {$dbtbpre}enewsmemberadd where userid='$userid'");
    if(!$addr[userid])
    {
        $spacestyleid=ReturnGroupSpaceStyleid($groupid);
        $sql1=$empire->query("insert into {$dbtbpre}enewsmemberadd(userid,spacestyleid,regip,lasttime,lastip,loginnum,regipport,lastipport".$member_r[0].") values('$userid','$spacestyleid','$regip','$lasttime','$regip','1','$regipport','$regipport'".$member_r[1].");");
    }
    //更新附件
    UpdateTheFileOther(6,$userid,$mr['add_filepass'],'member');
    ecmsEmptyShowKey($keyvname);//清空驗證碼
    //繫結帳號
    if($tobind)
    {
        MemberConnect_BindUser($userid);
    }
    if($sql)
    {
        //郵箱啟用
        if($checked==0&&$public_r['regacttype']==1)
        {
            include('class/member_actfun.php');
            SendActUserEmail($userid,$username,$email);
        }
        //稽核
        if($checked==0)
        {
            $location=DoingReturnUrl("../../",$_POST['ecmsfrom']);
            printerror("RegisterSuccessCheck",$location,1);
        }
        $logincookie=0;
        if($ecms_config['member']['regcookietime'])
        {
            $logincookie=time()+$ecms_config['member']['regcookietime'];
        }
        $r=$empire->fetch1("select ".eReturnSelectMemberF('*')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$userid' limit 1");
        $set1=esetcookie("mlusername",$username,$logincookie);
        $set2=esetcookie("mluserid",$userid,$logincookie);
        $set3=esetcookie("mlgroupid",$groupid,$logincookie);
        $set4=esetcookie("mlrnd",$rnd,$logincookie);
        //驗證符
        qGetLoginAuthstr($userid,$username,$rnd,$groupid,$logincookie);
        //登入附加cookie
        AddLoginCookie($r);
        $location="../member/cp/";
        $returnurl=getcvar('returnurl');
        if($returnurl&&!strstr($returnurl,"e/member/iframe")&&!strstr($returnurl,"e/member/register")&&!strstr($returnurl,"enews=exit"))
        {
            $location=$returnurl;
        }
        $set5=esetcookie("returnurl","");
        //易通行系統
        DoEpassport('reg',$userid,$username,$truepassword,$salt,$email,$groupid,$registertime);
        $location=DoingReturnUrl($location,$_POST['ecmsfrom']);
        printerror("RegisterSuccess",$location,1);
    }
    else
    {printerror("DbError","history.go(-1)",1);}
}

相關文章