一、博客系统介绍

  • Blog、Bloger、web log(网络日志)
  • 博客主要发布一些文章、图片;博客一般都是个人博客;
  • 博客的文章,一般都是按照时间倒序排列;
  • 博客,仅音译,英文名为Blogger,为Web Log(网络日志)的混成词。
  • 博客就是以网络作为载体,简易迅速便捷地发布自己的心得,及时有效轻松地与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。
  • 很多博客都提供丰富多彩的模板等功能,这使得不同的博客各具特色。
  • Blog是继Email、BBS、ICQ之后出现的第四种网络交流方式,至今已十分受大家的欢迎,是网络时代的个人“读者文摘”,是以超级链接为武器的网络日记,是代表着新的生活方式和新的工作方式,更代表着新的学习方式。
  • 博客,通常由个人管理、不定期张贴新的文章的网站。
  • 博客上的文章通常根据张贴时间,以倒序方式由新到旧排列。
  • 许多博客专注在特定的课题上提供评论或新闻。
  • 博客可以包含文字、图像、音乐、视频、链接等网络要素内容。
  • 博客是社会媒体网络的一部分。比较著名的有新浪、网易等博客。

二、个人思路:

  • 在写博客项目之前打算先总结一下博客项目用到的知识点,当总结完知识点后,再开始写整体的博客,最后回头查漏补缺看前面忘记写的知识点。

面向对象设计模式

  1、什么是设计模式

  • 设计模式,就是前人帮我总结的面向对象设计的代码经验;
  • 设计模式,对于项目的维护十分方便。

 2、常用的设计模式

  • 单例模式:一个类只能创建一个对象,不管用什么办法;如:数据库对象
  • 工厂模式:根据传递的不同类名参数,生产不同类的对象;

单例模式

 1、单例模式设计要求(三私一公)

  • 一私:私有的静态的保存对象的属性;
  • 一私:私有的构造方法,阻止类外new对象;
  • 一私:私有的克隆方法,阻止类外clone对象;
  • 一公:公共的中静态的创建对象的方法;

2、单例模式的核心代码

3、instanceof关键字

  • 描述:判断一个对象,是不是某个类的对象
  • 语法:$obj  instanceof  ClassName
  • 返回:如果是返回true,如果不是返回false。

综合案例

  • 设计一个单例的数据库操作类
  • 创建一个连接数据库的公共文件
  • 查询输出所有的学生信息

