(一)ThinkPHP实践之留言板前台-TTLSA

tonyty163 PHP ttlsa教程系列822,83517字数 5899阅读19分39秒阅读模式

这里是源码下载地址,随着项目深入,会不定时更改源码文件
https://github.com/tonyty163/message-board/archive/master.zip

在这里的大部分代码是通过thinkphp的官方视频教程来学习的。如果觉得文字太枯燥的话,也可以看视频学习。
视频链接:http://www.thinkphp.cn/document/313.html文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

以后我们知识点的讲解,会专注精力在项目讲解上,以结果为导向提供大家所需的知识讲解。文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

留言板是我们的第一个项目,那么我们就来认真分析下留言板的需求,以及由哪些功能模块来实现的。
1、前台功能
(1) 显示留言
需求:进入留言板,要先看到别人的留言
功能模块:展示系统内所有留言文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

(2) 签写留言
需求:写入自己的留言,可实名,可匿名
功能模块:插入留言,跳转回留言页面文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

2、后台功能
(1) 留言管理
需求:管理员需要对留言进行管理
功能模块:删除留言文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

在开始编写项目之前,需求分析是一个重点任务,好的需求分析,可以达到事半功倍的作用。文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

一、前台
1、需求分析
(1)显示内容:将数据库内所有留言信息显示,内容包括(留言ID,用户名,内容,留言时间)
(2)新增内容:用户名(可留空,默认为匿名用户),内容(必填内容)文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

2、建库
知识点:
1、数据库建库,建表,
2、数据类型了解
3、SQL语句了解
4、phpmyadmin工具熟悉文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

数据库需求
需要提交留言板内容
id(留言用户id) 类型为int,最大长度11位
username(用户名) 类型为char,最大长度16位,不能为空,默认值为“匿名用户”
content(内容) 类型为varchar,最大长度100位,不能为空
time(留言时间) 类型为timestamp,默认值为“当前时间”文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

由上所知,数据库结构为
库名message_broad
表名tb_broad
id int类型(11位长度),非负,非空,自增
username char类型(16位长度),非空
content varchar类型(100位长度),非空
time timestamp类型,非空,默认是当前时间戳文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

建库语句(如果不熟悉,可以采用一些工具来协助实现,如phpmyadmin),建好库board以后,直接复制以下SQL语句,即可完成建表操作文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

CREATE TABLE IF NOT EXISTS `think_board` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '留言id',
  `username` char(16) NOT NULL COMMENT '留言用户名',
  `content` varchar(100) NOT NULL COMMENT '留言内容',
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '留言时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='留言表' AUTO_INCREMENT=1 ;

3、修改相关配置
知识点:
1、thinkphp运行机制,目录结构
2、index.php入口文件,App配置,调试模式,引用框架
3、config.php配置文件,配置数据库相关连接参数文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

数据库配置好后,可在项目目录的入口文件定义项目名称,文件创建位置在网站根目录下(我的本地环境中为C:/wamp/www/)message(自建项目目录)/index.php
在开始配置之前,建议把下载好的thinkphp框架文件拷贝到message目录下,在这里我下载的是3.1.3版本,目录名注意大小写(ThinkPHP),这样在你调用的时候可避免因为环境不同而产生的错误
接下来就要在index.php入口文件中定义相关项目,具体内容如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

<?php 

	define('APP_NAME', 'board');		//项目名,可自定义
	define('APP_PATH', './board/');		//项目路径,访问入口文件,即可自动生成,无需手动创建,注意最后的'/',如果不加,会将项目文件散落在message根目录下
	define('APP_DEBUG', TRUE);		//调试模式,如果在开发阶段,建议在开发阶段开启
	require './ThinkPHP/ThinkPHP.php';		//重点*,加了这条,框架才能生效
	
?>

老规矩,配置完这条,看见笑脸,就说明你配置框架成功了。同时可在message目录下,生成了board目录。文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

接下来我们需要完成相关的数据库配置,即可在控制器中完成相关数据库操作
文件路径为message/board/Conf/config.php
添加内容如下:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

<?php
return array(

	//数据库相关配置
	'DB_TYPE' => 'mysql',		//数据库类型
	'DB_NAME' => 'board',		//数据库名
	'DB_USER' => 'root',		//连接数据库帐号
	'DB_PWD' => '',		//连接数据库密码
	'DB_PREFIX' => 'tb_'		//数据库表前缀,这样在后面实例化的时候就不需要再填写同样的表前缀了
);
?>

4、建立控制器 Controller
知识点:
1、控制器目录结构
2、控制器运行流程
3、控制器IndexAction定义
4、默认方法index()定义,数据库实例化M方法,查询数据,插入数据,赋值变量,调用模板,并将变量传入模板
5、自定义表单提交方法handle,提交表单验证,异常处理,提取表单数据方法I,将表单数据插入数据库,成功和失败方法反馈,跳转方法U文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

配置全部完成,接下来就是我们开始写控制器的时候了,入口文件进来,都会找默认控制器,路径为message/board/Lib/action/IndexAction.class.php
将原有内容删除,拷贝以下内容替代:文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

