基于php的购物网站设计与实现-论文_第1页
基于php的购物网站设计与实现-论文_第2页
基于php的购物网站设计与实现-论文_第3页
基于php的购物网站设计与实现-论文_第4页
基于php的购物网站设计与实现-论文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)题目基于php的购物网站设计与实现系名信息工程学院专业计算机网络技术班级姓名学号指导老师系主任年月日

摘要随着Internet的兴起,网上购物已然成为当今社会一种潮流。网上购物相比传统购物的更加便捷的优势,加上如今配套物流的建设,网上支付技术的完善。使得消费者能够做到足不出户,即可享受到安全便捷的购物过程。因而越来越多的人开始在网上购物。也促使越来越多的商家在网络中开商店。但跟网络技术的飞速发展形成鲜明比对的是直接从事相关Businesspeople对互联网相关技术的有限掌握程度,特别是一些中小规模的商家,他们会从中发现在互联网上购物的人远远比在实体店中购物的人还要多。因此开发网上商城购物系统就应运而生。购物系统,采用经典的PHP+MySQL+Apache黄金组合开发。严格基于MVC开发思想,做到数据与页面显示层分离,从细节着手,在实现网上购物需要的功能之外,尽量从消费者角度出发,最终达到界面美观友好。使用者操作便捷。商家也更加容易使用,实现系统的易用性。关键词:网上购物;MVC开发模式;PHP开发;网上支付

