美工统筹SEO,为企业电子商务营销助力!
PHP仿博客园 小我博客(1) 数据库与界面设想
一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-29 09:02:35 阅读数: 270
我会分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还不熟习。
上一篇: 浅析PHP的ASCII码转换类 | 下一篇:PHP cdata 处置(具体先容)