3
4 5 6开发环境使用phpstudy
编辑器用sublime
数据库navicat
需要下载composer
先配置好本地域名,然后需要我们将资源引入到项目里面
下载地址www.layui.com.
layui框架有很多我们后台开发需要的控件,帮助我们高效完成后台搭建。
先创建我们的入口文件admins.php,接着我们在application里面建立一个admins的目录。
接着我们需要创建登录需要用到的控制器。
Account.php
fetch();}// 管理员登录public function dologin(){$username = trim(input('post.username'));$pwd = trim(input('post.pwd'));$verifycode = trim(input('post.verifycode'));if($username == ''){exit(json_encode(array('code'=>1,'msg'=>'用户名不能为空')));}if($pwd == ''){exit(json_encode(array('code'=>1,'msg'=>'密码不能为空')));}if($verifycode == ''){exit(json_encode(array('code'=>1,'msg'=>'请输入验证码')));}// 验证验证码if(!captcha_check($verifycode)){exit(json_encode(array('code'=>1,'msg'=>'验证码错误')));}// 验证用户$this->db = new Sysdb;$admin = $this->db->table('admins')->where(array('username'=>$username))->item();if(!$admin){exit(json_encode(array('code'=>1,'msg'=>'用户不存在')));}if(md5($admin['username'].$pwd) != $admin['password']){exit(json_encode(array('code'=>1,'msg'=>'密码错误')));}if($admin['status'] == 1){exit(json_encode(array('code'=>1,'msg'=>'用户已被禁用')));}// 设置用户sessionsession('admin',$admin);exit(json_encode(array('code'=>0,'msg'=>'登录成功')));}public function logout(){session('admin',null);exit(json_encode(array('code'=>0,'msg'=>'退出成功')));}
}
下面我们写登录页面
先建一个view文件夹,里面建一个account。放login.html
登录 后台管理系统
按照自己的喜好设计,框架网里面有样式。
接着需要我们创建管理员数据库
接着封装数据库访问类
建好如图所示的文件夹,编辑Sysdb.php
where = array();$this->field = '*';$this->order = '';$this->table = $table;return $this;}// 指定查询字段public function field($field = '*'){$this->field = $field;return $this;}// 排序public function order($order){$this->order = $order;return $this;}// 指定查询条件public function where($where = array()){$this->where = $where;return $this;}// 返回一条记录public function item(){$item = Db::name($this->table)->field($this->field)->where($this->where)->find();return $item ? $item : false;}// 返回listpublic function lists(){$query = Db::name($this->table)->field($this->field)->where($this->where);$this->order && $query = $query->order($this->order);$lists = $query->select();return $lists ? $lists : false;}// 自定义索引列表public function cates($index){$query = Db::name($this->table)->field($this->field)->where($this->where);$this->order && $query = $query->order($this->order);$lists = $query->select();if(!$lists){return false;}$results = [];foreach ($lists as $key => $value) {$results[$value[$index]] = $value;}return $results;}// 分页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){$res = Db::name($this->table)->insert($data);return $res;}// 修改public function update($data){$res = Db::name($this->table)->where($this->where)->update($data);return $res;}// 删除public function delete(){$res = Db::name($this->table)->where($this->where)->delete();return $res;}}
最后需要我们需要进行登录验证,这里我们需要使用composer。
在config.php里面添加配置
// +----------------------------------------------------------------------return [// +----------------------------------------------------------------------// | 应用设置// +----------------------------------------------------------------------// 应用调试模式'app_debug' => true,// 应用Trace'app_trace' => false,// 应用模式状态'app_status' => '',// 是否支持多模块'app_multi_module' => true,// 入口自动绑定模块'auto_bind_module' => false,// 注册的根命名空间'root_namespace' => [],// 扩展函数文件'extra_file_list' => [THINK_PATH . 'helper' . EXT],// 默认输出类型'default_return_type' => 'html',// 默认AJAX 数据返回格式,可选json xml ...'default_ajax_return' => 'json',// 默认JSONP格式返回的处理方法'default_jsonp_handler' => 'jsonpReturn',// 默认JSONP处理方法'var_jsonp_handler' => 'callback',// 默认时区'default_timezone' => 'PRC',// 是否开启多语言'lang_switch_on' => false,// 默认全局过滤方法 用逗号分隔多个'default_filter' => '',// 默认语言'default_lang' => 'zh-cn',// 应用类库后缀'class_suffix' => false,// 控制器类后缀'controller_suffix' => false,// +----------------------------------------------------------------------// | 模块设置// +----------------------------------------------------------------------// 默认模块名'default_module' => 'index',// 禁止访问模块'deny_module_list' => ['common'],// 默认控制器名'default_controller' => 'Index',// 默认操作名'default_action' => 'index',// 默认验证器'default_validate' => '',// 默认的空控制器名'empty_controller' => 'Error',// 操作方法后缀'action_suffix' => '',// 自动搜索控制器'controller_auto_search' => false,// +----------------------------------------------------------------------// | URL设置// +----------------------------------------------------------------------// PATHINFO变量名 用于兼容模式'var_pathinfo' => 's',// 兼容PATH_INFO获取'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],// pathinfo分隔符'pathinfo_depr' => '/',// URL伪静态后缀'url_html_suffix' => 'html',// URL普通方式参数 用于自动生成'url_common_param' => false,// URL参数方式 0 按名称成对解析 1 按顺序解析'url_param_type' => 0,// 是否开启路由'url_route_on' => true,// 路由使用完整匹配'route_complete_match' => false,// 路由配置文件(支持配置多个)'route_config_file' => ['route'],// 是否强制使用路由'url_route_must' => false,// 域名部署'url_domain_deploy' => false,// 域名根,如thinkphp.cn'url_domain_root' => '',// 是否自动转换URL中的控制器和操作名'url_convert' => true,// 默认的访问控制器层'url_controller_layer' => 'controller',// 表单请求类型伪装变量'var_method' => '_method',// 表单ajax伪装变量'var_ajax' => '_ajax',// 表单pjax伪装变量'var_pjax' => '_pjax',// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则'request_cache' => false,// 请求缓存有效期'request_cache_expire' => null,// 全局请求缓存排除规则'request_cache_except' => [],// +----------------------------------------------------------------------// | 模板设置// +----------------------------------------------------------------------'template' => [// 模板引擎类型 支持 php think 支持扩展'type' => 'Think',// 模板路径'view_path' => '',// 模板后缀'view_suffix' => 'html',// 模板文件名分隔符'view_depr' => DS,// 模板引擎普通标签开始标记'tpl_begin' => '{',// 模板引擎普通标签结束标记'tpl_end' => '}',// 标签库标签开始标记'taglib_begin' => '{',// 标签库标签结束标记'taglib_end' => '}',],// 视图输出字符串内容替换'view_replace_str' => [],// 默认跳转页面对应的模板文件'dispatch_success_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl','dispatch_error_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',// +----------------------------------------------------------------------// | 异常及错误设置// +----------------------------------------------------------------------// 异常页面的模板文件'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',// 错误显示信息,非调试模式有效'error_message' => '页面错误!请稍后再试~',// 显示错误信息'show_error_msg' => false,// 异常处理handle类 留空使用 hinkexceptionHandle'exception_handle' => '',// +----------------------------------------------------------------------// | 日志设置// +----------------------------------------------------------------------'log' => [// 日志记录方式,内置 file socket 支持扩展'type' => 'File',// 日志保存目录'path' => LOG_PATH,// 日志记录级别'level' => [],],// +----------------------------------------------------------------------// | Trace设置 开启 app_trace 后 有效// +----------------------------------------------------------------------'trace' => [// 内置Html Console 支持扩展'type' => 'Html',],// +----------------------------------------------------------------------// | 缓存设置// +----------------------------------------------------------------------'cache' => [// 驱动方式'type' => 'File',// 缓存保存目录'path' => CACHE_PATH,// 缓存前缀'prefix' => '',// 缓存有效期 0表示永久缓存'expire' => 0,],// +----------------------------------------------------------------------// | 会话设置// +----------------------------------------------------------------------'session' => ['id' => '',// SESSION_ID的提交变量,解决flash上传跨域'var_session_id' => '',// SESSION 前缀'prefix' => 'think',// 驱动方式 支持redis memcache memcached'type' => '',// 是否自动开启 SESSION'auto_start' => true,],// +----------------------------------------------------------------------// | Cookie设置// +----------------------------------------------------------------------'cookie' => [// cookie 名称前缀'prefix' => '',// cookie 保存时间'expire' => 0,// cookie 保存路径'path' => '/',// cookie 有效域名'domain' => '',// cookie 启用安全传输'secure' => false,// httponly设置'httponly' => '',// 是否使用 setcookie'setcookie' => true,],//分页配置'paginate' => ['type' => 'bootstrap','var_page' => 'page','list_rows' => 15,],// 验证码配置'captcha' => [// 验证码的字符集'codeSet' => '23456789abcdefhijkmnpqrstuvwxyzABCDEFHJKMNPQRSTUVWXYZ',// 设置验证码字体大小'fontSize' => 18,// 添加混淆曲线'useCurve' => false,// 设置图片的高度、宽度'imageW' => 150,'imageH' => 35,// 验证码位数'length' =>4,// 验证成功后重置'reset' =>true],
];
接着为了防止非法用户访问
controller里面新建home.php ,BaseAdmin.php
home.php
db->table('admin_groups')->where(array('gid'=>$this->_admin['gid']))->item();if($role){$role['rights'] = (isset($role['rights']) && $role['rights']) ? json_decode($role['rights'],true) : [];}if($role['rights']){$where = 'mid in('.implode(',',$role['rights']).') and ishidden=0 and status=0';$menus = $this->db->table('admin_menus')->where($where)->cates('mid');$menus && $menus = $this->gettreeitems($menus);}$site = $this->db->table('sites')->where(array('names'=>'site'))->item();$site && $site['values'] = json_decode($site['values']);$this->assign('site',$site);$this->assign('role',$role);$this->assign('menus',$menus);return $this->fetch();}private function gettreeitems($items){$tree = array();foreach ($items as $item) {if(isset($items[$item['pid']])){$items[$item['pid']]['children'][] = &$items[$item['mid']];}else{$tree[] = &$items[$item['mid']];}}return $tree;}// 欢迎页面public function welcome(){return $this->fetch();}
}
BaseAdmin.php
_admin = session('admin');// 未登录的用户不允许访问if(!$this->_admin){header('Location: /admins.php/admins/Account/login');exit;}$this->assign('admin',$this->_admin);// 判断用户是否有权限$this->db = new Sysdb;}
}
登录部分完结
下面是对后台界面进行编写
写两个
index.html
{$site.values}-后台管理系统{$admin.username}【{$role.title}】退出
welcome.html
欢迎使用后台管理系统
第一阶段完成
Thinkphp框架一小时搭建后端(2)https://blog.csdn.net/kris_yifan/article/details/122727458
php 如果在类中定义变量,在类的方法中调用时应该加上$this-> . class ClassName {private $a = 333;function __construct(){$this->a = 2222;}public function bbb($value=''){echo $this->a;} } $b...
今天我们来看UrlRule.php
【数据对象映射模式】 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数据库,跟数据库中表的一条记录对应起来。 【代码实现】 在代码中实现数据对象映射模式,我们将实现一个 ORM(对象关系映射 Objec...
flash类型的广告的包装代码
下面的代码给出一个简单的js检测鼠标点击事件来动态放大图片的功能,这个功能在亚马逊,京东等电商网站很实用。
<...
之前我们已经写好管理员页面,现在对功能继续实现
基础功能1:对管理进行增删改查
增加
需要在view中新建一个add.html
add.html
像素存储
OpenCV 中图像矩阵的大小取决于所用的颜色模型,更准确的说是取决于图像所用到的通道数。 如果使用的是灰度图,矩阵大概如图所示: 如果使用的是多通道的图像,矩阵中的列会包含多个子列,子列的个数和通道数相等。例如 RGB 颜色模型的矩阵大致如下图所示: 很多情况下,因为内存足够大,可以实现连续存储,因此图像中的各行能够...
在C++有两种字符串流,一种在sstream中定义, 另一种在strstream中定义。 它们实现的东西基本一样。
strstream里包含 class strstreambuf; class istrstream; class ostrstream; class strstream; 它们是基于C类型字符串char*编写的...
此文章完成度【100%】留着以后忘记的回顾。多写多练多思考,我会努力写出有意思的demo,如果知识点有错误、误导,欢迎大家在评论处写下你的感想或者纠错。 ORM介绍:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程...
Bootstrap框架和inconfont、font-awesome使用 iconfont的使用:https://www.cnblogs.com/clschao/articles/10387580.html Bootstrap介绍 Bootstrap是Twitter开源的基于HTML、CSS、JavaScript的前端框架。 ...
Log4j->SLF4j->Logback是同一个人开发的 import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.Spr...
HTML页面代码块: 1
2
3