基于PHP的博客系统开发报告.docx
《基于PHP的博客系统开发报告.docx》由会员分享,可在线阅读,更多相关《基于PHP的博客系统开发报告.docx(25页珍藏版)》请在冰豆网上搜索。
![基于PHP的博客系统开发报告.docx](https://file1.bdocx.com/fileroot1/2023-1/29/fab63367-bb67-4466-bad4-11ba3bce9207/fab63367-bb67-4466-bad4-11ba3bce92071.gif)
基于PHP的博客系统开发报告
目录
《网站开发》设计报告书1
博客系统3
一、课程设计目的3
二、课程设计内容3
1.课程设计简介3
2.设计说明3
2.1系统设计3
2.2数据库设计7
3.设计流程9
4.实现功能10
5.详细设计10
5.1设计技术和工具10
5.2页面预览及部分代码10
三、课程设计总结20
博客系统
一、课程设计目的
通过课程设计,检验我们学习的情况,同时也是增强我们锻炼的机会。
通过实实在在的演练,使我们能清楚自己的掌握语言的程度、以及正确的衡量自己的水平,以达到学以致用的目的。
二、课程设计内容
1.课程设计简介
博客是Webblog的译文,同时他也可以译作(“网络日志”,“网志”等),是一种互联网平台上的个人信息交流中心。
设计本系统的目的主要是为了在网络上能够构建一片自己的思想空间,同时也为了满足网友之间相互交流、相互学习的目的,通过所学的知识进行具体的实践,不仅能检查自己所学知识的情况,还可以在实践当中发现自己的不足之处。
2.设计说明
设计模块包括两个模块:
系统设计和数据库设计,系统设计模块,主要是设计博客系统的前台页面和博客网后台也面。
整个系统采用PHP语言编写,页面布局使用了div+css的布局方式,数据库构建采用的是MySQL。
页面设计使用的html以及Javascript。
2.1系统设计
2.1.1系统功能结构:
博客系统主要分为前台和后台,其中根据其博客其前台的特点,可以将其分为博主信息、网络日历、文章查询等部分,各个部分及其功能模块如下图所示:
根据博客网后台的特点,可以将其分为用户设置、个人相册管理、博客文章管理、博主信息修改等部分,其中各个部分及其包括的具体功能模块如下图所示:
2.1.2系统流程图
为了更加清晰地表达业务功能模块,给出博客网的系统流程图,对于不同的角色,其各自的权限和功能也不相同。
包括面向用户的客户端和面向系统管理员的流程图。
●面向客户端流程图如下图所示:
●面向系统管理员的流程图如下图所示:
2.1.3开发环境
本博客系统的开发坏境:
◆服务器端:
操作系统:
windowsXP
Web服务器:
Apache2.2.8
数据库:
MySql5.5
浏览器:
GoogleChrome
分辨率:
1024x768
◆客户端:
浏览器:
GoogleChrome
分辨率:
1024x768
2.2数据库设计
2.2.1数据库需求分析
随着科学技术的不断发展,网络现在已经成为我们学习和生活中的一部分。
网络的迅速发展,给我们的生活带来了巨大的改变。
大部分人现在已经离不开网络。
在网络中,我们可以构建一个个性化的博客,可以充分展示自己的思想,表达自己的才能,抒发自己的情感。
网友也可以根据主题发表自己的意见和看法,与博主进行探讨、交流,这样就可以不断的提高自己。
2.2.2数据概念设计
根据以上对系统做的需求分析和系统设计,得出系统中使用的数据库实体分别为用户信息实体、博客文章信息实体。
Ø用户信息实体
用户信息实体包括密码、E-mail、用户名、个性签名、个人介绍、管理员级别。
Ø博客文章信息实体
博客文章信息实体包括文章题目、文章内容、文章发表时间、文章浏览次数属性。
2.2.4数据库逻辑结构设计
✧详细数据库设计
本博客系统包含有四个数据表
⏹tb_article(文章信息表)
文章信息表主要是保存发表的文章、文章发表的时间、浏览的次数等。
表tb_article结构
字段名称
数据类型
是否为空
默认值
说明
articleid
int(10)
否
Null
文章ID
content
longtext
否
Null
文章内容
author
Varchar(20)
否
Null
文章作者
now
datatime
否
Null
文章发表的日期
title
Varchar(200)
否
Null
文章标题
btime
Int(10)
否
Null
文章浏览的次数
⏹tb_filecomment(文章评论信息表)
文章评论信息表主要是用于保存注册用户评论的信息、评论的时间等信息。
表tb_filecomment结构
字段名称
数据类型
是否为空
默认值
说明
commentid
Int(4)
否
Null
评论ID号
articleid
Int(4)
否
Null
文章ID
username
Varchar(20)
否
Null
用户名
content
Varchar(240)
否
Null
文章内容
datetime
datetime
否
Null
文章评论时间
⏹tb_tpsc()
图片上传表主要是保存博主上传的图片信息。
表tb_tpsc结构
字段名称
数据类型
是否为空
默认值
说明
id
Int(10)
否
Null
图片ID
imgurl
Varchar(50)
否
Null
图片链接地址
Autuor
Varchar(20)
否
Null
图片上传者
Scsj
Int(20)
否
Null
图片上传的时间
⏹tb_user(用户信息表)
用户信息表主要是保存用户的ID、用户名、用户密码、Email、用户个人介绍、个性签名等信息。
表tb_user结构
字段名称
数据类型
是否为空
默认值
说明
userid
Int(20)
否
Null
用户ID
username
Varchar(40)
否
Null
用户名
Userpsw
Varchar(40)
否
Null
用户密码
Email
Varchar(100)
否
Null
用户E-mail地址
userico
Varchar(50)
否
Null
用户头像
usersign
Varchar(200)
是
Null
用户签名信息
userintroduce
mediumtext
是
Null
用户个人介绍
power
Int
(1)
否
Null
权限
3.设计流程
本博客系统按照一般系统的开发流程进行设计,首先进行需求分析找出系统中的用例,其次进行数据库设计,设计系统所需的表,再次是设计系统的前台页面,后台页面。
最后进行的是测试,验证系统是否符合预期设计,同时也可以根据测试的结果进行一些修改。
4.实现功能
此博客系统主要实现网站建设者与访问者之间的相互交流,通过本博客系统平台实现用户和用户之间信息交流。
博主通过发表文章,表达自己的想法和观点、以及自己的一些生活感悟等,实现博主和博主之间相互交流的目的。
博主可以上传自己喜欢的图片到自己的相册,主页将会显示博主最近上传的图片,同时,也可以对自己相册的图片进行删除。
未注册用户可以浏览博主发表的文章、图片等,但是不能进行评论,只有注册用户才可以对博主发表的文章。
博主发表的文章,按用户的浏览的次数进行排序。
博主可以对自己发表的文章进行修改、删除操作。
超级管理员可以对非法的文章、图片进行删除操作。
博主可以修改自己的基本信息,如密码、邮箱等、同时也可以查看别人的基本信息。
5.详细设计
本系统是采用面向对象的方法进行设计的,主要的用例有超级管理员和一般用户。
5.1设计技术和工具
设计技术
1在登录模块、注册模块,主要采用了Ajax技术,来实现用户登录信息的提交到数据库。
2密码是采用的是MD5加密技术,使得用户的安全性得到了保证。
3验证码采用的是Javascript脚本来实现的,通过刷新每次产生不同的随机数。
4图片的随时更新,主要是利用Jquery来实现的。
5发表文章主要是使用了一个网络的一个在线文本编辑器(ckeditor)。
6整个网站全部页面都静态化,有利于浏览器检索和网站的保密性。
工具
本系统的实现主要采用的是最简单的文本编辑器Editplus、zendstudio、phpmyAdmin、vim、dreamweaver、powerdesigner
5.2页面预览及部分代码
1.登录页面:
登录页面的验证码部分,采用的是Javascript脚本来生随机数,源码如下:
javascript部分:
//------生成随机数-----
varnum1=Math.round(Math.random()*100000000);
varnum=num1.toString().substr(0,4);
document.write("num="+num+"'>");
register.yzm1.value=num;
functioncode_1(){
varnum1=Math.round(Math.random()*100000000);
varnum=num1.toString().substr(0,4);
document.code.src="yzm.php?
num="+num;
register.yzm1.value=num;
}
验证码的背景图片是采用PHP中的GD库,来生成图片。
php部分:
php
//利用php的GD库生成验证码图片
$num=$_GET['num'];
header("Content-type:
image/PNG");
//$im=imagecreate(80,40);
$im=imagecreate(60,20);//生成原始图片
imagefill($im,0,0,imagecolorallocate($im,200,200,200));
imagestring($im,5,10,3,substr($num,0,1),imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)));
imagestring($im,5,20,3,substr($num,1,1),imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)));
imagestring($im,5,30,3,substr($num,2,1),imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)));
imagestring($im,5,40,3,substr($num,3,1),imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)));
for($i=0;$i<200;$i++){
imagesetpixel($im,rand()%70,rand()%30,imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)));//imagesetpixel画一个单一像素
}
imagePNG($im);
imageDestroy($im);
?
>
2.博客系统主页
博主的文章根据点击的次数进行排序,实现这一部分的源码如下:
php
$query="select*fromtb_articleorderbybtimesdesclimit0,10";//根据文章浏览次数排名(TOP10)
$result=$mysqli->query($query);
if($result){
if($result->num_rows>0){
while($rows=$result->fetch_array()){
$articleid=$rows['articleid'];
$one=explode("?
",$_SERVER["REQUEST_URI"]);
if(count($one)==1){//url中未包含?
echo"articleid=$articleid'>
".$rows['title']." ".$rows['now']."
";
}else{//url中包含?
if(isset($_GET['PHPSESSID'])){
$url="article.html?
".SID."&articleid="."$articleid";echo"".$rows['title']." ".$rows['now']."
";
}else{
echo"articleid=$articleid'>
".$rows['title']." ".$rows['now']."
";
}
}
}
}else{
echo'
暂时没有文章!
';
}
}else{
echo'查询失败!
';
}
?
>
分页功能源码如下:
php
$query="select*fromtb_article";
$result=$mysqli->query($query);
$articles_total=$result->num_rows;//取得总文章数
$articles_page=5;//每页显示的文章数
$pages_total=ceil($articles_total/$articles_page);//总页数,也是最后一页
//$page=isset($_get['page'])?
intval($_get['page']):
1;//这句就是获取page的值,假如page还未设定,那么页数就是1。
if(isset($_GET['page'])){
$page=$_GET['page'];
}else{
$page=1;
}
$start=$articles_page*($page-1);//起始记录数
$query_2="select*fromtb_articleorderbynowdesclimit$start,$articles_page";
$result=$mysqli->query($query_2);
if($result){
if($result->num_rows>0){
while($rows=$result->fetch_array()){
?
>
phpecho$rows['title'];?
>
作者:
phpecho$rows['author'];?
> 时间:
phpecho$rows['now'];?
> 阅读次数:
phpecho$rows['btimes'];?
>
php//echo$rows['content'];
if(mb_strlen($rows['content'])>250){
$string=mb_substr($rows['content'],0,250,'gb2312');//截取250个字符用以发布,mb_substr用以截取中文字符串不会产生乱码
$string_print=$string.'......';//未取完的文章以省略号代替
echo$string_print;
}else{
$str=$rows['content'];
echo$str;
}
?
>
根据博主最近上传的图片进行显示,源码如下所示:
php
$query="select*fromtb_tpscorderbyscsjdesclimit0,4";//查询数据库中最新的4张图片
$result=$mysqli->query($query);
if($result){
if($result->num_rows>0){
?
>
3.注册页面
注册页面主要有用户名、密码、邮箱、个性签名、自我介绍等,其部分源码如下:
密 码 * | | |
确认密码 * | | |
邮 箱 * | | |
--
上传头像 | | |
-->
functiontextLimitCheck(thisArea,maxLength,SpanId)
{
//根据onkeyup事件计算文本框中的字符个数
if(thisArea.value.length>maxLength)
{
alert(maxLength+'个字限制.\r超出的将自动去除.');
thisArea.value=thisArea.value.substring(0,maxLength);
thisArea.focus();
}
/*回写span的值,当前填写文字的数量*/
document.getElementById(SpanId).innerHTML=thisArea.value.length;
}
个性签名(0/100) |
自我介绍(0/200) |
4.发表文章页面
发表文章页面中发表文章,是采用的在线文本编辑器(ckeditor)。
其实现本页面部分源码如下:
functioncheckarticle(){
if(articleform.title.value==""){
alert("文章题目不能为空!
");
articleform.title.focus();
returnfalse;
}
articleform.article.value=CKEDITOR.instances.article.getData();
if(articleform.article.value==""){
alert("文章内容不能为空!
");
articleform.article.focus();
returnfalse;
}
}
flag=
phpecho$flag;?
>&
phpechoSID;if(isset($articleid)){echo"&articleid=$articleid";}?
>method="POST"name="articleform"onsubmit="returncheckarticle();