记得收藏【国际动画教程网】,赶快注册吧!
注册

合作站点账号登陆

QQ登录

只需一步,快速开始

扫一扫,访问微社区

快捷导航

PHP仿博客园个人博客数据库与界面设计[含2P]

[复制链接]
发表于 2015-8-4 11:17:21 | 显示全部楼层 |阅读模式
推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的  PHP工作,不求工资多高,但求一收留之地。我能看懂大部分英语文档,人不蠢,爱学习,有兴趣地可以联系下!有诚意的来吧!qq:240382473
我会分3-5次发布所有关键代码和文档说明,博客后台所有的样式均套用博客园!

说明:

1. 不完全采用MVC架构,但是理念就是这样的。因为还不能写出很稳定的MVC架构。
2.几乎不采用JQUERY AJAX 因为不是特别熟悉,运用起来还不自如,留言本可以用AJAX,没问题。
3.有几个公用类,其他代码均手写,有不足地地方请多多指出,非常感谢。
4.欢迎批评与指导,但是请给出你的理由。

言归正传:先看数据库架构

PHP仿博客园个人博客数据库与界面设计 界面设计,already,cookie,数据库,留言本 【php】 112011qgmb8n4bghg64ghh 1
这 些表的引擎都是MYISAM, 利于存取。(黄色钥匙表示的是 primary key; 蓝色菱形的表示非空字段; 白色菱形表示的 null 字段)  图中的链接仅表示他们之间有一种潜在关系,无法在操作时关联.因为搜索引擎是 MyISAM。 所以需要联合查询, 以及多表操作。

我会挑最重要的 post , category 2个表中的特别字段来详细说明,其他说重要的。
post:
post_id
category_id varchar(10) 这个是用来索引博文的分类, 这里的category_id 也是字符串类型,所以可以为每一个博文设置多个分类。

type varchar(20) 这个字段是用来区分 随笔(post),文章(article),和日记(diary)的; 同时也是能够 设置为 postDraft, articleDraft ;

visiable 博文是否可见

其他常用字段如 标题,内容,创建时间,最后改动时间,浏览次数,评论次数,标签,允许评论,以及些保留字段。

category:
parent, count_child_number, count_parent_number 用于以后扩展
type 可以分别设置相册、博文、日记的分类
其他常用字段如 名称,描述,创建时间,可见性
comment:
address 用户IP
user_agent 用户浏览器类型

其它字段略...
服务器架构
PHP5.4.2 + MYSQL 5.523 + APACHE 2.2.22 + Windows NT ARIST-PC 6.1 build 7600 (Windows 7 Home Basic Edition) i586 (本地)
博客架构

后台目录:
PHP仿博客园个人博客数据库与界面设计 界面设计,already,cookie,数据库,留言本 【php】 112011ncfl4ycdfmmm8mzm 2
后台目录说明:

assert 存放各种资源 js,css,image
class 存放我们的类 常用类如 数据库操作类,分页类,和我们的大部分model 。。。
extention 存放些扩展 如 mce 的富编辑器
config 存放我们的 配置信息
templates 存放所有的模版(没有采用 smarty)
upload 存放的是相片和其他文件
admin 根目录下会有一些类似的控制器 如 index.php, post.php, article.php, photo.php

我们先看看 admin/config/config.php
复制代码 代码如下:
<?php
ini_set( "display_errors", true );
date_default_timezone_set( "Asia/Shanghai" );
// root and direcotry separate
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

// database information
// need hash
define( "DB_USERNAME", "****" );
define( "DB_PASSWORD", '*****' );
define( "DB_NAME", "blog" );

// important directory
define( "CLASS_PATH", "classes" );
define( "TEMPLATE_PATH", "templates" );

// user imformation
define( "ADMIN_USERNAME", "admin" );
define( "ADMIN_PASSWORD", '$2a$08$wim8kpwHhAKa6MBSsGUMGOYfjkU1xvRKd4Fxwal.wj8dqFboCVSFawim8kpwHhAKa6MBSsGUMGO');
// hash and verified the password
function hasher($info, $encdata = false){
$strength = "08";
//if encrypted data is passed, check it against input ($info)
if ($encdata) {
if (substr($encdata, 0, 60) == crypt($info, "$2a$".$strength."$".substr($encdata, 60))) {
return true;
}else {
return false;
}
} else {
//make a salt and hash it with input, and add salt to end
$salt = "";
for ($i = 0; $i < 22; $i++) {
$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);
}
//return 82 char string (60 char hash & 22 char salt)
return crypt($info, "$2a$".$strength."$".$salt).$salt;
}
}

function __autoload($className) {
if (file_exists(ROOT . DS . 'classes' . DS . strtolower($className) . '.class.php')) {
require_once(ROOT . DS . 'classes' . DS . strtolower($className) . '.class.php');
} else {
/* Error Generation Code Here */
}
}

这里我们定义了一些基本常量,和几个函数。

__autoload() 函数加载 admin/class/ 中的所有类
用 hasher() 函数加密了一个 88位的 不可逆密码, 登录过程就是用config.php 中的常量和 hasher( ) 函数来进行验证。

