1、后台需求
(1)管理员登录:帐号密码验证,验证码验证
(2)管理留言:单条删除,单条修改,批量删除
(3)管理员退出:退出后台
2、建库
知识点:
1、IP记录类型
2、用户锁定标识符类型文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
数据库需求
需要提交留言板内容
id(留言用户id) 类型为int,最大长度10位
username(管理员用户名) 类型为char,最大长度20位,不能为空,默认值为“匿名用户”
password(管理员密码) 类型为varchar,最大长度32位,不能为空
logintime(登录时间) 类型为timestamp,默认值为“当前时间”
loginip(登录IP) 类型为varchar,最大长度为30位
lock(用户锁定标识) 类型为tinyint,最大长度为1,默认为不锁定文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
转化为数据库类型为
表名tb_broad
id int类型(10位长度),非负,非空,自增
username char类型(20位长度),非空,默认为空
password varchar类型(32位长度),非空,默认为空
logintime timestamp类型,非空,默认是当前时间戳
loginip varchar类型,非空
lock tinyint类型,非负,非空,默认为0(即非锁定)文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
以下是建表的SQL文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
CREATE TABLE IF NOT EXISTS `tb_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` char(20) NOT NULL DEFAULT '', `password` char(32) NOT NULL DEFAULT '', `logintime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '留言时间', `loginip` varchar(30) NOT NULL, `lock` tinyint(1) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
为了方便测试我们建立一条测试数据文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
INSERT INTO `board`.`tb_user` (`id` ,`username` ,`password` ,`logintime` ,`loginip` ,`lock`) VALUES (NULL ,'admin', MD5( 'admin' ) ,CURRENT_TIMESTAMP , '127.0.0.1', '0');
3、修改相关配置
知识点:
1、thinkphp单入口文件操作
2、admin.php入口文件,App配置,调试模式,引用框架文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
数据库配置好后,可在项目目录新建后台入口文件并定义项目名称,文件创建位置在网站根目录下(我的本地环境中为C:/wamp/www/)message(自建项目目录)/admin.php
接下来就要在admin.php入口文件中定义相关项目,具体内容如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php define('APP_NAME', 'admin'); //项目名,可自定义 define('APP_PATH', './admin/'); //项目路径,访问入口文件,即可自动生成,无需手动创建,注意最后的'/',如果不加,会将项目文件散落在message根目录下 define('APP_DEBUG', TRUE); //调试模式,如果在开发阶段,建议在开发阶段开启 require './ThinkPHP/ThinkPHP.php'; //重点*,加了这条,框架才能生效 ?>
老规矩,配置完这条,访问http://localhost/message/admin.php看见笑脸,就说明你配置框架成功了。同时可在message目录下,生成了admin目录。文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
接下来我们需要完成相关的数据库配置
文件路径为message/admin/Conf/config.php
添加内容如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php return array( //数据库相关配置 'DB_TYPE' => 'mysql', //数据库类型 'DB_NAME' => 'board', //数据库名 'DB_USER' => 'root', //连接数据库帐号 'DB_PWD' => '', //连接数据库密码 'DB_PREFIX' => 'tb_' //数据库表前缀,这样在后面实例化的时候就不需要再填写同样的表前缀了 ); ?>
4、建立控制器 Controller
知识点:
1、用户登录状态检查
2、用户登录验证
3、留言板信息显示、删除
4、验证码调用及使用方法文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
(1)配置全部完成,接下来就是我们开始写控制器的时候了,入口文件进来,都会找默认控制器,路径为message/admin/Lib/action/IndexAction.class.php
将原有内容删除,拷贝以下内容替代:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php //留言板后台控制器 class IndexAction extends CommonAction { //注意这里的CommonAction,这是自定义的类,主要用于一些初始化操作,如用户登录状态检查等,具体内容将在下面进行讲解 public function index(){ $this->display(); } }
(2)接下来就来讲解下CommonAction,文件位置与IndexAction.class.php同级,命名为CommonAction.class.php
代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php //通用类,这里主要是为了做登录验证,之后如果需要登录验证的页面,只要继承这个类,即可判断用户是否登录,如果未登录,即跳回登录页面 Class CommonAction extends Action { Public function _initialize () { //_initialize是一个初始化方法,也就是程序自动执行的一个方法 if (!isset($_SESSION['uid']) || !isset($_SESSION['username'])) { //判断是否定义$_SESSION['uid']或者$_SESSION['username'] $this->redirect('admin.php/Login/index'); //如果未定义,就跳转回login页面admin.php/Login/index } } }
(3)同级目录下,建立LoginAction.class.php,作为登录验证控制器
代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php //登录验证控制器 Class LoginAction extends Action { public function index() { $this->display(); //调用Tpl/Login目录index.html,显示登录页面 } public function login() { if (!IS_POST) halt('页面不存在'); //判断表单提交 $username = I('username'); $password = I('password','','md5'); //获取用户名密码 $user = M('user')->where(array('username' => $username))->find(); //where是做条件筛选的函数,等于where username='$username' if(!$user || $user['password'] != $password){ $this->error('账号或密码错误'); } //判断帐号或者密码 if ($user['lock']) $this->error('用户被锁定'); $data = array( 'id' => $user['id'], 'logintime' => time(), 'loginip' => get_client_ip(), ); //获取用户登录时间,以及用户登录IP M('user')->save($data); //插入数据库中 session('uid', $user['id']); session('username', $user['username']); session('logintime', date('Y-m-d H:i:s', $data['logintime'])); session('loginip', $user['loginip']); //将相关信息插入session,这样下次登录的时候,就会直接登录了 $this->redirect('admin.php/Index/index'); //登录成功,跳转回首页 } }
(4)同级目录下,建立LogoutAction.class.php,(登出操作)
代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php class LogoutAction extends CommonAction { public function index(){ session_unset(); session_destroy(); //session注销 $this->redirect('admin.php/Login/index'); //登出后,跳转回首页 } }
(5)同级目录下,建立MsgManageAction.class.php(管理留言操作)
由于是搭建一个简易版的留言板后台,所以这里只有显示和删除操作
代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<?php class MsgManageAction extends CommonAction { public function index(){ $board = M('board')->order('time DESC')->select(); $this->board = $board; $this->display(); } Public function delete(){ $id = I('id','','intval'); //获取ID并强制转换成整形 if(M('board')->delete($id)){ $this->success('删除成功',U('index')); }else{ $this->error('删除失败'); } //删除对应ID的记录,如果删除成功跳回首页,删除失败,返回(‘删除失败’) } }
5、建立模板表单 Viewer
知识点:
1、模板中调用thinkphp函数U
2、foreach标签用法(非html标签),循环输出变量中的各字段文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
后台需要建立3个页面,分别是登录首页Login,管理首页MsgManage和控制首页Index(如果加入js技术,可将管理首页和控制首页合并为一个)
控制器建立完毕,接下来就要基于控制器指定的路径建立模板文件
Index目录下建立index.html模板文件,路径为admin/Tpl/Index/index.html
Login目录下建立index.html模板文件,路径为admin/Tpl/Login/index.html
MsgManage目录下建立index.html模板文件,路径为admin/Tpl/Login/index.html文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
Index模板文件代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Message Board BackGround</title> </head> <body> <h2>简易后台登录系统</h2> <a href="{:U('admin.php/Logout/index')}" target="_self">退出</a> <a href="{:U('admin.php/MsgManage/index')}" target="_self">显示留言</a> <!-- U函数主要用于跳转 --> </body> </html>
Login模板文件代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Message Board BackGround</title> </head> <body> <form action="{:U('admin.php/Login/login')}" method="post" name="back_login" > <h2>简易后台登录系统</h2> 用户名:<input type='username' name='username' id='username' /> <br /> 密码:<input type='password' name='password' id='password' /> <br /> <input type="submit" value="登录"/> </form> </body> </html>
MsgManage模板文件代码如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Message Board BackGround</title> </head> <body> <table class="table" border="1"> <tr> <th>ID</th> <th>发布者</th> <th>内容</th> <th>发布时间</th> <th>操作</th> </tr> <foreach name='board' item='b'> <tr> <td>{$b.id}</td> <td>{$b.username}</td> <td>{$b.content}</td> <td>{$b.time|date='y-m-d H:i',###}</td> <td><a href="{:U('admin.php/MsgManage/delete',array('id' => $b['id'])),''}">删除</a></td> </tr> </foreach> //foreach内,大部分跟留言板首页一样,只是在这里加入了一个删除操作,第2个参数就是从控制器中提出的对应id </table> </body> </html>
6F
是错的一堆错误,差评差评,真的是
5F
啊啊啊啊啊
4F
大家都不是假的吧111
3F
考虑考虑
2F
哈哈哈
1F
MsgManage目录下建立index.html模板文件,路径为admin/Tpl/Login/index.html
应该为admin/Tpl/MsgManage/index.html