目录第一章绪论 11.1开发背景 第一章绪论在这个信息时代,信息技术的不断发展和Internet互联网技术的日益普及,网络已经成为人们日常学习生活中重要的一部分。浏览信息,享受服务,享受高科技带来的便利的同时人们越来越意识到网上购物给企业商家和个人生活所带来的巨大影响。而作为网络服务主流的网上购物更是具有开发潜力。他们都会将成为年轻人依赖的一个功能1.1开发背景网络购物就是消费者通过网络实现购物的过程。其主要特点是商家与顾客互不见面,通过网络使商品信息和钱款以电子的形式在网络上进行传播交易。所以,网络购物具有以下特点:商品的信息更加深进全面、减少了商品的销售本钱、节约了消费者的时间和体力、消除了消费者与商家的面对面冲突、降低了商户的经营本钱等等,充分体现了网络购物的方便快捷、低本钱的特点。如今随着互联网的普及,网络购物的优点变得更加突出,也就日益成为一种重要的购物形式,网络购物也越来越成为一种趋势。对于商家来说,由于网上销售没有库存压力,不受时间点的限制,不受恶劣天气的影响,经营成本低,经营规模不受场地限制-没有地域限制,在将来会有更多的企业选择网上销售,通过互联网对市场信息的及时反馈来调整经营的方式和物品来吸引更多的人来光顾,以此提高企业的经济效益和参与国际竞争的能力。而对于整个市场经济来说这种新型的购物模式也可在更大的范围、更多的层面以更高的效率实现资源配置。网上购物突破了传统商务的障碍,无论对消费者、购物网站企业还是市场都有着巨大的吸引力和影响力,在新经济时期无疑是达到“多赢”效果的理想模式。对于有着要求越来越高的消费者来说这无疑是一种简单方便的购物方式,加上现在的网络越来越发达,商家还会在这些基础上增加更多的东西来吸引顾客,达到真正的利益最大化。这就是真正意义上的市场推动力。一项针对中国中小企业的情况调查显示,启动实体的销售公司的平均费用至少5万元,而投资开网建店成本非常小。筹办一家网上的商店投入很小,因为不用去办营业执照,不用去租门面,不用囤积货品;而且网上商店比同等规模的地面商店“租金”要低得多,同时租金不会因为营业面积的增加而增加,商家也不用为延长营业时间而增加额外的费用。并且基本不需要占压资金。一般的传统商店的进货资金少则几千元,多则数万元,而网上商店则基本不需要压资金。可以做到24小时营业时间。即做到了网上商店延长了商店的营业时间,可以做到一天24小时、一年365天不停地运作,无须专人值班看守,都可照常营业。传统店铺的营业时间一般为早上8时到晚上11时,遇上坏天气、员工有急事或者其他一些意外情况也不得不暂停营业休息。销售规模不受地域跟地盘限制。传统商店店面的规模直接决定了能够摆放多少商品,生意大小常常被小店面积限制。而如果是在网上商城的话,即便在地面上只有一个小商店或者甚至没有门店也没问题,开店的生意却可以照样做得很大。不受店面空间的限制。哪怕只是小店,在网上商城系统却可以拥如同拥有百货大楼那么大的店面,可以摆上千万种商品。一般同时在线的商品只要超过10万件就已超过一些大超市。不受地理位置影响。不管客户商家有多远,也不论顾客是在国内还是国外,在网上购物商城里面,客户一样可以很方便地找到并购买商品。这令消费群体突破了地域的限制,变得购物无限广阔了。而与日益飞速发展的信息技术之形成鲜明对比的是,从事相关商务活动的人群对相关技术有限的掌握程度。特别一些中小型企业更加如此。如今电子商务如火如荼的发展,但是大多数都是像淘宝,阿里巴巴等这种大型专门做电子商务的平台。而很少有这种为中小型企业单独开发的独立的购物系统。而这些中小型公司没有充分的资金跟精力去开发一个相关的网上购物平台。因此开发一个实用中小型的网上购物系统是很重要的。特别是一些新兴的创业型公司。所以开发一个在线网上购物系统平台是有必要的,在结合线下跟线上两条线,既可以提高自己的品牌知名度,又可以提高经济效益。能够带来直接的经济效益是所有企业所期望的。该系统在功能上基本实现一个网上商店的功能应用。有自己实体店的商家,拥有一个属于自己的网上购物商城也是现在时代的趋势跟顺应潮流。扩大自己的社会影响力跟知名度,在这个互联网时代,信息的发布跟交流时很有必要并且十分重要。1.2国内网上购物发展状况中国网购发展速度非常快,2012年统计数据网购占社会商品零售总格的比重从0.34%升至4.32%。中国网购发展如此之快,西方很难想象。中国网购迅速发展的一个重要原因是商业业态没有西方国家发达,网购利用中国正在工业化、城镇化的机会有了一个巨大的发展空间。网购正在改变着人们的生活、消费的方式,这样对物质文化生活的提高,促进整个国家用消费来拉动经济会起到很大的作用。在网络购物的过程中,通过人与电子通讯方式的结合,极大地提高了网上购物的活动的效率,减少了不必要的中间环节。同时,网上购物过程产生的网上支付行为的发展也将转变政府的行为。在网络购物逐渐变的流行的时代里,当企业应用网络购物商城进行经营,银行实现金融电子化,以及消费者实现网上消费的同时,也将对政府管理行为提出新的要求,国外在这方面有很好的法律法规加以约束,防止商业欺诈行为。但是国内在这方面做的就没有国外的好,没有一定的规范加以约束,我们经常可以看到一些消费者在网上购买的东西和实际不一样,发现上当后我们也无能为力。在国内有很多大型的电子商务公司,像淘宝B2C商务平台、阿里巴巴就是专门提供B2B商务平台、还有一些像京东主要以卖图书为主、聚美优品新起的以卖化妆品为主的电子商务公司。现在国内的网购的发展,越来越朝着细分市场发展。这也是未来电子商务发展的方向-细分市场。以及催生一系列网上支付中介公司。像易宝支付,支付宝等等。在一定程度上保证了网上购物的支付的安全性。所以在网络购物这片领域发展的越来越成熟的环境中,网络购物是具有巨大未来市场潜力的。总而言之,网络购物是一种不可阻挡的趋势跟潮流这是现在人们统一的认识。第二章相关介绍2.1PHP语言介绍PHP,是英文超文本预处理语言HypertextPreprocessor的缩写。PHP

是一种

HTML

内嵌式的语言,是一种可以跨平台在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,但是比C语言功能强大.同时混合了java语言面向对象的风格,C++的风格,但是比java也更加简洁。特别是语法风格方面,比Java简洁。PHP是现在大部分网站采用的语言。也是现阶段最流行的语言。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。总之,PHP是一种可以跨平台的服务器端嵌入式的脚本语言。支持几乎所有流行数据库,没有操作系统的限制。语言风格简洁,功能强大,成本低廉,安全性高。是时下开发动态网站最流行的语言。2.2MYSQL技术介绍MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将全部的数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。使用于中,小型网站.

由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其免费版的性能卓越,搭配PHP和Apache可组成良好的开发环境。而下面我们要搭建的Web测试环境就是利用MySQL+PHP+Apache这组黄金搭档。这里采用图形化界面的MyphpAdmin来操作SQL数据库。所以具有更加灵活跟便捷,直观的优势。增加开发效率,跟传统的命令控制台相比-这明显提高界面对开发者更加友好程度,使得维护数据库更加容易直观。2.3MVC开发模式和思想MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后,

并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型应该会对应多个视图,一个视图应该会对应多个模型。模型、视图与控制器的分离,使得一个模型可以多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应该会反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能。此次系统的开发,都将严格基于MVC模式思想进行开发。

第三章系统需要分析3.1系统可行性分析本系统拟采用PHP和MySQL分别作为开发语言和数据库。使用免费的Apache服务器作为web服务器,分别采用ZendStudio作为集成开发工具跟phpMyadmin作为数据库的管理工具。首先,技术可行性。本系统仅需要一台配置好php+mysql的apache服务器环境软件的计算机即可,对机器本身没有太高的要求,一般当前个人电脑完全可满足要求。对软件技术要求,由于系统本身采用MVC三层模式开发,所以前台view层页面,可以不用完全自己开发,从网上参考有价值的template模板作为合适的view层即可。主要自己来开发后台跟的Model层跟Controller业务逻辑层。本地计算机硬件环境以及软件环境如下表3.1所示:表3-1本地环境配置列表本地计算机的配置详细配置信息处理器酷睿双核内存2G硬件空间320GB开发环境Widows7系统数据库MySQL编程语言PHP5.2服务器Apache2.2其次,经济可行性。由于本系统是完全采用免费的黄金组合搭档php+mysql+apache。都是免费的,而且前台框架是view是ECshop的模板。以便开发简单且适合小型公司的网店,独立区分于茫茫大潮中的淘宝店中。所带来的效益远远大于系统软件的开发成本。在经济上完全可行。最后是社会可行性。电子商务网站是该企业运用Internet技术创造更多更高的经济效益的主要因素之一。对于网上销售尤为如此,所以本系统的效益是要可观的。是可行的。可以做到扩大自身的影响力,如今具有自己独立的网站网店是一种趋势,也是一种商家本身实力的象征。能够在搜索引擎中获得自己的排名是一种非常有效的广告手段。3.2功能需求分析根据分析,为了较好的实现网上购物网站,系统应该实现如下基本功能如表3-2所示:

表3-2网站大概功能需求表功能模块实现功能后台管理方面(Back-stagemanagement)商品分类管理、添加与修改商品、管理订单、商品留言管理等功能管理网站用户(Managewebsiteusers)用户管理、后台管理员管理等功能用户管理方面(Usermanagement)用户注册、验证码登陆、资料修改等功能用户订购方面(Userorders)在线订购、在线支付、购物车、查看订单、信息反馈等功能商品展示方面(Commoditydisplay)二级分类展示、首页精品推荐、新品发布、销售排行网站购物信息方面(Shoppinginformation)汇款方式、送货方式、定购方式等功能首页功能方面(HomePageFunction)导航功能、友情链接等功能

