本人本科学历,自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的 PHP工作,不求工资多高,但求一收留之地。我能看懂大部分英语文档,人不蠢,爱学习,有兴趣地可以联系下!有诚意的来吧!qq:240382473

我会分3-5次发布所有关键代码和文档说明,博客后台所有的样式均套用博客园!

说明:

1. 不完全采用MVC架构,但是理念就是这样的。因为还不能写出很稳定的MVC架构。

2.几乎不采用JQUERY AJAX 因为不是特别熟悉,运用起来还不自如,留言本可以用AJAX,没问题。

3.有几个公用类,其他代码均手写,有不足地地方请多多指出,非常感谢。

4.欢迎批评与指导,但是请给出你的理由。

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

这些表的引擎都是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 (本地)

博客架构

后台目录:

后台目录说明:

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

// 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 后台控制器 这个控制器主页 显示一些博客的相关数据

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 ");

}

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

原理就是:

首先我们加载我们的config.php, 初始化session变量,获得 $action 这个重要变量的值;

然后我们判断 $action 和 $username 的值, 如果用户没有登录以及用户名为空,返回登录页面;

如果用户正确输入了用户名和密码,则注册一个session 变量 $username,然后跳转到主页面 index.php, 这时我们会调用默认的 $action admin( ), 这个函数会加载一个模版admin.php;里面有个数组变量 $results['pageTitle'],以及我们的后台博客样式框架。

如果用户输入错了,则给出提示信息。

这个设计理念的核心就是, give {action} then {do something}

我们会在后面的代码中反复看到。

这个就是博客后台的框架样式,从博客园copy 来的,采用表格布局的,兼容的,可自定义其他样式的,简单的,实用的,可扩展的,完美后台框架。

这个样式在其他的浏览器中表现同样兼容,写这篇博文的时候,我已完成了部分功能。 下一篇:实现随笔,文章,日记 以及他们分类的CRUD。

ps:这些操作还没有使用ajax,因为我对ajax还不熟悉。

摘自 warcraft

http://www.bkjia.com/PHPjc/478183.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478183.htmlTechArticle本人本科学历,自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的...

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

博客园php教程,PHP仿博客园,个人博客(1)_PHP教程相关推荐

  1. php源码解密微盾,php源码加密 仿微盾PHP加密专家(PHPCodeLock)_PHP教程

    复制代码 代码如下: function T_rndstr($length=""){//返回随机字符串 $str="ABCDEFGHIJKLMNOPQRSTUVWXYZab ...

  2. php视频上传教程,PHP实现视频文件上传完整实例,_PHP教程

    PHP实现视频文件上传完整实例, 本文以一个完整实例的形式实现了视频文件上传的功能.虽然是比较基础的应用,仍有一定的参考价值.分享给大家供大家参考之用.具体方法如下: 首先,对PHP来说视频也属于文件 ...

  3. php教程目录,php基础入门篇-文件和目录操作_PHP教程

    一篇关于php 入门的朋友参考的关于文件和目录的各种操作函数与实例应用,有需要的朋友可以简单的参考一下. 本章可以算是上一章的延续,介绍了除文件实际内容之外的附加信息,包括文件的大小.目录.访问权限等 ...

  4. xp系统mysql安装教程视频教程_Windows XP操作系统下的MYSQL安装过程_PHP教程

    一.下载安装文件 到mysql.com/" target=_blank>MySQL官方网站找到ZIP文件 提示:有些是安装文件,安装时会有提示,这里我们不做讲解 二.解压文件,选择位置 ...

  5. WPF系列教程——(一)仿TIM QQ界面 - 简书

    WPF系列教程--(一)仿TIM QQ界面 - 简书 原文: WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM ...

  6. 博客搬家了--这次搬进自己家的了,不过博客园的会定时更新!新家地址: http://blog.woshimaijia.com/...

    博客搬家了--这次搬进自己家的了,不过博客园的会定时更新! 新家地址: http://blog.woshimaijia.com/ 博客园的博客很稳定,也是我很喜欢的地方 这里的文章我也会陆续更新的.. ...

  7. 技术博客哪家强:CSDN、博客园、简书、开源中国OSChina等博客的详细分析比较

    技术博客哪家强 文章目录 技术博客哪家强 前言 为什么要写博客 技术博客哪家好 几家主要网站的对比 初步结论 参考资料 前言 最近这段时间不是很忙,想干点儿什么有意义的事儿.抽空系统学学Python这 ...

  8. MIPCMS-004高仿大前端D8自适应博客模版

    这是厂长的第4个MIPCMS免费作品,高仿大前端D8自适应模版,有喜欢的朋友拿去用吧! 本模版不敢说,仿的多么好,多么完美,至少我不放后门,无任何弹跳. 本模版没有任何图片广告位,如果需要可以自行添加 ...

  9. Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客

    Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客 Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客 Org-mode五分钟教程ZZZ poste ...

  10. linux宝塔搭建网站,宝塔Linux面板搭建网站入门教程五(宝塔Linux面板安装WordPress博客程序)...

    本文于 2021-04-01 00:04 更新,本文內容具有時效性,如有失效,請在博客站內搜相關商家名稱,即可查看到關於此商家的最新優惠活動! 國外商家建議使用"谷歌瀏覽器"訪問, ...

最新文章

  1. TCP/IP协议之ARP笔记
  2. python难嘛-为什么说python入门很简单,但是在你这很难?
  3. 区块链分叉如何解决_什么是分叉区块链又该如何分叉
  4. C++N queensN皇后的优化算法(附完整源码)
  5. SAP CRM WebClient UI WebUI Runtime repository design
  6. java 向上转型_java向上转型和向下转型
  7. linux 常用基础命令
  8. 程序猿生存定律--表达背后的力量(1)
  9. frontend-tools
  10. 编写在浏览器中不弹出警告的ActiveX控件
  11. 2019年3月PMP考试技巧及答题技巧介绍
  12. djangobook的旧版本代码,关于数据库
  13. 教你如何关闭Win7视频预览节约资源
  14. 百度离线地图开发,node实现地图瓦片下载
  15. MySQL之函数和谓词
  16. 用C语言求两个数的最大公约数和最小公倍数
  17. BlockingQueue Interface In Java学习
  18. Android 开发之Okhttp网络请求日志打印
  19. 计算机管理找不到防火墙,手把手解答win10系统防火墙服务找不到的问题
  20. dcu故障是哪_【车匠在线-故障案例】潍柴自主DCU通讯故障

热门文章

  1. c语言推箱子源代码及注释,求大神 解析推箱子源代码 要详细
  2. 如何在柱状图中点连线_如何快速掌握MSA
  3. mysql的四个默认数据库是什么版本,MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列。...
  4. 转一个高内存定位的文章
  5. 学前教育与计算机,计算机与幼儿教育
  6. 用JAVA使用mysql命令操作导入SQL脚本
  7. 通过安装和配置AD域解决Windows Server 2016的IIS无法加载SMB文件卷文件的问题
  8. FastDFS安装脚本
  9. 2.2 LayoutInflater 加载布局文件源码
  10. PostgreSQL SQL 语言:查询