member_registerfun.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. //--------------- 注册函数 ---------------
  3. //验证会员组是否可注册
  4. function CheckMemberGroupCanReg($groupid){
  5. global $empire,$dbtbpre;
  6. $groupid=(int)$groupid;
  7. $r=$empire->fetch1("select groupid from {$dbtbpre}enewsmembergroup where groupid='$groupid' and canreg=1");
  8. if(empty($r['groupid']))
  9. {
  10. printerror('ErrorUrl','',1);
  11. }
  12. }
  13. //验证注册时间
  14. function eCheckIpRegTime($ip,$time){
  15. global $empire,$dbtbpre;
  16. if(empty($time))
  17. {
  18. return '';
  19. }
  20. $uaddr=$empire->fetch1("select userid from {$dbtbpre}enewsmemberadd where regip='$ip' order by userid desc limit 1");
  21. if(empty($uaddr['userid']))
  22. {
  23. return '';
  24. }
  25. $ur=$empire->fetch1("select ".eReturnSelectMemberF('userid,registertime')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$uaddr[userid]' limit 1");
  26. if(empty($ur['userid']))
  27. {
  28. return '';
  29. }
  30. $registertime=eReturnMemberIntRegtime($ur['registertime']);
  31. if(time()-$registertime<=$time*3600)
  32. {
  33. printerror('RegisterReIpError','',1);
  34. }
  35. }
  36. //用户注册
  37. function register($add){
  38. global $empire,$dbtbpre,$public_r,$ecms_config;
  39. //关闭注册
  40. if($public_r['register_ok'])
  41. {
  42. printerror('CloseRegister','',1);
  43. }
  44. //验证时间段允许操作
  45. eCheckTimeCloseDo('reg');
  46. //验证IP
  47. eCheckAccessDoIp('register');
  48. if(!empty($ecms_config['member']['registerurl']))
  49. {
  50. Header("Location:".$ecms_config['member']['registerurl']);
  51. exit();
  52. }
  53. //已经登陆不能注册
  54. if(getcvar('mluserid'))
  55. {
  56. printerror('LoginToRegister','',1);
  57. }
  58. CheckCanPostUrl();//验证来源
  59. $username=trim($add['username']);
  60. $password=trim($add['password']);
  61. $username=RepPostVar($username);
  62. $password=RepPostVar($password);
  63. $email=addslashes(RepPostStr($add['email']));
  64. $email=RepPostVar($email);
  65. if(!$username||!$password||!$email)
  66. {
  67. printerror("EmptyMember","history.go(-1)",1);
  68. }
  69. $tobind=(int)$add['tobind'];
  70. //验证码
  71. $keyvname='checkregkey';
  72. if($public_r['regkey_ok'])
  73. {
  74. ecmsCheckShowKey($keyvname,$add['key'],1);
  75. }
  76. $user_groupid=eReturnMemberDefGroupid();
  77. $groupid=(int)$add['groupid'];
  78. $groupid=empty($groupid)?$user_groupid:$groupid;
  79. CheckMemberGroupCanReg($groupid);
  80. //IP
  81. $regip=egetip();
  82. $regipport=egetipport();
  83. //用户字数
  84. $pr=$empire->fetch1("select min_userlen,max_userlen,min_passlen,max_passlen,regretime,regclosewords,regemailonly from {$dbtbpre}enewspublic limit 1");
  85. $userlen=strlen($username);
  86. if($userlen<$pr[min_userlen]||$userlen>$pr[max_userlen])
  87. {
  88. printerror('FaiUserlen','',1);
  89. }
  90. //密码字数
  91. $passlen=strlen($password);
  92. if($passlen<$pr[min_passlen]||$passlen>$pr[max_passlen])
  93. {
  94. printerror('FailPasslen','',1);
  95. }
  96. if($add['repassword']!==$password)
  97. {
  98. printerror('NotRepassword','',1);
  99. }
  100. if(!chemail($email))
  101. {
  102. printerror('EmailFail','',1);
  103. }
  104. if(strstr($username,'|')||strstr($username,'*'))
  105. {
  106. printerror('NotSpeWord','',1);
  107. }
  108. //同一IP注册
  109. eCheckIpRegTime($regip,$pr['regretime']);
  110. //保留用户
  111. toCheckCloseWord($username,$pr['regclosewords'],'RegHaveCloseword');
  112. $username=RepPostStr($username);
  113. //重复用户
  114. $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('username')."='$username' limit 1");
  115. if($num)
  116. {
  117. printerror('ReUsername','',1);
  118. }
  119. //重复邮箱
  120. if($pr['regemailonly'])
  121. {
  122. $num=$empire->gettotal("select count(*) as total from ".eReturnMemberTable()." where ".egetmf('email')."='$email' limit 1");
  123. if($num)
  124. {
  125. printerror('ReEmailFail','',1);
  126. }
  127. }
  128. //注册时间
  129. $lasttime=time();
  130. $registertime=eReturnAddMemberRegtime();
  131. $rnd=make_password(20);//产生随机密码
  132. $userkey=eReturnMemberUserKey();
  133. //密码
  134. $truepassword=$password;
  135. $salt=eReturnMemberSalt();
  136. $password=eDoMemberPw($password,$salt);
  137. //审核
  138. $checked=ReturnGroupChecked($groupid);
  139. if($checked&&$public_r['regacttype'])
  140. {
  141. $checked=0;
  142. }
  143. $checked=(int)$checked;
  144. //验证附加表必填项
  145. $mr['add_filepass']=ReturnTranFilepass();
  146. $fid=GetMemberFormId($groupid);
  147. $member_r=ReturnDoMemberF($fid,$add,$mr,0,$username);
  148. $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');");
  149. //取得userid
  150. $userid=$empire->lastid();
  151. //附加表
  152. $addr=$empire->fetch1("select * from {$dbtbpre}enewsmemberadd where userid='$userid'");
  153. if(!$addr[userid])
  154. {
  155. $spacestyleid=ReturnGroupSpaceStyleid($groupid);
  156. $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].");");
  157. }
  158. //更新附件
  159. UpdateTheFileOther(6,$userid,$mr['add_filepass'],'member');
  160. ecmsEmptyShowKey($keyvname);//清空验证码
  161. //绑定帐号
  162. if($tobind)
  163. {
  164. MemberConnect_BindUser($userid);
  165. }
  166. if($sql)
  167. {
  168. //邮箱激活
  169. if($checked==0&&$public_r['regacttype']==1)
  170. {
  171. include('class/member_actfun.php');
  172. SendActUserEmail($userid,$username,$email);
  173. }
  174. //审核
  175. if($checked==0)
  176. {
  177. $location=DoingReturnUrl("../../",$_POST['ecmsfrom']);
  178. printerror("RegisterSuccessCheck",$location,1);
  179. }
  180. $logincookie=0;
  181. if($ecms_config['member']['regcookietime'])
  182. {
  183. $logincookie=time()+$ecms_config['member']['regcookietime'];
  184. }
  185. $r=$empire->fetch1("select ".eReturnSelectMemberF('*')." from ".eReturnMemberTable()." where ".egetmf('userid')."='$userid' limit 1");
  186. $set1=esetcookie("mlusername",$username,$logincookie);
  187. $set2=esetcookie("mluserid",$userid,$logincookie);
  188. $set3=esetcookie("mlgroupid",$groupid,$logincookie);
  189. $set4=esetcookie("mlrnd",$rnd,$logincookie);
  190. //验证符
  191. qGetLoginAuthstr($userid,$username,$rnd,$groupid,$logincookie);
  192. //登录附加cookie
  193. AddLoginCookie($r);
  194. $location="../member/cp/";
  195. $returnurl=getcvar('returnurl');
  196. if($returnurl&&!strstr($returnurl,"e/member/iframe")&&!strstr($returnurl,"e/member/register")&&!strstr($returnurl,"enews=exit"))
  197. {
  198. $location=$returnurl;
  199. }
  200. $set5=esetcookie("returnurl","");
  201. //易通行系统
  202. DoEpassport('reg',$userid,$username,$truepassword,$salt,$email,$groupid,$registertime);
  203. $location=DoingReturnUrl($location,$_POST['ecmsfrom']);
  204. printerror("RegisterSuccess",$location,1);
  205. }
  206. else
  207. {printerror("DbError","history.go(-1)",1);}
  208. }
  209. ?>