thinkphp框架下实现登录、注册、找回密码功能


Posted in PHP onApril 06, 2016

本文实例为大家分享了thinkphp框架下使用ajax表单提交的登录、注册、找密码的实现方法,以及注册后的用户需后台审核。

user表的字段为id、num、password、name、email、addtime、status

具体代码如下

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller {
  //处理登录
  public function signin(){ 
    if(IS_GET){ 
      $this->display();
    } 
    if(IS_POST){
      /* 调用登录接口登录 */
      $User = M('user') ;  
      //I方法接收页面传递来的值
      $num = I('num') ; 
      $password = I('password') ;
      //查找user表中num等于$num的值
      $datanum = $User->where(array('num'=>$num))->find();
      //判断$datanum的值
      if ($datanum){
        if (md5($password) === $datanum['password']) { 
          if ($datanum['status'] == 0) {
            $this->error('用户处于未审核状态,请联系管理员');
          }elseif($datanum['status'] == 2){
            $this->error('用户处于禁用状态,请联系管理员');
          }else{
            $this->autoLogin($datanum) ; //调用私有方法自动登录. 
            $uid = $datanum['id'];
            if($_SESSION['user_auth']['uid'] && $_SESSION['user_auth']['role'] == 'user'){
              $this->success('登录成功!', U('Index/index'));
            }else{
              $this->error('存储错误.');
            }
          }
        }else{
          $this->error('密码填写不正确,请重新填写'); 
          exit();
        }
      }else{
        $this->error('用户不存在,请注册',U('signup'));
      }
    }
  }
 
  public function autoLogin($user){  
    /* 记录登录SESSION */
    $auth = array(
      'uid'       => $user['id'],
      'num'    => $user['num'], 
      'role'      => 'user' , //记录用户类型 
    );
    session('user_auth', $auth);
    session('user_auth_sign', data_auth_sign($auth)); 
  }
 
  /*
  * 用户注册 
  */
  public function signup(){
    if(is_user_login()){
      $this->redirect('Index/index');
    }
    if(IS_GET){
      //注册页面
      $this->display();
    }
    if(IS_POST){
      //判断用户 
      $data['num'] = I('num') ; 
      $User = M('user') ;
      $datanum = $User->where($data)->find();
      if ($datanum){
        $this->success('您已经注册过,请直接登录',U('signin'));
      }else{
        $data['password'] = md5(I('password')); 
        $data['name']  = I('name');
        $data['email']  = I('email');
        $data['addtime'] = time();
        $uid = $User->add($data);
        if($uid) 
          $this->success('注册成功',U('signin')) ; 
        else  
          $this->error('注册失败') ; 
      }
    }
  }
 
  public function logout(){
    if(is_user_login()){
      $User = M('user') ;
      session('user_auth', null);
      session('user_auth_sign', null);
      session('[destroy]');
      $this->success('登出成功!', U('signin'));
    } else {
      $this->redirect('signin');
    }
  }
 
  //忘记密码
  public function wjpas(){ 
    if(IS_GET){ 
      $this->display();
    } 
    if(IS_POST){
      $User = M('user') ;
      $num = I('num') ;
      $data['password'] = md5(I('password')) ; 
      $email = I('email') ;
      $datanum = $User->where(array('num'=>$num))->find();
      if ($datanum){
        if ($email === $datanum['email']) {
          $User->where(array('num'=>$num))->save($data); // 根据条件更新记录
          $this->success('密码修改成功',U('signin')) ; 
        }else{
          $this->error('邮箱填写不正确,请重新填写'); 
          exit();
        }
      }else{
        $this->error('用户不存在,请注册',U('signup'));
      }
    }
  }
}
?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
php与php MySQL 之间的关系
Jul 17 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
非常有用的9个PHP代码片段
Apr 06 #PHP
10个对初学者非常有用的PHP技巧
Apr 06 #PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 #PHP
PHP实现的DES加密解密实例代码
Apr 06 #PHP
php使用正则验证中文
Apr 06 #PHP
php HTML无刷新提交表单
Apr 05 #PHP
PHP如何使用Memcached
Apr 05 #PHP
You might like
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
jQuery使用手册之 事件处理
2007/03/24 Javascript
input的focus方法使用
2010/03/13 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
小程序实现投票进度条
2019/11/20 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
基于python爬虫数据处理(详解)
2017/06/10 Python
Python 处理数据的实例详解
2017/08/10 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
自荐书模板
2013/12/15 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
药店促销活动总结
2014/07/10 职场文书
欠款证明
2015/06/24 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技