PHP博客小项目之知识点(1)
一、博客系统介绍
- 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)的更多相关文章
- Django——9 博客小案例的实现
Django 博客小案例的实现 主要实现博客的增删改查功能 主页index.html --> 展示添加博客和博客列表的文字,实现页面跳转 添加页add.html --> 输入文章标 ...
- 微信小程序--简约风博客小程序(基于云开发 - 全开源)
微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...
- Django 09 博客小案例
Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...
- day14搭建博客系统项目
day14搭建博客系统项目 1.下载代码包 [root@web02 opt]# git clone https://gitee.com/lylinux/DjangoBlog.git 2.使用pid安装 ...
- iOS开发的知名大牛博客小汇
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...
- SpringBoot技术栈搭建个人博客【项目准备】
前言:很早之前就想要写一个自己的博客了,趁着现在学校安排的实习有很多的空档,决定把它给做出来,也顺便完成实习的任务(搞一个项目出来...) 需求分析 总体目标:设计一套自适应/简洁/美观/易于文章管理 ...
- 潭州课堂25班:Ph201805201 django框架 第九课 模型补充 博客小案例 (课堂笔记)
聚合查询: 分组查询: annotate() 方法 例:查询某学院学生人数,(一对多查询) 以字典的形式输出 annotate(统计 ‘关联学生字段 出现的次,).字典形式(键,值) 例:查询每项课程 ...
- Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑
标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报 分类: Spring/Spring MVC(6) Hibernate ...
- 个人博客小案例(纯Django搭建)
在看这篇文章的时候,必须有django基础,如果没有点击访问 一.环境配置 新建项目并做配置项目创建,创建APP并注册 创建模板并配置相应的路径,点击下载模板,配置方法点击访问 创建静态文件并配置,点 ...
随机推荐
- 终于通过了PMP考试,然这只是一个开始。。。
三个月的辛苦付出,从2015/06/18(本人的生日)开始接受培训,2015/10/6终于收到了PMI发过来的祝贺的邮箱,但是成绩不是很理想.只得了两个B,三个M.但是目标已实现,心情回落. 在这三个 ...
- C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)
一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...
- 10个Java面试题及答案
1. 什么是JVM? 为什么称Java为跨平台的编程语言? Java虚拟机(Java Virtual Machine)是可以执行Java字节码的虚拟机,每个Java源文件将被编译成字节码文件,然后在J ...
- 【Maven实战】依赖的聚合和版本管理
1.在之前的文章中,我们已经建立了四个Maven项目,但是此时如果我们要对这四个项目进行编译打包时,必须一个一个的进行执行命令,而聚合就是指只要我们在其中一个项目中编写一些代码,则在进行此项目的编译和 ...
- 软件发布版本区别介绍-Alpha,Beta,RC,Release
Alpha: Alpha是内部测试版,一般不向外部发布,会有很多Bug.除非你也是测试人员,否则不建议使用. 是希腊字母的第一位,表示最初级的版本 alpha就是α,beta就是β alpha版就是比 ...
- Putty工具包简单使用
Putty工具包简单使用 一.Putty简介 Putty是一款远程登录工具,用它可以非常方便的登录到Linux服务器上进行各种操作(命令行方式).Putty完全免费,而且无需安装(双击即可运行),支持 ...
- SQL:将查询结果插入到另一个表的三种情况
一:如果要插入目标表不存在: select * into 目标表 from 表 where ... 二:如果要插入目标表已经存在: insert into 目的表 select * from 表 wh ...
- 抽象基类(ABC),纯虚函数
#ifndef _ACCTABC_H_ #define _ACCTABC_H_ //(* #include <iostream> #include <string> //*) ...
- [Java Concurrent] 多线程合作 producer-consumers / queue 的简单案例
在多线程环境下,通过 BlockingQueue,实现生产者-消费者场景. Toast 被生产和消费的对象. ToastQueue 继承了 LinkedblockingQueue ,用于中间存储 To ...
- 单机使用tungsten 同步mysql数据到mongodb
[注意],当前的测试环境仅仅是一台服务器. 部署测试的tungten版本是2.1.2-xxxx; Requirements: mysql配置
