Thinkphp会员模块
jianfly.com 2019-01-31 2375次浏览
1、会员表设计
CREATE TABLE IF NOT EXISTS `qf_member` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(50) DEFAULT NULL COMMENT '用户名', `password` char(50) DEFAULT NULL COMMENT '密码', `email` char(50) DEFAULT NULL COMMENT '邮箱', `header` varchar(255) DEFAULT NULL COMMENT '头像', `relname` char(50) NOT NULL COMMENT '真实姓名', `mobile` char(25) NOT NULL COMMENT '手机', `qq` char(25) NOT NULL COMMENT 'QQ', `openid` char(50) DEFAULT NULL COMMENT 'QQ登录后的openid', `access_token` char(50) DEFAULT NULL COMMENT 'QQ登录后的access_token', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='前台用户表' AUTO_INCREMENT=87 ;
2、php公用方法
(1)外部框架
<?php namespace Home\Controller; /** * used for members related * @author jianfly.com */ class UserController extends PublicController { function __construct() { parent::__construct(); } }
(2)Public公用
/** * 检测格式 * @param email 邮箱 不为空,格式验证 * @param password 密码 不为空 */ protected function checkSafe( $email , $password ) { $email = htmlspecialchars($email); $password = htmlspecialchars($password); $data = array();//返回值 //检测邮箱和密码为空 if(!$email) { $data['state'] = false; $data['msg'] = "邮箱不能为空"; return $data; exit; } if(!$password) { $data['state'] = false; $data['msg'] = "密码不能为空"; return $data; exit; } //检测邮箱格式 if( !$this->checkEmail($email) ) { $data['state'] = false; $data['msg'] = "邮箱格式错误"; return $data; exit; } $data['state'] = true; $data['msg'] = "验证通过"; return $data; } /** * 检测邮箱格式 */ public function checkEmail ( $email ) { $email = htmlspecialchars($email); if (!preg_match('/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/', $email)) return false;//邮件格式错误 else return true;//邮件格式正确 } /** * 检查用户是否登录 */ public function checkLogin() { if (!$_SESSION['member']) { $this->error("请先登录",U('User/login')); exit; } } /** * 从SESSION中获取个人信息 */ protected function find_lists() { if($_SESSION['member']) $this->assign('member',$_SESSION['member']);//从SESSION中获取个人信息 }
(3)重复使用的方法封装
/** * 增加用户 */ protected function addUser( $email , $password ) { $data = array(); $data['email'] = htmlspecialchars($email); $data['password'] = md5(htmlspecialchars($password)); if(M('member')->add($data)) return true;//添加成功 else return false;//添加失败 } /** * 通过邮箱号找到此用户 */ protected function findUserByEmail( $email ) { $email = htmlspecialchars($email); $member = M('member')->where(array("email"=>$email))->find(); if($member) { return true;//重复 }else{ return false;//不重复 } } /* * 通过邮箱和密码找到用户信息 */ protected function findUserByPwd ( $email , $pwd ) { $email = htmlspecialchars($email); $pwd = md5(htmlspecialchars($pwd)); $member = M('member')->where(array("email"=>$email , 'password'=>$pwd))->find(); if($member) return $member; else return false; } /** * 修改用户信息 */ protected function changeInfo( $id , $data ) { $ret = M('member')->where(array('id'=>$id))->save($data); return $ret; } /** * 清除用户信息(登出) */ public function logOut() { unset($_SESSION['member']); $this->display('login'); }
(4)注册
/* * 用户注册页面 */ public function reg() { $this->display(); } /* * 处理用户注册数据 */ public function doreg() { if ($_SESSION['verify'] != md5($_POST['code'])) { $this->error('验证码错误!'); } //获取数据 $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); //检测邮箱和密码格式 $check = $this->checkSafe( $email, $password ); if( !$check['state'] ) { $this->error($check['msg']); exit; } //检测用户名是否重复 if($this->findUserByEmail($email)) { $this->error("邮箱重复");exit; } //将用户写入数据表 if($this->addUser( $email , $password )) { $this->success("注册成功","login"); }else{ $this->error("系统繁忙,请稍后重试");exit; } }
(5)登录
/* * 用户登录页面 */ public function login() { $this->display(); } /* * 处理用户登录 */ public function dologin() { //获取数据 $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); //检测邮箱和密码格式 $check = $this->checkSafe( $email, $password ); if( !$check['state'] ) { $this->error($check['msg']); exit; } //检测用户名是否存在 if(!$this->findUserByEmail($email)) { $this->error("用户名不存在");exit; } //查找用户信息 $member = $this->findUserByPwd( $email , $password ); if(!$member) $this->error("密码错误"); else { $_SESSION['member'] = $member; $this->redirect('index'); } }
(6)个人中心信息修改等
/* * 个人中心 */ public function index() { $this->checkLogin(); $this->display(); } /* * 更改密码 */ public function cpwd() { $this->checkLogin(); $this->display(); } /** * 处理修改密码 * @param id 用户id,SESSION获取 * @param password 新密码 */ public function docpwd() { $this->checkLogin(); //获取数据 $id = $_SESSION['member']['id']; $password = htmlspecialchars($_POST['password']); //检测密码是否为空 if(!$password) { $this->error("请填写密码"); exit; } $data['password'] = md5($password); if( $this->changeInfo($id,$data) ) { $this->logOut(); $this->success("修改成功,请重新登录",'login'); }else { $this->error("系统繁忙,请稍后重试"); } } /** * 修改个人信息 * @param id 用户id,SESSION获取 * @param data 徐修改的信息 */ public function docinfo() { $this->checkLogin(); //获取数据 $id = $_SESSION['member']['id']; $data['name'] = htmlspecialchars($_POST['name']); $data['relname'] = htmlspecialchars($_POST['relname']); $data['qq'] = htmlspecialchars($_POST['qq']); $data['mobile'] = htmlspecialchars($_POST['mobile']); if( $this->changeInfo($id,$data) ) { $member = M('member')->where(array('id'=>$id))->find(); $_SESSION['member'] = $member; $this->assign('member',$member); $this->success("修改成功",'index'); }else { $this->error("系统繁忙,请稍后重试"); } }