源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 151|回复: 18

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2013-7-5 13:04:03 | 显示全部楼层 |阅读模式
先谢谢大家的鼓励与支持,这是第2篇了。也是这个博客系统最核心的东西。这个博客写完后,我会把它放在我的博客网站。这里也有我的一个简历 废话不多说了,上一篇有个核心概念就是 give action do something !

这篇我就用代码来解释这个概念是啥意思,先看我的 post.class.php . 这个文件是我们的数据层处理类。

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

复制代码 代码如下:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
     <head>
         <title>
             博客后台管理</title>
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
             <link rel="stylesheet" type="text/css" href="assert/css/blog.css" />          
     </head>   
     <body id="Posts">
             <table id="BodyTable" border="0" cellpadding="0" cellspacing="0" width="100%">
                 <tr>
                     <td id="Header" colspan="2"><div id="SiteNav"></div>           
                         <div id="BlogTitle">
                             Arist's Blog
                         </div>
                         <div id="Site Title">
                             <b><blockquote>Hinging there, everything will be fine.</blockquote></b>
                         </div>
                     </td>
                 </tr>
                 <tr>
                     <td>
                         <div id="LeftNavHeader">操作</div>
                     </td>
                     <td class="NavHeaderRow">
                         <ul id="TopNav">
                             <li><a href="post.php?action=IsPost">随笔</a></li>
                             <li><a href="article.php?action=IsArticle">文章</a></li>
                             <li><a href="diary.php?action=IsDiary">日记</a></li>
                             <li><a href="comment.php?action=IsComment">评论</a></li>
                             <li><a href="photo.php?action=IsPhoto">相片</a></li>                           
                         </ul>
                         <div id="SubNav">
                             当前位置: <?php if( isset( $results['path'] )) echo $results['path']; ?>
                         </div>
                     </td>
                 </tr>
                 <tr>
                     <td class="NavLeftCell">                       
                         <div class="left_nav">
                             <ul id="LinksActions">
                                 <li><a href="article.php?action=newArticle">» 添加新文章</a></li>
                             </ul>
                         </div>
                         <div id="CategoriesHeader" class="LeftNavHeader">
                             分类
                         </div>
                         <div class="left_nav">
                             <ul id="LinksCategories">
                             <li><a href="category.php?action=ListCat&type=article">[编辑分类]</a></li>
                             <li><a href="article.php?action=IsArticle">[所有分类]</a></li>
                             <li><a href="article.php?action=unCategory">[未分类]</a></li>
 <?php
 if( isset( $results['categories'] )  && ! empty( $results['categories'] ) ){
     foreach( $results['categories'] as $category ){
     echo <<<EOB
                     <li><a href="article.php?action=diffentCategoryArticle&catID={$category['category_id']}">{$category['name']}({$category['count_child_number']})</a></li>
 EOB;
     }
 }
 ?>
                             </ul>
                         </div>
                     </td>
                     <td id="Body">
                         <div id="Main">
                 <div id="Editor_Messages">
                 <!-- 显示提示信息 -->
                 <?php
                     if( isset( $results['statusMessage'] )){echo  $results['statusMessage'];}
                     if( isset( $results['errorMessage'] )){echo  $results['errorMessage'];}
                 ?>
                 </div>
 <div id="Editor_Results">
     <div id="Editor_Results_Header" class="CollapsibleHeader">
         <span id="Editor_Results_headerTitle">文章(主要用于转载,发布原创博文要通过“随笔”)</span>
     </div>
     <div id="Editor_Results_Contents">    
 <?php 
     if( isset( $results['posts'] )){
     echo <<<EOB
             <table id="Listing" class="Listing" cellspacing="0" cellpadding="0" border="0" style='width:98%;'>
                 <tr style="text-align: center">
                     <th valign="bottom">
                         标题
                     </th>
                     <th width="40" style="text-align: center">
                         发布<br />
                         状态
                     </th>
                     <th valign="bottom" width="50" style="text-align: center">
                         评论
                     </th>
                     <th width="50" style="text-align: center">
                         页面<br />
                         浏览
                     </th>             
                     <th valign="bottom" width="40" style="text-align: center">
                         操作
                     </th>
                     <th valign="bottom" width="40" style="text-align: center">
                         操作
                     </th>
                 </tr>

 EOB;
         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']  = "<b>未发布</b>";
             }
             echo <<<EOB
             <tr id="entry_{$post['post_id']}" class="Alt">
                 <td style="text-align: left">{$post['title']} ({$time})</td>
                 <td style="text-align: center">{$post['status']}</td>
                 <td style="text-align: center">{$post['view_count']}</td>
                 <td style="text-align: center">{$post['comment_count']}</td>
                 <td style="text-align: center"><a href="article.php?action=editArticle&postID={$post['post_id']}">编辑</a></td>
                 <td style="text-align: center"><a href="JavaScript:if(confirm('从数据库中删除这篇文档?')==true){window.location='article.php?action=delete&postID={$post['post_id']}';}">删除</a></td>   
             </tr>
 EOB;
         }
             echo "</table>";               
             if( isset( $pagination) ){$pagination->createLinks( ) ;}
     } else {
         echo "当前无内容!";
     }

 ?>  

     </div>
 </div>

 <span id="currentPostId" style="display:none;"></span>

                         </div>
                     </td>
                 </tr>
             </table>
             <div id="blog_top_nav_block">
                 <div id="site_nav">
                 </div>
                 <div id="login_area">         
                  <span id="span_userinfo"><b><?php  echo $_SESSION['username']; ?> </b>  <a href="?action=logout">logout</a></span>
                 </div>
                 <div class="clear"></div>
             </div>
             <table id="Footer" border="0" cellpadding="0" cellspacing="0" width="100%">
                 <tr>
                     <td colspan="2">
                         <div>
                             © <?php echo date("Y", time( ) ); ?> Arist
                         </div>
                     </td>
                 </tr>
             </table>
     </body>
 </html>

