演示 豫内网www.371City.com
做了个小修改 让uch可以用email或者用户名登陆
看 了 LuciferSheng 的 用EMAIL登录,可对我不实用。因为我想让用户 用EMAIL或者用户名登录都可以。
简单的修改一下,即可实现此功能。
原则是 先判断 用户登录输入的 “用户名” 是 不是EMAIL。若是,判断,然后调出用户名。若不是正常按照用登录
感谢13楼提醒,验证 4位的域名了。
- 原if(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
复制代码 修改为- if(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$email)) {
复制代码
do_login.php
在- if($_SCONFIG['seccode_login']) {
复制代码 上面添加以下代码:(更正版)
- function checkemail($email) {
- if(!trim($email) == "") {
- if(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$email)) {
- $result =1;
- return $result;
- }
- }
- }
- if (checkemail($username))
- {
- $email = $username;
- $query = $_SGLOBAL['db']->query("SELECT username FROM uc_members WHERE email='$email'");
- $info = $_SGLOBAL['db']->fetch_array($query);
- $username = $info['username'];
- }
复制代码
上传,即可
以上代码存在一个问题。就是当用户修改自己的EMAIL后,再用EMAIL就不能登录,这是因为用户修改后的EMAIL和注册EMAIL存的表是不一样的。这是后来才发现的。 程序更新如下。以前照着上面方法修改过的朋友,请用下面最新的代码!谢谢!(请将以前修改的代码全部删除!)
1、注意:如果你安装的时候,默认安装的,就不用动代码。如果手工修改过,并自行修改为自己的表前缀!用到uchome_spacefield 和uc_members 两个表。请对照自己的表前缀,自行修改。以下代码目前适用于UCHOME和UCENTER 安装在同一数据库的情况
在source/do_login.php 中查找- if($_SCONFIG['seccode_login']) {
复制代码 ,在上面添加以下代码!
-
- if(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$username))
- {
- $email = $username;
-
- $query1 = $_SGLOBAL['db']->query("SELECT uid FROM uchome_spacefield WHERE email='$email'");
- $info1 = $_SGLOBAL['db']->fetch_array($query1);
- $uid = $info1['uid'];
-
- if(empty($uid))
- {
- $query = $_SGLOBAL['db']->query("SELECT username FROM uc_members WHERE email='$email1'");
- $info = $_SGLOBAL['db']->fetch_array($query);
- $username = $info['username'];
- }
- else
- {
- $query = $_SGLOBAL['db']->query("SELECT username FROM uc_members WHERE uid='$uid'");
- $info = $_SGLOBAL['db']->fetch_array($query);
- $username = $info['username'];
- }
- }
复制代码
2、如果你的UCHOME 和UCENTER安装在不同库,请在上面代码的基础上做以下修改:
以下方法:
如 uc_members 安装在A库
uchome_spacefield 安装在B库。
可修改如下代码
$query1 = $_SGLOBAL['db']->query("SELECT uid FROM B.uchome_spacefield WHERE B.uchome_spacefield.email='$email'"); //(此处前面的B可不加)
$query = $_SGLOBAL['db']->query("SELECT A.uc_members.username FROM A.uc_members WHERE A.uc_members.email='$email1'");
$query = $_SGLOBAL['db']->query("SELECT A.uc_members.username FROM A.uc_members WHERE A.uc_members.uid='$uid'");
不明白如何修改的。可直接下载附件(附件为安装同一库的情况)
[ 本帖最后由 darkeyes 于 2008-6-14 09:58 编辑 ] |