企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 知识点: 1、准备工作 2、实现注册功能 3、实现登录功能 [TOC] ## 一、准备工作 ### (一)新建模板文件夹 位置:application\index\view\default\user\ 两个文件:login.html和register.html ### (二)前台添加user控制器 ~~~ <?php namespace app\index\controller; use think\Controller; use think\Db; class User extends Controller { public function login(){ return view('../application/index/view/default/user/login.html'); } public function register(){ return view('../application/index/view/default/user/register.html'); } } ~~~ ### (三)首页添加登录和注册链接 ~~~ <i class="fa fa-user"></i> <a href="{:url('user/login')}">请登录</a> <i class="fa fa-plus-square"></i> <a href="{:url('user/register')}">我要注册</a> ~~~ ### (四)完善登录和注册页面模板 ## 二、实现注册功能 ### (一)表单验证 #### 1、拷贝文件夹 位置:public\static\index\default\plugins\layui #### 2、引入两个文件 注册页面引入 ~~~ <script type="text/javascript" src="__INDEX__/default/plugins/layui/layui.js"></script> ~~~ #### 3、模板表单添加样式 表单添加样式class="layui-form" ~~~ <form class="layui-form" method="post" action=""> <input type="text" class="form-control uname layui-input" lay-verify="required" placeholder="用户名" /> <input type="password" class="form-control pword m-b" placeholder="密码" /> <input type="password" class="form-control pword m-b" placeholder="确认密码" /> <button class="btn btn-success btn-block layui-btn" lay-submit="">注册</button> </form> ~~~ #### 4、事件响应 ~~~ <script type="text/javascript" src="__INDEX__/default/plugins/layui/layui.js"></script> <script> layui.use(['form'], function(){ var form = layui.form(),layer = layui.layer; //自定义验证规则 form.verify({ title: function(value){ if(value.length < 5){ return '标题至少得5个字符啊'; } }, pass: [/(.+){6,12}$/, '密码必须6到12位'] }); //监听提交 form.on('submit', function(data){ layer.alert(JSON.stringify(data.field), { title: '最终的提交信息' }) return false; }); }); </script> ~~~ #### 5、改样式冲突 位置:public\static\admin\css\login.min.css 删除:;color:rgba(255,255,255,.95) ### (二)表单自定义验证 #### 1、改进表单 引入jQuery.js文件 ~~~ <script type='text/javascript' src='__INDEX__/default/js/jquery.min.js'></script> <form class="layui-form" method="post" action=""> <input type="text" name="username" class="form-control uname layui-input" lay-verify="username" placeholder="用户名" /> <input type="password" name="password" class="form-control pword m-be layui-input" lay-verify="password" placeholder="密码" /> <input type="password" name="repassword" class="form-control pword m-b layui-input" lay-verify="repassword" placeholder="确认密码" /> <button class="btn btn-success btn-block layui-btn" lay-submit="">注册</button> </form> ~~~ #### 2、响应事件 ~~~ <script> layui.use(['form'], function(){ var form = layui.form(),layer = layui.layer; //自定义验证规则 form.verify({ username: function(value){ if(value.length == 0){ return '用户名不能为空!'; } }, password: [ /(.+){6,}$/, '密码必须大于6位' ], repassword: function(value){ var password = $("input[name='password']").val(); if(value != password){ return '两次密码不一致!'; } }, }); //监听提交 form.on('submit', function(data){ layer.alert(JSON.stringify(data.field), { title: '最终的提交信息' }) return false; }); }); </script> ~~~ ### (三)后台处理 #### 1、获取数据和地址 ~~~ var url = $("form").attr('action'); var data = $('form').serializeArray(); //序列化表单元素 ~~~ #### 2、异步提交 ~~~ <script> layui.use(['form'], function(){ var form = layui.form(),layer = layui.layer; //自定义验证规则 form.verify({ username: function(value){ if(value.length == 0){ return '用户名不能为空!'; } }, password: [ /(.+){6,}$/, '密码必须大于6位' ], repassword: function(value){ var password = $("input[name='password']").val(); if(value != password){ return '两次密码不一致!'; } }, }); //监听提交 form.on('submit', function(data){ //获取数据 var url = $("form").attr('action'); var data = $('form').serializeArray(); //序列化表单元素 $.ajax({ type: "POST", dataType:"json", url:url, data:data, success:function(obj){ }, error:function(data){ layer.alert('注册失败!'); } }); return false; }); }); </script> ~~~ #### 3、后台处理 首先,判断用户名是否存在,是则不能注册202,否则执行注册程序 其次,用户注册 第三,写入Session 第四,返回成功信息(跳转至后台) 第五,插入新数据后执行触发器 ~~~ public function register(){ if(request()->isPost()){ //判断用户名是否存在 $count = Db::name('user')->where('username',input('post.username'))->count(); if($count){ $data['status'] = 202; $data['msg'] = '用户名已存在!'; return json($data); }else{ //用户注册 $data = input('post.'); $data['password'] = md5($data['password']); $id = Db::name('user')->strict(false)->insert($data); //插入新数据后执行触发器 } }else{ return view('../application/index/view/default/user/register.html'); } } ~~~ #### 4、改user数据表结构 删除表字段:code、last_login_time、last_login_ip 修改字段register_time:类型是timestamp(时间戳)、默认是CURRENT_TIMESTAMP 清空原数据 #### 5、插入新数据后执行触发器 >个人理解 触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了。你放炮仗,点燃了,一会就炸了。 >user表触发器: 名:t_insert_group_access 出发:after 插入时 定义:写入一条新数据 (1标识用户ID,4标识会员ID) ~~~ INSERT INTO x_auth_group_access VALUES(1,4) INSERT INTO x_auth_group_access VALUES((SELECT MAX(id) FROM x_user),4) ~~~ >触发器写在PHP代码中 ~~~ $uid = Db::name('user')->max('id'); $group_access = ['uid'=>$uid,'group_id'=>4]; Db::name('auth_group_access')->strict(false)->insert($group_access); ~~~ 聚合查询 https://www.kancloud.cn/manual/thinkphp5/135183 mysql触发器(Trigger)简明总结和使用实例 https://www.jb51.net/article/49207.htm ## 三、实现登录功能 ### (一)表单 ~~~ <form class="m-t layui-form" action="{:url('login')}"> <div class="form-group"> <input type="text" name="username" class="form-control uname layui-input" lay-verify="username" placeholder="用户名" /> </div> <div class="form-group"> <input type="password" name="password" class="form-control pword m-be layui-input" lay-verify="password" placeholder="密码" /> </div> <button class="btn btn-primary block full-width layui-btn" lay-submit="">登录到雪狐CMS</button> </form> ~~~ ### (二)事件响应 ~~~ <script src="__ADMIN__/js/jquery.min.js?v=2.1.4"></script> <script src="__ADMIN__/js/bootstrap.min.js?v=3.3.6"></script> <script type="text/javascript" src="__INDEX__/default/plugins/layui/layui.js"></script> <script> layui.use(['form'], function(){ var form = layui.form(),layer = layui.layer; //自定义验证规则 form.verify({ username: function(value){ if(value.length == 0){ return '用户名不能为空!'; } }, password: [ /(.+){6,}$/, '密码必须大于6位' ] }); //监听提交 form.on('submit', function(data){ //获取数据 var url = $("form").attr('action'); var data = $('form').serializeArray(); //序列化表单元素 $.ajax({ type: "POST", dataType:"json", url:url, data:data, success:function(obj){ if(obj.status == 200){ location.href = obj.url; }else{ layer.alert(obj.msg); } }, error:function(data){ layer.alert('登录失败!'); } }); return false; }); }); </script> ~~~ ### (三)后台处理 ~~~ public function login(){ if(request()->isPost()){ $data = input('post.'); //判断用户名是否存在 $map['username'] = $data['username']; $user = Db::name('user')->where($map)->find(); if($user){ if($user['password'] == md5($data['password'])){ //写入Session session('uid',$user['id']); //返回成功信息 $data['status'] = 200; $data['url'] = url('/admin'); return json($data); }else{ //返回错误信息 $data['status'] = 202; $data['msg'] = '登录密码错误!'; return json($data); } }else{ //返回错误信息 $data['status'] = 202; $data['msg'] = '用户名不存在!'; return json($data); } }else{ return view('../application/index/view/default/user/login.html'); } } ~~~