PHP仿博客园 个人博客(1) 数据库与界面设计
发布时间:2020-12-13 06:30:14 所属栏目:PHP教程 来源:网络整理
导读:自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的 PHP工作,不求工资多高,但求一收留之地。我能看懂大部分英语文档,人不蠢,爱学习,有兴趣地可以联系下!有诚意的来吧!qq:240382473 我
自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的 PHP工作,不求工资多高,但求一收留之地。我能看懂大部分英语文档,人不蠢,爱学习,有兴趣地可以联系下!有诚意的来吧!qq:240382473 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 (本地) 博客架构 后台目录: class 存放我们的类 常用类如 数据库操作类,分页类,和我们的大部分model 。。。 extention 存放些扩展 如 mce 的富编辑器 config 存放我们的 配置信息 templates 存放所有的模版(没有采用 smarty) upload 存放的是相片和其他文件 admin 根目录下会有一些类似的控制器 如 index.php,post.php,article.php,photo.php 我们先看看 admin/config/config.php 代码如下: ini_set( "display_errors",true ); 这里我们定义了一些基本常量,和几个函数。 __autoload() 函数加载 admin/class/ 中的所有类 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,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 */ } } 用 hasher() 函数加密了一个 88位的 不可逆密码, 登录过程就是用config.php 中的常量和 hasher( ) 函数来进行验证。 来看我们的 admin/index.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 来的,采用表格布局的,兼容的,可自定义其他样式的,简单的,实用的,可扩展的,完美后台框架。 ps:这些操作还没有使用ajax,因为我对ajax还不熟悉。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |