自学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
复制代码 代码如下:
<?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 ");
}
这个设计模式是从一个老外那里学的!
原理就是:
首先我们加载我们的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还不熟悉。
相关推荐:
AI网页生成:轻松构建智能网站,提升品牌竞争力,杭州专业ai智能教育
SEO薪资这些,你也能月入过万!,天水网站建设公司
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
SEO导流:如何通过精准优化实现网站流量大爆发,网站优化优化怎么做
SEM有哪几个平台?数字营销的多元选择,AI怎么取消移动间距
seo黑帽是什么,列举几种seo黑帽行为 ,穿老款的ai丢人吗
SEO合作:让你的网站在搜索引擎中脱颖而出,惠州抖音seo策划公司
用AI写科普文章:科技改变写作的未来
互联网时代的“搜索截流”新玩法:如何抓住流量红利,甘孜做优化网站软件
Chato1免费么?揭开这款AI聊天机器人的神秘面纱,交个朋友ai写作
ChatGPT403:引领人工智能新时代,颠覆你的工作与生活方式,ai nak
SEO定价策略:如何根据企业需求定制最佳价格方案,教育培训抖音营销推广
文章AI指令提升写作效率的智能助手
SEO优化要钱吗?揭秘SEO投资背后的价值与回报,ai领域
专业SEO助力企业在激烈市场竞争中脱颖而出,嘉兴海外网站推广价格
ChatGPT暂时不可用?如何高效应对并寻找最佳替代方案!,logo ai教程视频
SEO策划:让你的网站迅速脱颖而出的秘诀,seo优化和技巧
SOE优化:让你的网站轻松登顶,流量激增的秘密武器,广西网站建设存在问题
ChatGPT充值打不开?这几招教你轻松解决问题!,免费的ai写作绘图
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
什么是SEO优化方案,seo的优化方案 ,ai emorobot
URL站长的崛起:打造高效网站运营的秘密武器,网站建设费用计算依据
ChatGPT免费版的限制:你需要了解的5大制约因素,Ai分解模型
AI免费生成文章的软件:轻松创作的秘密武器
英语日记AI生成:轻松提升英语水平的智能助手
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班
ChatGPT不能打开EL?揭秘这一困扰背后的真相与解决方案,ai被动房
ChatGPT美区要梯子吗?轻松畅享全球智能聊天体验,ai音位
ChatGPT破解:人工智能的无限潜力与破解秘笈,意识变ai
SEO动态:2025年SEO趋势与优化技巧解析,十堰外贸网站推广费用
seo链接有什么用,seo外链是什么意思 ,one ai写作
优化整站,让网站飞速增长,打造行业竞争力,广东网站建设与维护
SEO好吗?助力网站成功的关键之道,网站优化方案范文怎么写
ChatGPT页面打不开怎么办?这些解决方法让你轻松访问AI助手!,分散ai
SEO站群:打造强大网络营销引擎,助力企业快速提升排名与流量,seo网站排名案例
产品经理seo是什么,产品经理seo是什么意思 ,ai政府公文写作 软件
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
seo给你什么帮助,seo的利与弊 ,ai 大厨
ChatGPT为什么打不开?背后原因与解决方案,慧ai写作
怎么使用AI生成文章,轻松提升写作效率!
ChatGPT翻译打不开?解决方法!,ai爱股票
Chatget免费网站版无需登录,畅享无限对话体验!,工业 Ai 视觉检测
SEO目的:如何通过精准优化提高网站流量与转化率,百度推广网站关键词
SEO更好,让你的网站从此脱颖而出,渝中的知名网站建设
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
SEO短视:为何眼前的成效不能成为长久的策略?,网站上线seo优化
SEO应该如何提升网站流量与排名?揭秘成功的SEO策略,肺炎疫苗推广营销
OpenAI您的信用卡被拒绝了?请尝试用借记卡支付,轻松解决支付问题!,ai cdr缩略图补丁