1、设计单例的数据库操作类

 <?php

 //最终的单例的数据库操作类

 final class Db

 {

        //私有的静态的保存对象的属性

        private static $obj = NULL;

        //数据库配置信息属性

        private $db_host;//主机名

        private $db_user;//用户名

        private $db_pass;//密码

        private $db_name;//数据库

        private $charset;//字符集

        //私有的构造方法:阻止类外new对象

        private function __construct($config)

        {

               $this->db_host = $config['db_host'];

               $this->db_user = $config['db_user'];

               $this->db_pass = $config['db_pass'];

               $this->db_name = $config['db_name'];

               $this->charset = $config['charset'];

               $this->connMySQL(); //连接数据库

               $this->selectDb(); //选择数据库

               $this->setCharacter(); //设置字符集

        }

        //私有的克隆方法:阻止类外clone对象

        private function __clone(){}

        //公共的静态的创建对象的方法

        public static function getInstance($config)

        {

               //判断对象是否存在,如果不存在,则创建

               if(!self::$obj instanceof self)

               {

                      //如果对象不存在,则创建

                      self::$obj = new self($config);

               }

               return self::$obj;//返回对象

        }

        //私有的连接数据库的方法

        private function connMySQL()

        {

               $link = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);

               if(!$link)

               {

                      exit("PHP连接MySQL失败!");

               }

        }

        //私有的选择数据库的方法

        private function selectDb()

        {

               if(!mysql_select_db($this->db_name))

               {

                      exit("选择数据库{$this->db_name}失败!");

               }

        }

        //私有的设置数据库字符集

        private function setCharacter()

        {

               return $this->exec("set names {$this->charset}");

        }

        //执行SQL语句的方法:insert、update、delete、set

        public function exec($sql = NULL)

        {

               //$sql = "SELECT * FROM student"

               //SQL语句转成全小写

               $sql = strtolower($sql);

               //如果是SELECT语句,中止执行

               if(substr($sql,0,6)=="select")

               {

                      exit("SELECT语句不能调用该方法!");

               }

               //如果非SELECT语句

               return mysql_query($sql);

        }

        //私有的执行SQL语句的方法:select

        private function query($sql = NULL)

        {

               //SQL语句转成全小写

               $sql = strtolower($sql);

               //如果是非SELECT语句,中止执行

               if(substr($sql,0,6)!="select")

               {

                      exit("非SELECT语句不能调用此方法!");

               }

               //如果是SELECT语句,直接执行,返回结果集

               return mysql_query($sql);

        }

        //公共的返回多行数据的方法

        public function fetchAll($sql,$type=3)

        {

               //返回的数组的常量类型

               $types = array(

                      1 => MYSQL_NUM,

                      2 => MYSQL_BOTH,

                      3 => MYSQL_ASSOC

               );

               //执行SQL语句,并返回结果集

               $result = $this->query($sql);

               //循环取出结果集中所有行数据,并构建二维数组返回

               while($row = mysql_fetch_array($result,$types[$type]))

               {

                      $arr[] = $row;

               }

               //返回二维数组

               return $arr;

        }

        //析构方法

        public function __destruct()

        {

               //关闭当前的数据库连接

               mysql_close();

        }

 }

 ?>

2 创建一个连接数据库的公共文件

 <?php

 //(0)定义类的自动加载函数

 function __autoload($className)

 {

        $filename = "./libs/$className.class.php";

        require_once($filename);

 }

 //(1)数据库配置信息

 $arr = array(

        'db_host' => 'localhost',

        'db_user' => 'root',

        'db_pass' => 'root',

        'db_name' => 'student',

        'charset' => 'utf8'

 );

 //(2)创建数据库对象

 $db = Db::getInstance($arr);

 //(3)遍历数组或对象的函数

 function dump($arr){

        echo "<pre>";

        print_r($arr);

        echo "</pre>";

 }

 ?>

3. 查询输出所有的学生信息

<?php

header("content-type:text/html;charset=utf-8");

//(1)包含连接数据库的文件

require_once("./conn.php");

//(2)构建查询的SQL语句

$sql = "SELECT * FROM student ORDER BY id DESC";

//(3)取回所有行数据

$arr = $db->fetchAll($sql);

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>HTML5 Document</title>

</head>

<body>

<div style="text-align:center;padding-bottom:20px;">

       <h2>学生信息管理中心</h2>

       <a href="javascript:void(0)">添加学生</a> |

       共有250个学生!

</div>

<table width="600" border="1" bordercolor="#ccc" rules="all" align="center" cellpadding="5">

       <tr bgcolor="#f0f0f0">

              <th>编号</th>

              <th>姓名</th>

              <th>性别</th>

              <th>年龄</th>

              <th>学历</th>

              <th>工资</th>

              <th>奖金</th>

              <th>籍贯</th>

              <th>操作选项</th>

       </tr>

       <?php

              for($i=0;$i<count($arr);$i++){

       ?>

       <tr align="center">

              <td><?php echo $arr[$i]['id']?></td>

              <td><?php echo $arr[$i]['name']?></td>

              <td><?php echo $arr[$i]['sex']?></td>

              <td><?php echo $arr[$i]['age']?></td>

              <td><?php echo $arr[$i]['edu']?></td>

              <td><?php echo $arr[$i]['salary']?></td>

              <td><?php echo $arr[$i]['bonus']?></td>

              <td><?php echo $arr[$i]['city']?></td>

              <td>

                     <a href="javascript:void(0)">修改</a> |

                     <a href="javascript:void(0)">删除</a>

              </td>

       </tr>

       <?php }?>

       <tr>

              <td colspan="9">显示分页的代码</td>

       </tr>