第四章详细设计与实现4.1整体框架的布置和搭建系统采用了MVC开发模式的思想,对整个系统分成了3个大模块:前台的view层、数据库Model层、业务逻辑层Controller层。又对各个模块又进行了一步的细分,如前台view层模块又分前台跟后台模块;前台主要包括会员注册、商品选购、购物车、商品结算、商品订购反馈、新品、热销。后台主要包括会员管理,订单管理,商品管理,商品栏目管理。Model层则采用严格封装;使得系统具有易用性、个性化、跨平台等特点,代码的复用性;使其运行得高速、安全、稳定。首先搭建基本的框架,框架首先必须具备的条件如下表4.1所示:表4-1框架基本要素表框架的基本要求/要素作用配置文件和配置文件读取的功能灵活读取更改数据库信良好的数据库处理底层基本数据的增删改查良好的目录结构开发者便于开发正确的路径结构便于网站的移植具体配置文件和配置文件读取的功能文件几乎所有的文件都应该要连接数据库,所以一般将这个文件单独写到一个底层文件中,然后通过初始化文件,引入包含进去。基本配置文件config.php代码如下:

网站的配置文件,将数据库信息作为一个数组保存。包括基本的连接密码、数据库名、编码格式(一般都是设置成utf8编码)等。$_cfg['user']='root';$_cfg['pwd']='tangpanpan314';$_cfg['db']='shop';$_cfg['char']='utf8';

图4-1网站数据库配置信息良好的数据操作,应该是有日志记录。所以在配置文件信息里面加入判断日志记录是否开启字段,以方便管理员管理。$_cfg['debug']=true;通过读取网站配置文件conf.class.php来读取和更改网站的配置信息。代码如下:配置文件的读取类用来读取config.php,并能返回某个配置选项的值,在配置读取类文件中,一般都是采取单例模式,减少不必要的重复多次反复生成连接对象开销。读取网站配置文件图4-2所示:classconf{

privatestatic$ins=false;

private$info=array();

finalprotectedfunction__construct(){

require(ROOT.'includes/config.php');

$this->info=$_cfg;

}

finalprotectedfunction__clone(){

}获得一个单例

publicstaticfunctiongetIns(){

if(self::$ins===false){

self::$ins=newself();

}

returnself::$ins;

}读取获得配置的网站信息

publicfunction__get($key){

if(array_key_exists($key,$this->info)){

return$this->info[$key];

}else{

returnnull;

}

}图4-2读取网站配置信息数据库底层的基本都离不开的是增删改查,所以把这些sql语句全部封装到底层的sql类中。取得一行数据,取得所有数据,并且做一个简单的日志记录也是必要的。代码如下:mysql.class.php文件数据库处理类,灵活的数据库底层封装类,应该首先具备的公共易用性、灵活性等功能。所以数据底层处理类,必须封装数据库连接、数据库的选择、数据库语言执行、获取数据执行后返回对象、最后还必须具有错误提示功能。数据库的连接功能图如下:通过数据配置文件读取相对应的信息值,连接如果不成功,返回对应不成功信息。连接数据库图4-3所示:protectedfunctionconnect(){

$this->conn=mysql_connect($this->conf->host,$this->conf->user,$this->conf->pwd);

if(!$this->conn){

$err=newException('连接失败');

throw$err;

}

}图4-3读取网站配置信息选择数据库,这是底层封装类必备的灵活性。通过拼接sql语句,来更改引用的数据库。选择数据库图4-4所示:protectedfunctionselect_db($dbname=''){

if($dbname==''){

$sql='use'.$this->conf->db;

$this->query($sql);

}

}图4-4选择连接数据库指定字符编码格式,在中英文切换的时候,很重要。但是在本次开发系统中,基本采用的utf8中文格式。设置数据库字符编码图4-5所示:protectedfunctionsetChar(){

$sql='setnames'.$this->conf->char;

return$this->query($sql);

}图4-5数据库设置字符编码Sql语言的执行函数,先判断配置文件里面的日志记录是否开启,如果开启则记录对应的sql语言操作。如果执行sql语句出错,则报错,并且记录错误信息日志。记录日志如图4-6所示:publicfunctionquery($sql){

if($this->conf->debug){

$this->log($sql);

}

$rs=mysql_query($sql,$this->conn);

if(!$rs){

$this->log($this->error());

}

return$rs;

}

}图4-6记录日志将sql语句执行结果封装到底层函数,因为有时候需要获取所有的关联的结果,有时候就只需要一行结果就行。所以封装获取结果函数时候,分别封装两个函数。一个用来获取所有执行结果,一个用于获取一行结果。通过数组的形式返回。获取sql语句返回值图4-7所示:publicfunctiongetAll($sql){

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

$list=array();

while($row=mysql_fetch_assoc($rs)){

$list[]=$row;

}

return$list;

}