以上只是显示数据,人人都会啊。

 

我们怎么操作这些数据呢?

操作,就像是一种控制能力。 学生时代踢足球,我对球场有一种很强的控制能力,大学足球比赛拿了1次冠军,1次亚军,1次季军,大四没去,中学更是无数荣誉。

我的位置是中卫,在足球场上,这个位置,你得有统观全局的能力,也得有很强的个人能力,还有指挥能力;扯的远了,现在天天坐在电脑前,这些东西也早就没了,

就剩下些经验之谈。不过其中滋味,你也须也体验过。

我这个博客有个缺点,每次你对数据库进行一次读写操作,你得刷新啊!我知道这对服务器的负载很大,但是我觉得如果一个新技术你没有完全吃透,盲目运用,只会适得其反。

所以暂时我还是牺牲服务器的响应时间,内存消耗,来获得一种相对的稳定!

所以我对全局还不是很了解,还有很多未知地领域没有涉入,如深入ajax,深入php,c 。。。 不多说了。

好了,看看怎么对数据进行CRUD 吧!

DELETE 删除
先看这个指令 post.php?action=delete&postID=132

当我们确认要删除时,这里有个注意的地方,我们能先要对该文档所属的分类下的 count_child_number 这个字段进行 一个减 1 的操作。

为什么? 因为我也开始犯了个逻辑错误,删除后我才调用这个方法,还记得嘛!reduceChildNumber( ) 有趣地地方就是这里,让我受益匪浅!也让我调试了N久!

所以:当你的语法都没错的时候,可能是你的逻辑错了!或是方法错了!这就是我的注释! 请看:

复制代码 代码如下:
  $post = new Post;
    $filter['post_id'] = isset( $_GET['postID'] ) ? ( int )$_GET['postID'] : "";

    //  !important 在数据删除之前 先将该分类下的文章数量减 1
    // 否则你不知道删除那个分类下的文章数量
    // 我犯了个逻辑错误 先删除了 文档, 然后查该文档的分类ID;永远也查不到,因为已经不存在了。
    $post->reduceChildNumber( "category", ( int ) $_GET['postID'] );

    $result = $post->delete("post", $filter );

这里我们只要初始化我们文章头顶的那个 model 就可以轻松调用 delete() 方法。

CREATE 插入
先看这个指令 post.php?action=newPost
说实话,我很久没有插入了。呵呵! 看控制方法:

复制代码 代码如下:
function newPost( )
 {
    $results['action'] = "newPost" ;
    $results['pageTitle'] = " Add New post" ;
    $results['newPost'] = "true";
    $results['path'] = "<a href='?action=isPost' >随笔</a>» <span>添加随笔</span>" ;
    $post = new Post;
    $cat = new Category;
    $results['categories'] =  $cat->getCategoryList( "post");
    // 新建文档
    if( isset( $_POST['saveChanged'] ))
    {   
        $post-> storePostFormValues( $_POST );
        $result = $post->insertPost( );
        if( $result )
        {
            $post->addChildNumber( "category", $_POST['category'] );
            header("Location: post.php?action=isPost&status=Inserted");
        }
        else
        {
            header("Location: post.php?action=isPost&error=InsertedFailed");
        }
        // 保存到草稿箱
    } else if( isset( $_POST['saveDraft']) )
    {
        $post = new Post;
        $post-> storePostFormValues( $_POST );
        $post->saveDraft( );
        header("Location: post.php?action=isPost&status=postSaveToDraft");
        // cancel
    } else if( isset( $_POST['cancel'] ))
    {
        header("Location: post.php?action=isPost");
    }
    else
    {
        require_once(TEMPLATE_PATH . "/post/post_edit.php");
    }
 }