<?php
//留言板首页控制器
class IndexAction extends Action {
//IndexAction为控制器名,需要跟文件名字IndexAction.class.php相对应。
//必须要集成Action类才能使用一些默认的函数
    public function index(){
	//index方法,显示内容方法
	//如果直接访问单入口http://localhost/message等效于访问http://localhost/message/index.php[/Index][/index]
	//index.php为入口文件,Index为控制器IndexAction,index为方法名index()。
    	$board = M('board')->select();
		//M方法等效于new Model('board')
		//上面这条语句等效于select * from tb_board(tb_在config.php文件中定义'DB_PREFIX' => 'tb_')
		$this->assign('board',$board)->display();
		//assign方法的两个参数,第一个为传进模板的变量名,第二个为传进变量的值。
		//display()方法会找对应的模板,在本例中是message/Tpl/Index/index.html,Index目录和index.html需要自建
    }
	//本例中index()方法,提取了tb_board表的全部数据,传入board变量,供index.html模板调用
    
	public function handle(){
	//handle()方法,发布内容方法
	//访问url为http://localhost/message/index.php/Index/handle,由于是提交表单方法,一般不建议直接访问
		if (!IS_POST) _404('页面不存在!', U('Index'));
		//如果不是通过post方法提交的内容,就会提示“页面不存在”(debug模式下可见),或者通过U方法跳转到Index首页(非debug模式)
    	$data = array(
    		'username' => I('username'),
    		'content' => I('content'),
    	);
		//获取表单提交数据
    	
    	if (M('board')->data($data)->add()) {
			$this->success('发布成功', U('index'));
    	} else {
			$this->error('发布失败,请重试');
    	}
		//实例化tb_board表,将$data通过data方法生成数据对象并添加进数据库,如果发布成功通过success方法在页面上提示“发布成功”,并通过U方法跳转回首页,如果失败通过error方法在页面上提示“发布失败,请重试”
		//要插入数据,一般先要通过create方法生成数据,那么data方法则是直接生成要操作的数据对象,具体示例可参考http://www.thinkphp.cn/document/323.html
    }
}

由于没有用到过于复杂的逻辑操作,所以就不引入模型了,直接进入视图Viewer的讲解。文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

5、建立模板表单 Viewer
知识点:
1、模板路径
2、模板表单html文件基础,可参考相关html文档
3、模板中调用thinkphp函数U
4、foreach标签用法(非html标签),循环输出变量中的各字段
5、将输出字段作为输入,传递给函数处理文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/

控制器建立完毕,接下来就要基于控制器指定的路径建立Index目录index.html模板文件,路径为message/Tpl/Index/index.html,如有不理解,可以仔细查看控制器讲解文章源自运维生存时间-https://www.ttlsa.com/php/thinkphp-message-board-front-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</title>
</head>
<body>
<!-- 以上内容又模板编写,不熟悉html的直接复制就ok了,需要自己编写的内容在<body>标签之后 -->
<div id='message-form'>
	<h1>留言板</span></h1>
	<form action="{:U('handle')}" method="post" name='board'>
	<!-- 这里要注意{:U('handle')}是个框架内置的thinkphp变量调用方法{:U},U函数在之前已经介绍过了,最终这条url为http://localhost/message/index.php/Index/handle -->
	<!-- method必须为post方法,否则会触发控制器中的if (!IS_POST) -->
		<label for="username">用户名:</label>
		<input type="text" name='username' id='username'/>
		<!-- username输入框,name必须为username,否则无法正常写入,与控制器中I('username')相对应 -->

		<label for="content">内容:</label>
		<textarea name="content" id='content'></textarea>
		<!-- 同上 -->

		<input type="submit" value="提交" />
	</form>
</div>

<div>
	<foreach name='board' item='b'>
	<!-- 这里的board是控制器中的assign('board',$board)这段赋值的变量,b可以简单理解为board别名,供下面调用试用,可以为任意名字 -->
		<dl>
			<dt>
				<span class='num'>No.{$b.id}</span>
				<!-- 取出id -->
				<span class='username'>{$b.username}</span>
				<!-- 取出username -->
			</dt>
			<dd class='content'>
				<span class='content'>{$b.content}</span>
				<!-- 取出content -->
			</dd>
			<dd class='time'>
				<span class='time'>{$b.time|date='y-m-d H:i',###}</span>
				<!-- 取出时间,注意|之后的内容,调用了一个php函数date,参数值有两个,第一个是'='后面的'y-m-d H:i',第2个是'###',表示将原内容作为输入供函数处理,在本例中是将取出的时间戳传递给date函数格式化 -->
			</dd>
		</dl>
	</foreach>
	<!-- 循环输出段,将数据库中所有数据取出,并根据不同的字段填入对应的内容 -->
</div>
<!-- 到这里自己编写代码的部分已经结束,下面是body和html标签的关闭标签 -->
</body>
</html>
weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
tonyty163
  • 本文由 发表于 13/02/2014 17:54:53
  • 转载请务必保留本文链接:https://www.ttlsa.com/php/thinkphp-message-board-front-ttlsa/
  • Thinkphp,留言板,前台,显示,插入,建库,建表,添加留言,需求分析,发布留言,模板,foreach,格式化
评论  8  访客  7
    • 匿名
      匿名 9

      菊花

      • 一
        9

        撒啊啊

        • 一
          9

          • 等等
            等等 9

              • 匿名
                匿名 9

                @ 等等

              • phper
                phper 9

                ‘DB_PREFIX’ => ‘tb_’ 应该为’DB_PREFIX’ => ‘think_’

                • 防风网
                  防风网 9

                  不错的文章,内容才高八斗.

                • 来自外部的引用

                评论已关闭!