所需文件如下:
开始项目前,先打开应用调试模式(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不是整型';
}
}
}