巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+城市分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

PHP仿博客园 小我博客(2) 数据库增加改删

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-29 09:02:35 阅读数: 117

空话未几说了,上一篇有个焦点观点便是 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"] = "<a href="?action=isPost" >漫笔</a>";
    // 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 数组中就贮存了咱们页面所需的一切数据。 好的,来看看咱们的模版,是怎样输入的。

复制代码 代码以下:
 <!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 欢愉,嘿嘿。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

25
05月
【企业网站扶植】巅云的由来 - 企业巅云建站

一个风光娟秀的小镇,一所汗青悠长的黉舍,一群天真天真的孩童,一颗坚苦卓绝的老树。——若是追溯渊源,那末巅云便是由此而来! ... >>概况

22
01月
若何进步网站的暴光度?

企业网站扶植的时较难处置的困难是甚么呢?率直说,现在如果真的想要将一个网站做出来而后上线的环境下,是非常轻易的一件工作。可是在此中另有一个难... >>概况

05
04月
企业网站扶植须要掌握住的小细节

良多的企业办理者表现他们费钱找网站扶植公司给企业做了网站,但一段时辰上去发明他们的流量和效益并不到达他们的预期,这究竟是那里呈现了题目呢?... >>概况

08
04月
设想师单独观光?这些工具没准能救你一命! -

这篇文与设想有关,可是和设想师有关。地球上,最喜好迁移的生物有两种:一个是坦桑尼亚的植物,一个是中国大陆的人;坦桑尼亚的植物一年要迁移两次:... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站