我们使用一个模版来同时进行文档的插入和更新。关键就是 isset( ),当我们调用控制器的 newPost 方法时,我们并没有往模版中传入文档。
所以在模版中,我们用 isset() 来做判断时,我们获得了空值,是个好东西;这样我们不会输出任何内容到模版中去。这样,我们等待用户提交表单,在这里,我为了省事,暂时没有对表单进行过滤,不过我留了个后门以后来更新。 好的,假设我们的表单被提交了,(也被你基本的过滤了)。

我们调用 post model中 的 storePostFormValues( ) , storeDiaryFormValues( ); 记得嘛,这个方法把所有的表单内容放入一个数组,在做了基本的类型检查之后,
到这里已经成功一半了。下面就是 insert***()。 这就是mysql 万能数据库操作类的好处,它能帮你处理各种表单,各种类型。当然你如果要求更细,更多,你可以继承它,扩展
它的方法,或新建方法。 到这里离完成还有一步,addChildNumber( )。 当你为你的文档选择分类时,同时也要在相应的分类表中的 count_child_number中加 1 。
如果用户选择将文档放入草稿箱的话,只需插入一个 type = PostDraft 的文档记录。

UPDATE 更新
先看这个指令 post.php?action=updatePost&postID=132
更新首先就要获得这个文档的数据,postID, 同样是 GET方法得到。 这样我们就可以初始化表单中的 value 值了。 isset( ) 在这里起了关键作用,不是嘛?

后面的部分大同小异, storePostFormValues( ) , storeDiaryFormValues( ); 然后你调用 post model update***( ) 。
看代码:

复制代码 代码如下:
function updatePost( )
 {
    $results['action'] = "updatePost";
    $results['pageTitle'] = "Edit post";
    $post = new Post;
    $cat = new Category;
    $results['categories'] =  $cat->getCategoryList("post");
    if( isset( $_POST['saveChanged'] ))
    {
        // do update
        $post->storePostFormValues( $_POST );
        $post->updatePost( );
        header("Location: post.php?action=isPost&status=changesSaved") ;                   
    } else if( isset( $_POST['cancel'] ) )
    {
        header("Location: post.php?action=isPost&status=Cancel");
    }else
    {
        // get the post    
        $postID = isset( $_GET['postID'] ) ?  $_GET['postID'] : " ";
        $results['post'] = $post->getPostByID( $postID );
        require_once(TEMPLATE_PATH . "/post/post_edit.php");
    }

 }

到这里就差不多了,我们实现了几乎所有的基本操作。

几点说明,这些action 有的是导航,有的是生成的,大部分是固定的。自己看着用吧。 下篇说说 分类的事!还有就是这篇博客写完后会放在一个网站上

你如果想要源码学习的话,我会提供下载。谢谢你花这么长时间听我唠叨, 看到这句的人,祝你们 昨天 6,1 快乐,嘿嘿。

回复

使用道具 举报

0

主题

2万

回帖

186

积分

注册会员

Rank: 2

积分
186
发表于 2022-10-15 01:57:01 | 显示全部楼层
哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-9-2 05:42:29 | 显示全部楼层
sdsadsadsadf
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

87

积分

注册会员

Rank: 2

积分
87
发表于 2023-10-3 02:24:18 | 显示全部楼层
8888888888888888
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

247

积分

中级会员

Rank: 3Rank: 3

积分
247
发表于 2023-10-27 11:24:31 | 显示全部楼层
看看看看看看看看看看看看看看看看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-11-3 18:30:22 | 显示全部楼层
还可以不错
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

68

积分

注册会员

Rank: 2

积分
68
发表于 2023-11-14 02:48:13 | 显示全部楼层
2222222222222222
回复 支持 反对

使用道具 举报

16

主题

2万

回帖

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2024-5-25 16:44:43 | 显示全部楼层
大家都不容易!
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

85

积分

注册会员

Rank: 2

积分
85
发表于 2024-6-21 20:45:34 | 显示全部楼层
哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

85

积分

注册会员

Rank: 2

积分
85
发表于 2024-8-25 20:29:14 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-25 07:38 , Processed in 0.101301 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表