来看我们的 admin/index.php 后台控制器 这个控制器主页 显示一些博客的相关数据
复制代码 代码如下:
<?php
require_once( "config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";

if ( $action != "login" && $action != "logout" && !$username ) {
login();
exit;
}

switch( $action ){
case "login" :
login( ) ;
break;

case "logout";
logout( );
break;

default :
admin( );
break;
}

function login( ){
$results['pageTitle'] = "Login Form";
// handle login
if( isset( $_POST['login'] ) ){
// we simple verify it from constant variable
// if we need to verify the user from database , do this later
// $user = new User ;
// $user->isValidateUser( $name, $password );

if ( $_POST['username'] == ADMIN_USERNAME && $_POST['password'] == hasher($_POST['password'], ADMIN_PASSWORD ) ){
// register a session data
$_SESSION['username'] = ADMIN_USERNAME ;
// location to admin page
header( "Location: index.php");
} else {
// Login failed: display an error message to the user
$results['errorMessage'] = "Incorrect username or password. Please try again.";
require( TEMPLATE_PATH . "/loginForm.php" );
}
} else {
require( TEMPLATE_PATH . "/loginForm.php" );
}
}

function admin( ){
$results['pageTitle'] = "Administrator Page";
require( TEMPLATE_PATH . "/admin.php" );
}

function logout( ){
$results['pageTitle'] = "Login Page";
unset( $_SESSION['username'] );
header( "Location: index.php ");
}分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec



上一篇:php打开文件fopen函数的使用说明
下一篇:PHP session
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
 楼主| 发表于 2015-8-4 11:23:05 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(2)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session


这个设计模式是从一个老外那里学的!

原理就是:
首先我们加载我们的config.php, 初始化session变量,获得 $action 这个重要变量的值;
然后我们判断 $action 和 $username 的值, 如果用户没有登录以及用户名为空,返回登录页面;
如 果用户正确输入了用户名和密码,则注册一个session 变量 $username,然后跳转到主页面 index.php, 这时我们会调用默认的  $action admin( ), 这个函数会加载一个模版admin.php;里面有个数组变量  $results['pageTitle'],以及我们的后台博客样式框架。
如果用户输入错了,则给出提示信息。

这个设计理念的核心就是, give {action} then {do something}
我们会在后面的代码中反复看到。

这个就是博客后台的框架样式,从博客园copy 来的,采用表格布局的,兼容的,可自定义其他样式的,简单的,实用的,可扩展的,完美后台框架。
PHP仿博客园个人博客数据库与界面设计  【php】 112012kxywwfddxy0wiwxx 3
这个样式在其他的浏览器中表现同样兼容,写这篇博文的时候,我已完成了部分功能。 下一篇:实现随笔,文章,日记 以及他们分类的CRUD。废话不多说了,上一篇有个核心概念就是 give action do something !

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

PHP仿博客园个人博客数据库与界面设计  【php】 112012cy8z5yya50gy5p1u 4
简单介绍一下这个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;
}分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:28:53 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(3)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
每个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; 表示状态,就是成功的操作。
分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:29:18 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(4)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
$pagination = new Pagination; 这个类是我们的分页类,我们传入一个  总的数量给它,然后它自己会算出总页数,每跳转一个页面,相当于刷新了一次,所以大家的做法就是,在构造器里 GET(获取)url上的page  的值,让我们知道是当前那一页了。同时我们重新生成了查询的语句,后面加上一条限制的语句,类似 limit $start(起始的id),  $offset(长度); 原理就是从这个id起,往后给我10 条记录;我的设定就是 10 条,你也可以更灵活。
$cat = new Category;这个类后面会详细说,也是非常重要的分类model。这里我们就是简单获取 这个类型下的所有分类,显示在侧边栏,我已经完成了。有图有真相!

PHP仿博客园个人博客数据库与界面设计  【php】 112013o2z7clp1s1c7aats 5
这样 我们的 $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& gt;                           
                         </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久!
分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:30:44 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(5)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
所以:当你的语法都没错的时候,可能是你的逻辑错了!或是方法错了!这就是我的注释! 请看:
复制代码 代码如下:
$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() 方法。
分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:35:36 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(6)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
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");
    }
}分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:43:09 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(7)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
我们使用一个模版来同时进行文档的插入和更新。关键就是 isset( ),当我们调用控制器的 newPost 方法时,我们并没有往模版中传入文档。
所 以在模版中,我们用 isset()  来做判断时,我们获得了空值,是个好东西;这样我们不会输出任何内容到模版中去。这样,我们等待用户提交表单,在这里,我为了省事,暂时没有对表单进行过 滤,不过我留了个后门以后来更新。 好的,假设我们的表单被提交了,(也被你基本的过滤了)。
分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:43:53 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(8)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
我们调用 post model中 的 storePostFormValues( ) , storeDiaryFormValues( ); 记得嘛,这个方法把所有的表单内容放入一个数组,在做了基本的类型检查之后,
到这里已经成功一半了。下面就是 insert***()。 这就是mysql 万能数据库操作类的好处,它能帮你处理各种表单,各种类型。当然你如果要求更细,更多,你可以继承它,扩展
它的方法,或新建方法。 到这里离完成还有一步,addChildNumber( )。 当你为你的文档选择分类时,同时也要在相应的分类表中的 count_child_number中加 1 。
如果用户选择将文档放入草稿箱的话,只需插入一个 type = PostDraft 的文档记录。

UPDATE 更新
先看这个指令 post.php?action=updatePost&postID=132
更新首先就要获得这个文档的数据,postID, 同样是 GET方法得到。 这样我们就可以初始化表单中的 value 值了。 isset( ) 在这里起了关键作用,不是嘛?
分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

 楼主| 发表于 2015-8-4 11:45:35 | 显示全部楼层

PHP仿博客园个人博客数据库与界面设计(9)

推荐:PHP session_start()问题解疑(详细介绍)</br>本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
后面的部分大同小异, 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 快乐,嘿嘿。
   <p>分享:浅析PHP的ASCII码转换类</br>本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
回复

使用道具 举报

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