1. 程式人生 > >thinkPHP5——後端之登入註冊修改使用者資訊

thinkPHP5——後端之登入註冊修改使用者資訊

所需檔案如下:

開始專案前,先開啟應用除錯模式(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不是整型';
        }
    }
}