publicfunctiongetRow($sql){

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

returnmysql_fetch_assoc($rs);}图4-7获取sql返回值封装受影响的行数函数,在有时候判断sql语句是否执行成功很重要的判断依据。返回影响行数的函数,如图4-8所示:publicfunctionaffected_rows(){

returnmysql_affected_rows($this->conn);

}图4-8返回受影响的行数日志记录功能,其实是关于文件的操作。即用到php内置函数。并通过底层封装类,指定日志生成位置。为了防止日志不断庞大,所以给日志文件设置一个上限1024*1024即1M大小。达到上限后,日志会自动覆盖前面的日志文件信息。通过file相关函数操作,步骤先打开文件fopen,获取句柄fh,然后写入文件信息fwrite。最后关闭句柄。这段是日志记录图4-9:

publicfunctionlog($sql){

$log=ROOT.'data/mysql.log';

if(!file_exists($log)){

$fh=fopen($log,'w');

}else{

if(filesize($log)>1024*1024){

$fh=fopen($log,'w');

}else{

$fh=fopen($log,'a');

}}

fwrite($fh,$sql."\r\n");

fclose($fh);

}}图4-9日志记录函数上面底层的封装的sql类,集合了常用的连接数据库功能,还包括基础的数据库的执行操作。并且做一个日志记录sql语句操作功能。良好的目录结构将底层文件分别新建model文件,里面保存model模型类。Includes文件夹,里面包含网站所需的运行配置文件。再新建一个helper文件夹,里面保存一些可能会重复用到常用功能代码文件。比如像图片水印效果,分页等功能。正确的路径结构因为网站发布可能在未知的环境下进行,所以网站文件的引用最好采用相对路径的引用。在初始化文件中对此首先定义好,对网站的根目录定义成一个常量ROOT。网站的初始化文件,负责计算当前网站的根目录,负责引入所有页面都需要的引入的公共文件。init.php文件如下图4-10所示:define('ROOT',str_replace('\\','/',str_replace('includes\init.php','',__FILE__)));include(ROOT.'includes/conf.class.php');include(ROOT.'includes/mysql.class.php');include(ROOT.'includes/lib_base.php');function__autoload($class){//$class是

new

类名(),是类名

if((stripos($class,'model'))!==false){

include(ROOT.'model/'.$class.'.php');

}else{

include(ROOT.'helper/'.$class.'.php');

}session_start();图4-10网站初始化文件代码初始化session,在此系统中,session是要多次用到,所以将session也放置到初始化文件中。因为在网站中,购物车跟用户登录都要用到session技术。所以在初始化文件也包含了session初始化代码。并且根据不同的model来加载对应的model类。从而实现代码的复用度,跟代码的简洁度。先将Ecshop的view模板解压到,apache服务器的hosts文件下。(其实这里在任何地方建project都可以,因为在vhost里面配置虚拟主机的时候会标识。最后都是通过虚拟主机来访问网站。)通过基本的连接,将路径都走通。然后再对系统的主界面进行设计。模板中有用的模块能够用得上的,先设置好。再对自己将要开发的模块进行设计。采用”先死后活”的方法,先写成静态的Html页面,然后再对各个部分要实现的功能进行实现动态化。4.2数据库的设计在这个系统的过程中,需要会员登录注册,所以需要一张会员表。购物系统,必不可少是购物消费者跟商品打交道,商品表少不了。然后商品的栏目表,是作为关联商品的独立之外的表。然后购物必不可少的产生订单表,跟订单表关联的是订单商品信息表。基本简单这六张表,就可以实现一个简单购物商城系统所需的功能。4.2.1商品信息表goods商品信息如下表4-2:表4-2商品信息名称数据库字段作用商品主键goods_id商品唯一的标记

id定位不同的商品商品货号goods_sn商店通过不同的货号来区分不同的商品栏目idcat_id商品都是属于不同商品栏目商品名goods_name商品名是给顾客最直观的名称本店价格shop_price商品价格是商品属性必备值市场价格market_price这是突出自己跟市场的差异体现自己的价格上的优势库存量goods_number在交易的过程中

先得看看库存里面是否还有货商品重量goods_weight在选择物流时候的收费标准简短描述goods_brief简短描述商品描述goods_desctext包含商品所有属性小图片thumb_img首页展示的小图大图片goods_img商家上传的原始图片作为以后的凭证原始图片ori_img商家上传的原始图片作为以后的凭证是否上架is_on_sale缺货或者下架时候的标记位是否删除is_delete在商品删除的时候一般不作物理上的删除

只做一个标记位是否精品is_best在前台展示确认精品的标记位是否新品is_new新品的标记位是否热卖is_hot热卖标记位

方便管理者设置热卖商品发布时间add_time发布商品的时间上次修改last_update商家管理查看更新时间4.2.2商品栏目信息表categoryCat_id

栏目id

、Cat_name

栏目名称、

Parent_id

栏目所属父目录

。在商品面包屑导航过程中,这个极为重要。通过递归调用,查找父节点。具体实现的Sql语句如下图4-11所示:createtablecategory(cat_idsmallintunsignedprimarykeyauto_increment,cat_namevarchar(10)notnulldefault'',parent_idsmallintunsignednotnulldefault0)图4-11商品栏目生成sql代码4.2.3会员信息表user用户id、用户密码passwd、用户名username、用户邮箱email。会员表,应该以简洁为主,过于冗杂的注册项目,会直接降低用户的好感度,导致潜在用户的流失。所以简单的以用户名,密码,注册邮箱为主。4.2.4订单信息表order_info订单表跟订单关联表,先要了解订单表形成的流程跟两张表之间的关联。其形成的基本要素表如下表4-3所示:表4-3订单表基本要素图Order_id姓名手机地址电话送货时间配送方式支付方式3XxXxXxxXXxxXxX但是仅有以上信息还不够,还必须记录相关的商品信息。订单商品关联表如表4-4订单表基本要素图Order_idGoods_idRec_idSubtotal3435394.2.5订单商品关联表order_goods具体实现订单商品管理sql如图4-12所示:createtableorder_goods(rec_idintunsignedprimarykeyauto_increment,order_idintunsignednotnulldefault0,goods_idintunsignednotnulldefault0,goods_namevarchar(30)notnulldefault'',numsmallintunsignednotnulldefault1,pricedecimal(9,2)notnulldefault0.00,subtotaldecimal(9,2)notnulldefault0.00,)图4-12订单商品管理表sql语句4.3后台模块的设计后台管理模块的设计,最重要的就是商品的增删改查功能。其他会员管理,订单管理,栏目表的管理。都是简单的一个增删改的语句就可以实现。而在商品管理中,必须涉及到图片的上传,图片的缩放等功能。形成缩略图,是商品上传必须解决的问题。在后台模块中,涉及到列表问题时候,就离不开分页功能小模块。而且不论是前台,还是后台。只要涉及到列表展示的时候,必须会涉及到分页功能。因此分页功能可以单独做一个modle层模块。4.3.1商品管理模块商品管理,包括商品的增删改查,但是商品管理中,有一个要注意的地方,就是图片的上传,还包括图片的水印,统一大小的图的前台展示。所以图片的上传跟水印是这部分的难点。其中还包括商品序列号的不重复自动生成功能。大致思路如下:1:接收POST数据判断商品名为空,货号是否为空,栏目是否选中2:把收到的POST的形成数组,

数组的键名与字段一一匹配3:调用model的相关方法,插入商品信息上传商品图片,new一个上传类封装对象。$upfile=newupfile(2,'jpeg,jpg,gif,png,bmp');$data['ori_img']=$upfile->up('ori_img');//

路径或false生成缩略图,因为在商品展示中,为了统一美观的效果,一般都是生成统一大小的缩略图。在展示的时候,展示出来。if($data['ori_img']){

//

判断是否上传了图片

$data['goods_img']=ltrim(str_replace(ROOT,'',image::thumb(ROOT.'/'.$data['ori_img'],230,230)),'/');上传文件是一个普通常用的功能,因此将upfile单独做一个封装功能模块。放在常用的工具类文件夹里面。以供系统所需调用。迭代来生成不重复的文件名,放置文件名冲突,所以才去随机生成文件名。以时间日期为前缀,最大限度减少冲突的可能性。文件上传是通过php内置函数,upload上传到服务器,以临时文件存在。要保存上传文件,需要将临时文件移动到要保存的文件夹下面。移动文件的函数move_uploaded_file实现。如果移动失败,则返回失败信息提示。如图4-13所示:

if(!move_uploaded_file($this->info['tmp_name'],$path)){

$this->error='移动文件失败';

returnfalse;

}else{

returnltrim(str_replace(ROOT,'',$path),'/');

}

}图4-13文件上传函数生成目录文件夹,指定到对应的文件夹下面。最后指定对应的创建文件的权限。这个在windows系统下没有什么作用,但是在linux下面,是十分重要的。如果没有对应的权限,是不能对文件夹进行操作的。如图4-14所示:protectedfunctionmk_dir(){

$path=ROOT.'/data/images/'.date('Ymd',time());

if(is_dir($path)){

return$path;

}

returnmkdir($path,'0777',true)?$path:false;

}图4-14创建文件夹生成随机文件名用rand函数,随机生成序列数,以时间日期为前缀。可以在性能上最大减少冲突。随机生成文件名函数如图4-15所示:protectedfunctionrandName(){

returndate('md',time()).rand(100000,999999);

}图4-15生成随机文件名函数检验文件大小,判断文件的大小。是否符合上传要求。具体实现如图4-16所示:protectedfunctioncheckSize(){

if($this->maxSize<=0){

returntrue;

}

return$this->maxSize*1024*1024>=$this->info['size'];

}图4-16检验文件大小4.3.2会员管理模块会员管理模块,跟栏目模块相类似。也都是增删改查,基本的流程也都是相似。其中分页功能,在网站中,很多地方都会要用到页面分页这个功能。因此将这功能页面单独写作一个工具类,保存在helper文件夹中在做页面分页的过程中。主要是获取所有数据库信息的条数。然后分页页面要展示的数目,一次取多少条数据。然后可以通过总的数据库数据条数除每一页需要的显示的条目向上取整。可以得出取得页数,然后根据页数。通过id=N来计算当前页具体获取数据库里面的具体的那些数据。往前往后取多少条数据,offset参数来做标识。通过url来传值,通过解析url的id等于多少,在确定在数据库里面信息取多少。在界面里面,就是一个超链接地址,通过地址键入不同的url的值来获取不同的页数信息。4.3.3订单管理模块 订单模块也是跟前面,栏目管理模块相类似。就是后台管理员对产生的订单情况进行查看,修改等。所以关键代码跟前面栏目管理相似,可以直接复用栏目管理的思,代码做微小的改变即可实现。这是MVC模式开发的优势,对相似的功能的代码可以实现复用。4.4

前台模块的设计其实前台模块的设计开发是由一些列的小模块组成起来的。前台模块就是一个大的合集。像前台页面一些基本功能的实现,其实由一个小小的功能模块组成。而最主要的模块,就是商品展示模块。4.4.1会员注册登陆模块这个是任何交互性网站必备的功能,会员的注册登录。登陆时一个网站基本的功能。在设计注册登陆模块时候,一般都会使用到js技术,对用户属于的数据先进行一个合法性的验证。如果验证通过则去调用后台的数据库连接,否则直接返回到原页面。这样可以减少因粗心或者恶意灌水的存在。最关键可以减少服务器的开销,而且一般密码的存放都是采用的加密,而不是直接采取明文存取。这里就采取简单的md5加密,在usermodel中对写入登陆、注册、以及密码加密的方法。这里密码加密虽然采用的是md5加密,可以直接在录入数据库的时候对数据直接进行md5加密,但是有时候如果采用其他的加密算法,这样更改加密算法更加的便捷。即做到代码可复用性更强,关键实现图如下:用户登录验证方法,从前端view页面获取的用户名跟密码,传过来后调用封装的验证函数进行验证。其中密码也要通过一次相同的加密方法才能进行比对。为了保证的安全性,应该对密码进行加密。加密实现如图4-17所示:publicfunctioncheck($u,$p=''){

if($p){

$sql="selectuser_id,username,emailfromuserwhereusername='".$u."'andpwd='".$this->encPass($p)."'";

return$this->db->getRow($sql);

}else{

$sql="selectcount(*)fromuserwhereusername='".$u."'";

return$this->db->getOne($sql);

}

}图4-17用户登录验证密码进行MD5加密的方法,这里采用的md5加密,可以其实可以直接用md5函数,不用单独写一个方法。但是单独写一个方法,可以方便日后如果采用其他的加密方式,更改起来更灵活。减少一个日后不必要的麻烦跟开销。图如4-18所示:

protectedfunctionencPass($str){

returnmd5($str);

}

图4-18密码加密函数其中在view层的注册登陆时候,直接写了一个js简单的register函数方法验证。防止空白用户跟密码等一些不合法的情况的输入,比如在注册时候,先检验一下用户是否两次输入的密码相同。而登陆的时候也是同样的道理验证。4.4.2会员注册登陆模块导航是一个网站必备的,而导航最常见跟经典的就是面包屑导航.关于面包屑导航,就是关于子节点找父节点的方法,采取递归调用便可以实现。而这个是作为商品栏目分类中一部分存在。具体controller层实现如图4-19所示://根据栏目cat_id寻找家谱树

publicfunctionfamilyTree($arr,$cat_id){

static$list=array();

foreach($arras$v){

if($v['cat_id']==$cat_id){

$this->familyTree($arr,$v['parent_id']);

$list[]=$v;

}

}

return$list;

}图4-19寻找家谱树函数4.4.3商品展示模块商品展示模块,包括畅销、推荐、新品这个三个模块其实相当于一个模块,因为基本的底层代码都差不多。这个页面也可以算作是一个商品展示页面,在数据表的设计过程中,设置标记位,通过标记位来识别商品的属性是否为畅销,推荐或者新品。这个是功能模块式属于商品模块中的一部分。(因为view模板中,是设置好的数目已达到页面的美观的效果,这个可以自由的更改取出的数据条数。)

商品展示页面,将商品的详细信息都给展示出来。即把从数据库获取出来的的商品详细数据根据需要都给展示出来。在点击商品图片时候进入商品详

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论