1、后台需求
(1)管理员登录:帐号密码验证,验证码验证
(2)管理留言:单条删除,单条修改,批量删除
(3)管理员退出:退出后台
2、建库
知识点:
1、IP记录类型
2、用户锁定标识符类型
数据库需求
需要提交留言板内容
id(留言用户id) 类型为int,最大长度10位
username(管理员用户名) 类型为char,最大长度20位,不能为空,默认值为“匿名用户”
password(管理员密码) 类型为varchar,最大长度32位,不能为空
logintime(登录时间) 类型为timestamp,默认值为“当前时间”
loginip(登录IP) 类型为varchar,最大长度为30位
lock(用户锁定标识) 类型为tinyint,最大长度为1,默认为不锁定
转化为数据库类型为
表名tb_broad
id int类型(10位长度),非负,非空,自增
username char类型(20位长度),非空,默认为空
password varchar类型(32位长度),非空,默认为空
logintime timestamp类型,非空,默认是当前时间戳
loginip varchar类型,非空
lock tinyint类型,非负,非空,默认为0(即非锁定)
以下是建表的SQL
1
2
3
4
5
6
7
8
9
10
11
|
; html-script: false ]
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 ;
|
为了方便测试我们建立一条测试数据
1
|
; html-script: false ]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配置,调试模式,引用框架
数据库配置好后,可在项目目录新建后台入口文件并定义项目名称,文件创建位置在网站根目录下(我的本地环境中为C:/wamp/www/)message(自建项目目录)/admin.php
接下来就要在admin.php入口文件中定义相关项目,具体内容如下:
1
2
3
4
5
6
7
8
|
; html-script: false ]<?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目录。
接下来我们需要完成相关的数据库配置
文件路径为message/admin/Conf/config.php
添加内容如下:
1
2
3
4
5
6
7
8
9
10
11
|
; html-script: false ]<?php
return array(
//数据库相关配置
'DB_TYPE' => 'mysql', //数据库类型
'DB_NAME' => 'board', //数据库名
'DB_USER' => 'root', //连接数据库帐号
'DB_PWD' => '', //连接数据库密码
'DB_PREFIX' => 'tb_' //数据库表前缀,这样在后面实例化的时候就不需要再填写同样的表前缀了
);
?>
|
4、建立控制器 Controller
知识点:
1、用户登录状态检查
2、用户登录验证
3、留言板信息显示、删除
4、验证码调用及使用方法
(1)配置全部完成,接下来就是我们开始写控制器的时候了,入口文件进来,都会找默认控制器,路径为message/admin/Lib/action/IndexAction.class.php
将原有内容删除,拷贝以下内容替代:
1
2
3
4
5
6
7
8
|
; html-script: false ]<?php
//留言板后台控制器
class IndexAction extends CommonAction {
//注意这里的CommonAction,这是自定义的类,主要用于一些初始化操作,如用户登录状态检查等,具体内容将在下面进行讲解
public function index(){
$this->display();
}
}
|
(2)接下来就来讲解下CommonAction,文件位置与IndexAction.class.php同级,命名为CommonAction.class.php
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
; html-script: false ]<?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,作为登录验证控制器
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
; html-script: false ]<?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,(登出操作)
代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
; html-script: false ]<?php
class LogoutAction extends CommonAction {
public function index(){
session_unset();
session_destroy();
//session注销
$this->redirect('admin.php/Login/index');
//登出后,跳转回首页
}
}
|
(5)同级目录下,建立MsgManageAction.class.php(管理留言操作)
由于是搭建一个简易版的留言板后台,所以这里只有显示和删除操作
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
; html-script: false ]<?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标签),循环输出变量中的各字段
后台需要建立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
Index模板文件代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
; html-script: false ]<!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模板文件代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
; html-script: false ]<!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模板文件代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
; html-script: false ]<!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>
|

评论