本帖最后由 weiwenchu 于 2011-9-24 09:10 编辑
给我自己的网站做个广告,淮安爱家网:http://www.haaijia.com/
思路很简单:将用户名检测换成邮箱检测,用户完成注册后同时将用户名(即注册邮箱)数据写入email字段中,两者互不冲突。(有个小漏洞就是个人资料中的常用邮箱可以修改,而登录邮箱还是原先注册时的那个邮箱,最懒的解决方法是在个人资料模版中删除相应的字段即可)
1.修改注册模版中注册邮箱的长度限制
打开文件:\template\default\do_register.htm
查找代码:- if(unLen < 3 || unLen > 15) {
- warning(cu, unLen < 3 ? '用户名小于3个字符' : '用户名超过 15 个字符');
- return;
- }
复制代码
修改为:
- if(unLen < 6 || unLen > 36) {
- warning(cu, unLen < 6 ? '用户名小于6个字符' : '用户名超过 36 个字符');
- return;
- }
复制代码 注意:这里只是修改了模版页面中用户输入的字符数的检测限制,数据库中相应的username字段的长度限制需要手动去,由于数量较多,这里就不作详细的叙述了。
同时删除以下代码:
- <tr><th>邮箱</th><td><input type="text" id="email" name="email" value="@" class="t_input" tabindex="5" />
- <br>请准确填入您的邮箱,在忘记密码,或者您使用邮件通知功能时,会发送邮件到该邮箱。</td></tr>
复制代码
2.关键!修改注册页面的php代码
打开文件:source/do_register.php
查找并删掉以下代码:
- $email = isemail($_POST['email'])?$_POST['email']:'';
- if(empty($email)) {
- showmessage('email_format_is_wrong');
- }
- //检查邮件
- if($_SCONFIG['checkemail']) {
- if($count = getcount('spacefield', array('email'=>$email))) {
- showmessage('email_has_been_registered');
- }
- }
复制代码
在下面添加代码:
- $email = $username;
- !isemail($username)?showmessage('邮箱不合法!'):'';//isemail检查邮箱是否有效
- $query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
- $u=$_SGLOBAL['db']->fetch_array($query);
- !empty($u)?showmessage('email_has_been_registered'):'';//检查邮箱重复
复制代码 继续查找代码:
- //检查IP
- $onlineip = getonlineip();
- if($_SCONFIG['regipdate']) {
- $query = $_SGLOBAL['db']->query("SELECT dateline FROM ".tname('space')." WHERE regip='$onlineip' ORDER BY dateline DESC LIMIT 1");
- if($value = $_SGLOBAL['db']->fetch_array($query)) {
- if($_SGLOBAL['timestamp'] - $value['dateline'] < $_SCONFIG['regipdate']*3600) {
- showmessage('regip_has_been_registered', '', 1, array($_SCONFIG['regipdate']));
- }
- }
- }
复制代码 在下面添加代码:
- $query=$_SGLOBAL['db']->query('select uid from '.tname('member').' order by uid desc limit 0,1');
- $value=$_SGLOBAL['db']->fetch_array($query);
复制代码 继续查找代码:
- $username = trim($_GET['username']);
- if(empty($username)) {
- showmessage('user_name_is_not_legitimate');
- }
- @include_once (S_ROOT.'./uc_client/client.php');
复制代码 在下面添加代码:
- !isemail($username)?showmessage('邮箱不合法!'):'';
- $query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
- $u=$_SGLOBAL['db']->fetch_array($query);
- !empty($u)?showmessage('email_has_been_registered'):showmessage('succeed');
复制代码
3.修改登录页面PHP代码
打开文件 source/do_login.php
查找代码:
- //同步获取用户源
- if(!$passport = getpassport($username, $password)) {
- showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
- }
复制代码 在下面添加代码:
- $passport = getpassport($username, $password);
- if(empty($passport)){
- $password = md5("$password");
- $sql="select uid,username from ".tname('member')." where password='$password' and username='$username'";
- $query = $_SGLOBAL['db']->query($sql);
- $passport = $_SGLOBAL['db']->fetch_array($query);
- if(empty($passport)){
- showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
- }
- }
复制代码
4.修改ucenter和uc_client中关于用户长度的限制
打开文件:uc_client/model/user.php和ucenter中的同名目录
查找代码:
- function check_username($username) {
- $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
- $len = strlen($username);
- if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*"\s\<\>\&]|$guestexp/is", $username)) {
- return FALSE;
- } else {
- return TRUE;
- }
- }
复制代码
修改里面的数字(同第一步)
最后修改数据库中相应字段的长度限制就可以了,还有别忘了更新缓存!
|