序中实现对他们的完整性和一致性控制。
E-R模型的组成元素有:实体、属性、联系。E-R模型用E-R图来表示。实体是用户工作环境中所涉及的事物,属性是对实体特征的描述。
图4.1 导航E-R图
图4.1显示了导航的所有属性,其中链接和外部链接二者之选其一,外部链接有着更高的优先级,存在外部链接,本身的链接(内部链接)将不起效。
图4.2 图片E-R图
图4.2显示了图片的所有属性,hash名是图片在上传过程由程序自动设置的一个名字,这个名字保证了图片在网站中的唯一性。
图4.3 商品E-R图
图4.3显示了商品的所有属性,其中发布人一般是管理员,封面图片是单独上传的。
其他模块的E-R图跟商品E-R图类似,将不再叙述,下面是网站管理员管理网站的
E-R图:
图4.4 网站管理员E-R图
4.1.4 数据库物理结构设计
在实际设计的时候需要考虑到一些系统的性能、负载问题,所以数据库的设计要求更加细致,下面对每个表进行详细的设计与说明。
图4.5 系统基本设置表(settings)
图4.5 系统基本设置表只有两个字段,分别是variable和value,这个表存储的是网站的一些配置信息,比如存储网站名,在表中的存储格式为:variable:sitename,value:企业网站。
图4.6 导航表(navgation)
图4.6导航表中的target字段的长度为1,这个字段只存在2个值,分别是0和1。
图4.7 图片分类表(picturecategories)
图4.7 图片分类表利用父子id法进行无限分类,note是对分类的一些简单描述,只在后台显示。
图4.8 图片表(pictures)
图4.8 图片表存储的是图片展示中的所有图片和商品的封面图片,可以说网站的大部分图片都记录在图片表中统一管理。
图4.9 图片展示表(picturescontent)
图4.9 图片展示表,这个表中的coverpic和content存储的是一个经过php序列化之后的图片信息数组,在显示的时候再经过反序列化。
图4.10 商品分类表(producecategories)
图4.10 商品分类表跟图片分类表基本一样,采用父子id法进行无限分类。
图4.11 商品基本信息表(produces)
图4.11 商品基本信息表是考虑到系统的性能,把商品的一些基本信息写在一个表中,由于这个表中存储的数据量不大,可以提高查询速度。
图4.12 商品详细信息表(producecontent)
图4.12 商品详细信息表存储了商品的详细内容,由于商品的详细内容既有文字,又有图片,况且商品的前台的商品列表中不显示详细信息,所以把商品的详细信息单独制表,当游客查看商品的详细信息的时候才查询商品详细信息表。文章模块、下载模块的数据表跟商品展示的数据表类似,下面不再详细说明。
图4.13 友情链接表(friendlink)
图4.13 友情链接表存储了友情链接的所有属性,这种小型模块只有使用了一个表进行数据的存储,操作简单。网站公告、用户信息、管理员信息、人才招聘等都是只有使用一个单表进行存储,后面不再详细说明。
4.2 系统结构设计
4.2.1 网站后台结构
图4.14 网站后台结构图
网站的后台功能设计必须完全的符合前台功能模块的要求,现在很多的大型CMS系统可以提供功能强大的专业网站后台,做为小型企业这种后台的实用性却不是很大,因为专业的后台管理程序功能太复杂,不利于企业内部工作人员进行管理。因此,专门开发一个小型网站后台管理系统在小型企业网站的设计中是非常必须的。
4.2.2 网站前台结构
图4.15 网站前台结构
前台有这么几大模块,其中友情链接和网站公告在首页显示,模块较小,暂不列出。
4.2.3 系统架构设计
图4.16 整个系统的程序架构
从上图中可以清晰的看到整个程序的架构,本程序使用程序跟显示分离的技术,php动态页只负责处理数据和一些逻辑,把处理完的变量赋值给smarty,让smarty去把数据跟模板结合。并且程序对一些经常用到的数据做了简单的缓存。
图4.17 模板引擎工作原理图
第五章 详细设计
系统详细设计就是按照前面进行的种种分析,把各种需求使用程序语言实现的过程。这部分将会对某些关键技术做出详细的描述,包括代码段的讲解、运行原理的细述和显示效果的展示。
5.1 系统公共文件核心代码
5.1.1 前台核心控制文件
整个系统的前台几乎依赖于common.inc.php文件,这个文件对系统正常运行所需要的一些常量进行定义,对变量进行初始化,引入其他一些重要文件。
session_start();
set_magic_quotes_runtime(0);
define('IN_WEB', TRUE);
define('WEB_ROOT', str_replace("\\", '/', substr(dirname(__FILE__), 0, -7)));
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
require_once WEB_ROOT.'include/global.fun.php';
这个文件最开始第一行使用了session_start函数开启了session,后面只要引用这个文件的页面都可以对session进行操作;紧接着后面的set_magic_quotes_runtime(0)是关闭php的自动转义,后面的数据使用自定义函数转义;后面的定义常量是为了页面的安全性和一些地方使用的方便性;同时这个文件还对主要的函数文件进行引入,统一调度。
$dbhost = $dbuser = $dbpass = $dbname = $pconnect = $dbprefix = $dbcharset = $charset = '';
$_CFG = array();
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
这一段最开始对一些需要使用的变量进行了初始化,防止一些非法注入,紧接着后面一段又对URL传值进行了过滤,这个过程是先判断php是否有自动过滤,如果有,直接返回,如果没有则对一些特殊字符进行转义,保证数据安全。
require_once WEB_ROOT.'config.inc.php';
require_once WEB_ROOT.'include/db_mysql.class.php';
$DB = new DB_MySQL();
$DB->connect($dbhost, $dbuser, $dbpass, $dbname, $pconnect);
unset($dbhost, $dbuser, $dbpass, $dbname, $pconnect);
$timestamp = gmtime();
$php_self = dhtmlspecialchars($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
$onlineip = getonlineip();
if (!@include(WEB_ROOT.'cache/settings.php')) {
require_once(WEB_ROOT.'include/cache.php');
recache();
exit('
caches created successfully , please refresh the page!
');
}
if (!$_CFG['siteurl']) {
$_CFG['siteurl'] = ''.$_SERVER['HTTP_HOST'].dirname($PHP_SELF).'/';
} else {
$_CFG['siteurl'] = str_replace(array('{host}','index.php'), array($_SERVER['HTTP_HOST'],''), $_CFG['siteurl']);
if (substr($_CFG['siteurl'], -1) != '/') {
$_CFG['siteurl'] = $_CFG['siteurl'].'/';
}
}
$css_root = $_CFG['siteurl'].'templates/default/';
$web_url = $_CFG['siteurl'];
这一段对以后页面经常使用的变量做了一定的操作之后进行了初始化赋值,后面的页面可以直接进行使用,提高代码利用率和程序的可读性。
require_once WEB_ROOT.'include/config.smarty.php';
include_once WEB_ROOT.'smarty/Smarty.class.php';
$template = new Smarty();
$template->caching = $tpl_caching;
$template->template_dir = WEB_ROOT.$tpl_template_dir;
$template->compile_dir = WEB_ROOT.$tpl_compile_dir;
$template->left_delimiter = $tpl_left_delimiter;
$template->right_delimiter = $tpl_right_delimiter;
这一段对smarty模板进行实例化,smarty模板在每个页面都会使用,这样做也是提高代码利
上一篇:
基于PHP技术的个人网站设计毕业论文
下一篇:
马原:环境保护与可持续发展论文(word)