(二)ThinkPHP实践之留言板后台-TTLSA

tonyty163 PHP ttlsa教程系列626,6254字数 6800阅读22分40秒阅读模式

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>
weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
tonyty163
  • 本文由 发表于 26/02/2014 19:00:18
  • 转载请务必保留本文链接:https://www.ttlsa.com/php/thinkphp-message-board-back-ttlsa/
  • thinkphp
  • 删除留言
  • 后台
  • 显示留言
  • 添加留言
  • 留言板
  • 管理
评论  6  访客  6
    • 匿名
      匿名 9

      是错的一堆错误,差评差评,真的是

      • 啊啊啊
        啊啊啊 9

        啊啊啊啊啊

        • 匿名
          匿名 9

          大家都不是假的吧111

          • 啦啦啦
            啦啦啦 9

            考虑考虑

            • 匿名
              匿名 9

              哈哈哈

              • phper
                phper 9

                MsgManage目录下建立index.html模板文件,路径为admin/Tpl/Login/index.html
                应该为admin/Tpl/MsgManage/index.html

              评论已关闭!