PHP仿博客园 个人博客(2) 数据库增添改删

前端之家收集整理的这篇文章主要介绍了PHP仿博客园 个人博客(2) 数据库增添改删前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

废话不多说了,上一篇有个核心概念就是 give action do something ! 这篇我就用代码来解释这个概念是啥意思,先看我的 post.class.PHP . 这个文件是我们的数据层处理类。

简单介绍一下这个model 类,它继承了一个数据库基类来做crud 等常用操作,每次初始化时就会初始化一个数据库对象 $db. 我们就用这个对象来操作我们的数据。
对于数据操作有2个重要方法 storePostFormValues( ),storeDiaryFormValues( ),它们2个方法是数据流的开始。
还有2个方法很有意思,addChildNumber( ),reduceChildNumber( ),它们负责在插入或删除文档时的 一个暗箱操作。因为我的文档可以用多个分类,所以在操作文档的时候,要考虑到一个问题,就是 category 表中有个字段 记录了该分类下的 文档数量。所以要动态地改变这些数目的值。
下面配合 post.PHP 控制器,我们就可以开始我们数据的流程了(我的控制器还不是一个类,所以无法生成API文档。因为这还不是真正地MVC架构。)所以在MVC之前,这个也能更利于的理解MVC到底是神马东东,以及你自己如何去应用,写出自己的MVC。

以下的情形都是假设:

$action = "天上掉下个女朋友给我吧!"; 让我们传入这个控制器看会发生神马事情。

代码如下:
require_once( "config/config.PHP" );
session_start( );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";

if( !$username )
{
header("Location: index.PHP?action=login");
exit;
}

这里我们有个重要流程控制语句 switch,这个单词是 开关的意思; 所以当上面那个 $action = "天上掉下个女朋友给我吧!"; 传入 switch 时,只有2种可能,一种是开,一种是关。这里有点双关地意思,有些同学可能看出来了。嘿嘿!

言归正传:看看我们的 switch 是如何开关这些 $action,很明显 天上不会掉个女朋友给我,因为控制器里没有这个开关,所以只能还是说说代码的事。

代码如下:
switch( $action )
{
case "newPost" :
newPost( );
break; case "delete" :
delete( ) ;
break; case "updatePost":
updatePost( );
break; case "IsDraft":
listDraft( );
break; case "logout" :
logout( );
break; case "isPost":
listPost( );
break; case "diffentCategoryPost":
diffentCategoryPost( );
break; case "unCategory":
unCategory( );
break; default :
listPost( );
break;
}

每个switch都应该定义默认的 开关,这样当没有女朋友的时候,可以确保我们还有基友。
如何传入 action 呢?
来看这样一个url,也就是我们的后台框架的导航,post.PHP?action=isPost 这个是一个标准的action,我们每个url 其实都是由这些action组成的,也可以加入其他的一些参数到我们的url 中, 这样我们可以在控制器定义的方法中 GET (得到这些变量的值),然后我们可以多些控制。
好了,当这个url 到达我们的控制器后,我们接收判断,然后打开一个 isPost 的开关,这样我们就可以调用后面的方法了,想想 开关灯,开关电脑,开关就是我们经常做的事。
这里我们只是换了一个地方。
ok 。 来看看这个开关的下面的方法

代码如下:
function listPost( )
{
$results = array( );
$results['pageTitle'] = "Post List" ;
$results['path'] = "随笔";
// set the message
if ( isset( $_GET['error'] ) )
{
if ( $_GET['error'] == "InsertedFailed" ) $results['errorMessage'] = "文档添加失败";
if ( $_GET['error'] == "postDeleteFailed" ) $results['errorMessage'] = "文档删除失败";
}
if ( isset( $_GET['status'] ) )
{
if ( $_GET['status'] == "changesSaved" ) $results['statusMessage'] = "文档保存了!";
if ( $_GET['status'] == "Deleted" ) $results['statusMessage'] = "文档删除了!";
if ( $_GET['status'] == "Inserted" ) $results['statusMessage'] = "你添加了新的文档!";
if ( $_GET['status'] == "SaveToDraft" ) $results['statusMessage'] = "文档保存到了草稿箱!";
} // 文档的分类浏览
$db = MysqL::getInstance( );
$pagination = new Pagination;
$cat = new Category;
$results['categories'] = $cat->getCategoryList("post"); $pagination->countsql = "select * from post where type = 'post' " ;
$db->Query( $pagination->countsql );
$pagination->totalRecords = $db->RowCount( );
$records = $db->HasRecords( $pagination->rebuiltsql( ) );
if( $records )
{
$results['posts'] = $db->QueryArray( $pagination->rebuiltsql( ) );
require_once(TEMPLATE_PATH . "/post/post_list.PHP");
}
else
{
require_once(TEMPLATE_PATH . "/post/post_list.PHP");
}}

我们定义了一个数组,$results = array( ); 这个数组的作用明显,它将保存我们从 model 中获取的任何数据,也可以保存从url上 GET 的特殊参数。然后将在我们下面require_once(*****) 包含的模版中显示出来, 路径定义在了 path 变量中。

同时我们会接收2个提示参数,

error,表示操作出现错误,任何人都在所难免,包括电脑,谁都会犯错,关键是去承认,电脑做的很好,他们勇于承认错误

status; 表示状态,就是成功的操作。

$pagination = new Pagination; 这个类是我们的分页类,我们传入一个 总的数量给它,然后它自己会算出总页数,每跳转一个页面,相当于刷新了一次,所以大家的做法就是,在构造器里 GET(获取)url上的page 的值,让我们知道是当前那一页了。同时我们重新生成查询的语句,后面加上一条限制的语句,类似 limit $start(起始的id),$offset(长度); 原理就是从这个id起,往后给我10 条记录;我的设定就是 10 条,你也可以更灵活。
$cat = new Category;这个类后面会详细说,也是非常重要的分类model。这里我们就是简单获取 这个类型下的所有分类显示侧边栏,我已经完成了。有图有真相!


这样 我们的 $results 数组中就储存了我们页面所需的所有数据。 好的,来看看我们的模版,是怎么输出的。

代码如下:


<BR> <a href="/tag/boke/" target="_blank" class="keywords">博客</a><a href="/tag/houtai/" target="_blank" class="keywords">后台</a>管理
<Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>



PHP
if( isset( $results['statusMessage'] )){echo $results['statusMessage'];}
if( isset( $results['errorMessage'] )){echo $results['errorMessage'];}
?>

文章(主要用于转载,发布原创博文要通过“随笔”)

PHP
if( isset( $results['posts'] )){
echo <<






foreach( $results['posts'] as $post ){
$time = date("Y-m-d H:i:s",$post['create_time']);
if( $post['status'] == "1" ){
$post['status'] = "发布";
} else {
$post['status'] = "未发布";
}
echo <<
标题
发布

状态
评论
页面

浏览
操作
操作
EOB;
}
echo " if( isset( $pagination) ){$pagination->createLinks( ) ;}
} else {
echo "当前无内容!";
}?>