摘要:总结:1登录页面:后台系统一般为系统管理员或者内部人员使用,故后台登录界面只需简洁效率,使用体验好即可。2.管理员的数据表设计:可以通过对用户赋予角色来进行用户权限的控制;数据表字段名要简洁,见名知意;数据存储尽可能无冗余;用户密码不得以明码的形式进行存储。3.数据库访问类的封装(重难点):在TP5.1中框架本身提供了大量的数据库的操作方法,但大多数情况下我们不需那么多方法,为避免方法的滥用以及自
总结:1登录页面:后台系统一般为系统管理员或者内部人员使用,故后台登录界面只需简洁效率,使用体验好即可。
2.管理员的数据表设计:可以通过对用户赋予角色来进行用户权限的控制;数据表字段名要简洁,见名知意;数据存储尽可能无冗余;用户密码不得以明码的形式进行存储。

3.数据库访问类的封装(重难点):在TP5.1中框架本身提供了大量的数据库的操作方法,但大多数情况下我们不需那么多方法,为避免方法的滥用以及自定义数据的返回格式,所以进行数据库方法类的封装。
class SysDb{
// 指定表名
public function table($table){
$this->where = [];
$this->field = '*';
$this->order = '';
$this->limit = 0;
$this->table = $table;
return $this;
}
// 指定查询字段
public function field($field = '*'){
$this->field = $field;
return $this;
}
// 加载数量
public function limit($limit){
$this->limit = $limit;
return $this;
}
// 排序
public function order($order){
$this->order = $order;
return $this;
}
// 指定查询条件
public function where($where = []){
$this->where = $where;
return $this;
}
// 返回一条记录
public function item(){
return Db::name($this->table)->field($this->field)->where($this->where)->find();
}
// 返回多条数据
public function lists(){
$query = Db::name($this->table)->field($this->field)->where($this->where);
$this->limit && $query = $query->limit($this->limit);//判断有没有limlit,若存在,query语句加上limit
$this->order && $query = $query->order($this->order);//判断有没有order,若存在,query语句加上order
return $query->select();
}
// 自定义索引
public function cates($index){
$query = Db::name($this->table)->field($this->field)->where($this->where);
$this->limit && $query = $query->limit($this->limit);//判断有没有limlit,若存在,query语句加上limit
$this->order && $query = $query->order($this->order);//判断有没有order,若存在,query语句加上order
$lists = $query->select();
if(!$lists){
return $lists;
}
$result = [];
foreach ($lists as $key => $value) {
$result[$value[$index]] = $value;
}
return $result;
}
public function count(){
return Db::name($this->table)->where($this->where)->count();
}
// 分页
public function pages($pageSize = 10){
$total = Db::name($this->table)->where($this->where)->count();
$query = Db::name($this->table)->field($this->field)->where($this->where);
$this->order && $query = $query->order($this->order);
$data = $query->paginate($pageSize,$total);
return array('total'=>$total,'lists'=>$data->items(),'pages'=>$data->render());
}
// 添加
public function insert($data){
return Db::name($this->table)->insertGetId($data);//返回受影响的行数
}
// 批量添加数据
public function insertAll($data){
return Db::name($this->table)->insertAll($data);
}
// 修改
public function update($data){
return Db::name($this->table)->where($this->where)->update($data);
}
// 删除
public function delete(){
return Db::name($this->table)->where($this->where)->delete();
}
}4.登录的系统功能的实现:在用户系统登录时,应该设置好对用户错误操作(或错误信息)的友好提示功能;在系统登录后,用户的信息一般会被保存在Session中。
<!DOCTYPE html>
<html>
<head>
<title>后台登录</title>
<link rel="stylesheet" type="text/css" href="/static/plugins/layui/css/layui.css">
<script type="text/javascript" src="/static/plugins/layui/layui.js"></script>
<style type="text/css">
body{background: #0094ff;}
</style>
</head>
<body>
<div style="position: absolute;left: 50%;top: 50%;width: 500px;margin-left: -250px;margin-top: -200px;">
<div style="background: #ffffff;padding: 20px;border-radius: 4px;box-shadow:5px 5px 20px #444444;">
<div class="layui-form">
<div class="layui-form-item" style="color: gray;">
<h2>后台管理系统</h2>
</div>
<hr>
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="username">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密 码</label>
<div class="layui-input-block">
<input type="password" class="layui-input" id="password">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">验证码</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="verifycode">
</div>
<img src="{:captcha_src()}" id="img" onclick="reloadImg()">
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" onclick="dologin()">登录</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<script type="text/javascript">
layui.use('layer',function(){
layer = layui.layer;
$ = layui.jquery;
// 获取焦点
$('#username').focus();
// 直接回车登录
$('input').keydown(function(e){
if(e.keyCode == 13){
dologin();
}
});
});
// 重新加载验证码
function reloadImg(){
$('#img').attr('src','{:captcha_src()}?rand='+Math.random());
}
function dologin(){
var username = $.trim($('#username').val());
var password = $('#password').val();
var verifycode = $('#verifycode').val();
if(username==''){
layer.alert('请输入用户名',{'icon':2});
return;
}
if(password == ''){
layer.alert('密码不能为空',{'icon':2});
return;
}
if(verifycode==''){
layer.alert('验证码不能为空',{'icon':2});
return;
}
$.post('{:url(\'DoLogin\')}',{'username':username,'password':password,'verifycode':verifycode},function(res){
if(res.code>0){
reloadImg();
layer.alert(res.msg,{'icon':2});
}else{
layer.msg(res.msg);
setTimeout(function(){window.location.href='/index.php/admin/home/index'},1000);
}
},'json');
}
</script>5.防止非法登录:利用保存在 Seesion中用户信息进行判断用户是否进行登录操作,对未登录的用户进行强制导航至登录页面。
<?php
namespace app\admin\controller;
use think\Controller;
use Util\SysDb;
class Base extends Controller{
public function __construct(){
parent::__construct();
$this->admin = session('admin');
if(!$this->admin){
header('Location:/index.php/admin/account/login');
exit;
}
}
}