thinkPHP5——後端之登入註冊修改使用者資訊
阿新 • • 發佈:2018-12-31
所需檔案如下:
開始專案前,先開啟應用除錯模式(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不是整型';
}
}
}