</table>

</body>

</html>

4.最后运行结果截图

5.代码的文件目录

  • Libs里面是数据库单例
  • Conn.php是连接数据的公共文件
  • List.php是列表展示

6.源代码

链接: http://pan.baidu.com/s/1hsdrZTU 密码: xm5d

PHP博客小项目之知识点(1)的更多相关文章

  1. Django——9 博客小案例的实现

    Django  博客小案例的实现 主要实现博客的增删改查功能 主页index.html  -->  展示添加博客和博客列表的文字,实现页面跳转 添加页add.html  --> 输入文章标 ...

  2. 微信小程序--简约风博客小程序(基于云开发 - 全开源)

    微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...

  3. Django 09 博客小案例

    Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...

  4. day14搭建博客系统项目

    day14搭建博客系统项目 1.下载代码包 [root@web02 opt]# git clone https://gitee.com/lylinux/DjangoBlog.git 2.使用pid安装 ...

  5. iOS开发的知名大牛博客小汇

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...

  6. SpringBoot技术栈搭建个人博客【项目准备】

    前言:很早之前就想要写一个自己的博客了,趁着现在学校安排的实习有很多的空档,决定把它给做出来,也顺便完成实习的任务(搞一个项目出来...) 需求分析 总体目标:设计一套自适应/简洁/美观/易于文章管理 ...

  7. 潭州课堂25班:Ph201805201 django框架 第九课 模型补充 博客小案例 (课堂笔记)

    聚合查询: 分组查询: annotate() 方法 例:查询某学院学生人数,(一对多查询) 以字典的形式输出 annotate(统计 ‘关联学生字段 出现的次,).字典形式(键,值) 例:查询每项课程 ...

  8. Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

    标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate ...

  9. 个人博客小案例(纯Django搭建)

    在看这篇文章的时候,必须有django基础,如果没有点击访问 一.环境配置 新建项目并做配置项目创建,创建APP并注册 创建模板并配置相应的路径,点击下载模板,配置方法点击访问 创建静态文件并配置,点 ...

随机推荐

  1. MySQL分库分表环境下全局ID生成方案

    在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作.在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...

  2. 我的vimrc配置

    fankcoder@fankcoder:~$ cat ~/.vimrclet Tlist_Auto_Highlight_Tag=1 let Tlist_Auto_Open=1 let Tlist_Au ...

  3. ActiveX相关

    ActiveX 1.创建ActiveXhttp://blog.csdn.net/fww330666557/article/details/6533118 继承IObjectSafety接口http:/ ...

  4. Python列表和字典的方法总结

    列表方法: 方法 说明 append( item ) 在列表末尾插入(item ) count( element ) 返回element在列表中出现的次数 extend( newlist ) 将new ...

  5. 用soaplib的django webserver

    前面写过怎么利用suds来调用webservicePython调用基于https协议的SOAP WebService,这篇讲的是如何用soaplib开发SOAP WebService(最近发现国外开源 ...

  6. PHP之路——验证码实现

    验证码生成并保存到session <?php //开始session session_start(); //画布大小 $image = imagecreate(100, 40); $color ...

  7. Java中关键字super与this的区别

    一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象.怎么去引 ...

  8. SCALA表达示简例

    作了解,感觉比一般的差距有点大哟. package com.hengheng.scala class HelloScala { } object HelloScala { def main(args: ...

  9. armv8(aarch64)linux内核中flush_dcache_all函数详细分析

    /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...

  10. BZOJ2442: [Usaco2011 Open]修剪草坪

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 500  Solved: 244[Submit][ ...