thinkPHP5——后端之登录注册修改用户信息

所需文件如下:

thinkPHP5——后端之登录注册修改用户信息_第1张图片

开始项目前,先打开应用调试模式(config.php,把false改成true)

一、数据库

CREATE TABLE `wyt_member` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL DEFAULT '' COMMENT '账号',
  `password` varchar(32) NOT NULL DEFAULT '' COMMENT '密码',
  `encrypt` varchar(6) NOT NULL DEFAULT '' COMMENT '加密字符串',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态1正常,2禁用',
   PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';

二、文件代码

1.控制器文件Member.php

namespace app\index\controller;
use app\index\validate\Vregist;
use app\index\validate\Vlogin;
use app\index\model\User;
use app\index\validate\Vupdate;
use think\Db;
use think\Loader;

class Member{
    /**
     * 注册
     */
    public function register($json){
        //接收参数(接收json格式)
        $data = json_decode($json,true);//输出形式:'username' => int 1
        //参数验证(验证类)
        $Vregist = new Vregist();
        $result = $Vregist->check($data);
        if(!$result){
            return json(['code'=>400,'msg'=>$Vregist->getError()]);
        }
        //插入记录(model类) 密码算法: md5(md5(密码).用户名.随机6位字符)
        $User=new User();
        $id =$User->add($data);
        //返回结果(json格式)
        return $id;
    }

    /**
     * 登录
     */
    public function login($json){
        //接收参数
        $data = json_decode($json,true);
        //参数验证
        $Vlogin = Loader::validate('Vlogin');
        $result = $Vlogin->check($data);
        if(!$result){
            return json(['code'=>400,'msg'=>$Vlogin->getError()]);
        }
        //用户名查表是否存在
        //密码匹配
        $user = new User();
        $login = $user->dologin($data);
        //返回登录信息
        return $login;
    }

    /**
     * 修改用户信息
     */
    public function edit_info($json){
        //接收参数
        $data = json_decode($json,true);
        //参数验证
        $Vupdate = new Vupdate();
        $result = $Vupdate->check($data);
        if(!$result){
            return json(['code'=>400,'msg'=>$Vupdate->getError()]);
        }
        //用户名查表是否存在
        //更改用户信息
        $user = new User();
        $update = $user->update($data);
        //返回结果
        return $update;

    }
}

2.模型User.php

namespace app\index\model;
use think\Db;
class User
{
    /**
     * 注册
     * 加密算法
     */
    public function add($data){
        //插入记录(model类) 密码算法: md5(md5(密码).用户名.随机6位字符)
        $data['encrypt'] = self::generate_password();
        $data['password'] =  md5(md5($data['password']). $data['username'].$data['encrypt']);
        $id = Db::name('Member')->insertGetId($data);
        if($id>0){
            return json(['code'=>200,'msg'=>'注册成功']);
        }else{
            return json(['code'=>400,'msg'=>'注册失败']);
        }
    }
    /*随机6位字符*/
    function generate_password( $length=6) {
        // 密码字符集,可任意添加你需要的字符
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $password = "";
        for ( $i = 0; $i < $length; $i++ ) {
            // 取字符数组 $chars 的任意元素
            $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
        }
        return $password;
    }
    /**
     * 用户登录
     * @return mixed
     */
    public function dologin($data){
        //用户名查表是否存在
        $tn = Db::name('member')
                    ->where(['username'=>$data['username']])
                    ->find();
       // dump($tn);exit();
        if(empty($tn)){
            return json(['code'=>'400', 'msg'=>'用户名不存在']);
        }
        //密码匹配
        $data['password'] =  md5(md5($data['password']). $data['username'].$tn['encrypt']);
//        $tp = db('member')->where('password',$data['password'])->find();
        if($tn['password']!=$data['password']){
            return json(['code'=>'400', 'msg'=>'密码错误']);
        }
        //返回登录信息
        return json(['code'=>200,'msg'=>'登录成功','data'=>
          ['id'=>$tn['id'],'username'=>$tn['username'],'status'=>$tn['status']]]);

    }
    /**
     * 修改用户信息
     * @return mixed
     */
    public function update($data){
        //用户名查表是否存在
        $tn = Db::name('member')
                    ->where(['id'=>$data['id']])
                    ->find();
       // dump($tn);exit();
        if(empty($tn)){
            return json(['code'=>'400', 'msg'=>'用户名不存在']);
        }
        //修改内容
        $data['encrypt'] = self::generate_password();
        $data['password'] =  md5(md5($data['password']). $tn['username'].$data['encrypt']);
        $update = Db::name('Member')->update($data);

        //返回修改信息
        if($update>0){
            return json(['code'=>200,'msg'=>'修改成功']);
        }
        else{
            return json(['code'=>400,'msg'=>'修改失败']);
        }

    }
}

3.验证器,Validate-》Vupdate.php,与其他的Vlogin.php(验证用户名和密码)以及Vregist.php(验证用户名和密码)的代码差不多

namespace app\index\validate;
use think\Validate;
class Vupdate extends Validate{
    protected $rule=[
        'id'=>'require|IsInt',
        'password'=>'require|min:6',
    ];
    protected  $message=[
        'id.require'=>'id不能为空',
        'password.require'=>'密码不能为空',
        'password.min'=>'密码不得少于6位',
    ];
    protected function IsInt($value,$field){
        //参数依次为验证数据,验证规则,全部数据(数组),字段名
        //这里我们要判断的验证的数据要求必须为正整型
        if(is_numeric($value) && is_int($value+0) && ($value+0) > 0){
            return true;
        }else{
            //如果不符合我们的条件,返回错误信息,在控制器中可以用getError()方法输出
            return $field.'id不是整型';
        }
    }
}

 

你可能感兴趣的:(php)