admin 管理员组

文章数量: 887021


2023年12月18日发(作者:电脑网页出现error怎么解决)

毕业设计(论文)

题目

基于php的购物网站设计与实现

系 名

专班姓学指系导主老业

信息工程学院

计算机网络技术

年 月 日

摘 要

随着Internet的兴起,网上购物已然成为当今社会一种潮流。网上购物相比传统购物的更加便捷的优势,加上如今配套物流的建设,网上支付技术的完善。使得消费者能够做到足不出户,即可享受到安全便捷的购物过程。因而越来越多的人开始在网上购物。也促使越来越多的商家在网络中开商店。但跟网络技术的飞速发展形成鲜明比对的是直接从事相关 Business people对互联网相关技术的有限掌握程度,特别是一些中小规模的商家,他们会从中发现在互联网上购物的人远远比在实体店中购物的人还要多。因此开发网上商城购物系统就应运而生。

购物系统,采用经典的PHP+MySQL+Apache黄金组合开发。严格基于MVC开发思想,做到数据与页面显示层分离,从细节着手,在实现网上购物需要的功能之外,尽量从消费者角度出发,最终达到界面美观友好。使用者操作便捷。商家也更加容易使用,实现系统的易用性。

关键词:网上购物;MVC开发模式;PHP开发;网上支付

目 录

第一章 绪论........................................................ 1

1.1 开发背景 ................................................... 1

1.2 国内网上购物发展状况 ....................................... 2

第二章 相关介绍.................................................... 4

2.1 PHP语言介绍 ................................................ 4

2.2 MYSQL技术介绍 .............................................. 4

2.3 MVC开发模式和思想 .......................................... 5

第三章 系统需要分析................................................ 7

3.1系统可行性分析 .............................................. 7

3.2功能需求分析 ................................................ 8

第四章 详细设计与实现.............................................. 9

4.1整体框架的布置和搭建 ........................................ 9

4.2数据库的设计 ............................................... 16

4.2.1商品信息表goods .......................................... 16

4.2.2商品栏目信息表category ................................... 17

4.2.3会员信息表user ........................................... 18

4.2.4订单信息表order_info ..................................... 18

4.2.5订单商品关联表order_goods ................................ 18

4.3 后台模块的设计 ............................................ 19

4.3.1商品管理模块 ............................................. 19

4.3.2 会员管理模块 ............................................. 21

4.3.3订单管理模块 ............................................. 22

4.4 前台模块的设计 ............................................ 22

4.4.1会员注册登陆模块 ......................................... 22

4.4.2会员注册登陆模块 ......................................... 23

4.4.3商品展示模块 ............................................. 24

4.4.4商品栏目模块 ............................................. 24

4.4.5购物车模块 ............................................... 25

第五章 结论....................................................... 26

参考文献........................................................... 27

致 谢............................................................. 28

第一章 绪论

在这个信息时代,信息技术的不断发展和Internet互联网技术的日益普及,网络已经成为人们日常学习生活中重要的一部分。浏览信息,享受服务,享受高科技带来的便利的同时人们越来越意识到网上购物给企业商家和个人生活所带来的巨大影响。而作为网络服务主流的网上购物更是具有开发潜力。他们都会将成为年轻人依赖的一个功能

1.1 开发背景

网络购物就是消费者通过网络实现购物的过程。其主要特点是商家与顾客互不见面,通过网络使商品信息和钱款以电子的形式在网络上进行传播交易。所以,网络购物具有以下特点:商品的信息更加深进全面、减少了商品的销售本钱、节约了消费者的时间和体力、消除了消费者与商家的面对面冲突、降低了商户的经营本钱等等,充分体现了网络购物的方便快捷、低本钱的特点。如今随着互联网的普及,网络购物的优点变得更加突出,也就日益成为一种重要的购物形式,网络购物也越来越成为一种趋势。对于商家来说,由于网上销售没有库存压力,不受时间点的限制,不受恶劣天气的影响,经营成本低,经营规模不受场地限制-没有地域限制,在将来会有更多的企业选择网上销售,通过互联网对市场信息的及时反馈来调整经营的方式和物品来吸引更多的人来光顾,以此提高企业的经济效益和参与国际竞争的能力。而对于整个市场经济来说这种新型的购物模式也可在更大的范围、更多的层面以更高的效率实现资源配置。网上购物突破了传统商务的障碍,无论对消费者、购物网站企业还是市场都有着巨大的吸引力和影响力,在新经济时期无疑是达到“多赢”效果的理想模式。对于有着要求越来越高的消费者来说这无疑是一种简单方便的购物方式,加上现在的网络越来越发达,商家还会在这些基础上增加更多的东西来吸引顾客,达到真正的利益最大化。这就是真正意义上的市场推动力。

一项针对中国中小企业的情况调查显示,启动实体的销售公司的平均费用至少5万元,而投资开网建店成本非常小。筹办一家网上的商店投入很小,因为不用去办营业执照,不用去租门面,不用囤积货品;而且网上商店比同等规模的地面商店“租金”要低得多,同时租金不会因为营业面积的增加而增加,商家也不用为延长营业时间而增加额外的费用。并且基本不需要占压资金。一般的传统商店的进货资金少则几千元,多则数万元,而网上商店则基本不需要压资金。可以做到24小时营业时间。即做到了网上商店延长了商店的营业时间,可以做到一天24小时、一年365天不停地运作,无须专人值班看守,都可照常1

营业。传统店铺的营业时间一般为早上8时到晚上11时,遇上坏天气、员工有急事或者其他一些意外情况也不得不暂停营业休息。销售规模不受地域跟地盘限制。传统商店店面的规模直接决定了能够摆放多少商品,生意大小常常被小店面积限制。而如果是在网上商城的话,即便在地面上只有一个小商店或者甚至没有门店也没问题,开店的生意却可以照样做得很大。不受店面空间的限制。哪怕只是小店,在网上商城系统却可以拥如同拥有百货大楼那么大的店面,可以摆上千万种商品。一般同时在线的商品只要超过10万件就已超过一些大超市。不受地理位置影响。不管客户商家有多远,也不论顾客是在国内还是国外,在网上购物商城里面,客户一样可以很方便地找到并购买商品。这令消费群体突破了地域的限制,变得购物无限广阔了。

而与日益飞速发展的信息技术之形成鲜明对比的是,从事相关商务活动的人群对相关技术有限的掌握程度。特别一些中小型企业更加如此。如今电子商务如火如荼的发展,但是大多数都是像淘宝,阿里巴巴等这种大型专门做电子商务的平台。而很少有这种为中小型企业单独开发的独立的购物系统。而这些中小型公司没有充分的资金跟精力去开发一个相关的网上购物平台。因此开发一个实用中小型的网上购物系统是很重要的。特别是一些新兴的创业型公司。所以开发一个在线网上购物系统平台是有必要的,在结合线下跟线上两条线,既可以提高自己的品牌知名度,又可以提高经济效益。能够带来直接的经济效益是所有企业所期望的。该系统在功能上基本实现一个网上商店的功能应用。有自己实体店的商家,拥有一个属于自己的网上购物商城也是现在时代的趋势跟顺应潮流。扩大自己的社会影响力跟知名度,在这个互联网时代,信息的发布跟交流时很有必要并且十分重要。

1.2 国内网上购物发展状况

中国网购发展速度非常快,2012年统计数据网购占社会商品零售总格的比重从0.34%升至4.32%。中国网购发展如此之快,西方很难想象。中国网购迅速发展的一个重要原因是商业业态没有西方国家发达,网购利用中国正在工业化、城镇化的机会有了一个巨大的发展空间。网购正在改变着人们的生活、消费的方式,这样对物质文化生活的提高,促进整个国家用消费来拉动经济会起到很大的作用。

在网络购物的过程中,通过人与电子通讯方式的结合,极大地提高了网上购物的活动的效率,减少了不必要的中间环节。同时,网上购物过程产生的网上支付行为的发展也将转变政府的行为。在网络购物逐渐变的流行的时代里,当企业应用网络购物商城进行经营,银行实现金融电子化,以及消费者实现网2

上消费的同时,也将对政府管理行为提出新的要求,国外在这方面有很好的法律法规加以约束,防止商业欺诈行为。但是国内在这方面做的就没有国外的好,没有一定的规范加以约束,我们经常可以看到一些消费者在网上购买的东西和实际不一样,发现上当后我们也无能为力。

在国内有很多大型的电子商务公司,像淘宝B2C商务平台、阿里巴巴就是专门提供B2B商务平台、还有一些像京东主要以卖图书为主、聚美优品新起的以卖化妆品为主的电子商务公司。现在国内的网购的发展,越来越朝着细分市场发展。这也是未来电子商务发展的方向-细分市场。以及催生一系列网上支付中介公司。像易宝支付,支付宝等等。在一定程度上保证了网上购物的支付的安全性。所以在网络购物这片领域发展的越来越成熟的环境中,网络购物是具有巨大未来市场潜力的。总而言之,网络购物是一种不可阻挡的趋势跟潮流这是现在人们统一的认识。

3

第二章 相关介绍

2.1 PHP语言介绍

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.2 MYSQL技术介绍

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将全部的数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。使用于中,小型网站. 由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其免费版的性能卓越,搭配PHP和Apache可组成良好的开发环境。而下面我们要搭建的Web测试环境就是利用MySQL+PHP+Apache这组黄金搭档。这里采用图形化界面的MyphpAdmin来操作SQL数据库。所以具有更加灵活跟便捷,直观的优势。增加开发效率,跟传统的命令控制台相比-这明显提高界面对开发者更加友好程度,使得维护数据库更加容易直观。

4

2.3 MVC开发模式和思想

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。

视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。

业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型应该会对应多个视图,一个视图应该会对应多个模型。模型、视图与控制器的分离,使得一个模型可以多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应该会反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上5

是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能。此次系统的开发,都将严格基于MVC模式思想进行开发。

6

第三章 系统需要分析

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的模板。以7

便开发简单且适合小型公司的网店,独立区分于茫茫大潮中的淘宝店中。所带来的效益远远大于系统软件的开发成本。在经济上完全可行。

最后是社会可行性。电子商务网站是该企业运用Internet技术创造更多更高的经济效益的主要因素之一。对于网上销售尤为如此,所以本系统的效益是要可观的。是可行的。可以做到扩大自身的影响力,如今具有自己独立的网站网店是一种趋势,也是一种商家本身实力的象征。能够在搜索引擎中获得自己的排名是一种非常有效的广告手段。

3.2功能需求分析

根据分析,为了较好的实现网上购物网站,系统应该实现如下基本功能如表3-2所示:

表3-2网站大概功能需求表

功能模块

后台管理方面(Back-stage

management )

管理网站用户(Manage website users)

用户管理方面(User management)

用户订购方面(User orders)

实现功能

商品分类管理、添加与修改商品、管理订单、商品留言管理等功能

用户管理、后台管理员管理等功能

用户注册、验证码登陆、资料修改等功能

在线订购、在线支付、购物车、查看订单、信息反馈等功能

商品展示方面(Commodity display) 二级分类展示、首页精品推荐、新品发布、销售排行

网站购物信息方面(Shopping

information)

首页功能方面(Home Page Function) 导航功能、友情链接等功能

汇款方式、送货方式、定购方式等功能

8

第四章 详细设计与实现

4.1整体框架的布置和搭建

系统采用了MVC开发模式的思想,对整个系统分成了3个大模块:前台的view层、数据库Model层、业务逻辑层Controller层。又对各个模块又进行了一步的细分,如前台view层模块又分前台跟后台模块;前台主要包括会员注册、商品选购、购物车、商品结算、商品订购反馈、新品、热销。后台主要包括会员管理,订单管理,商品管理,商品栏目管理。Model层则采用严格封装;使得系统具有易用性、个性化、跨平台等特点,代码的复用性;使其运行得高速、安全、稳定。

首先搭建基本的框架,框架首先必须具备的条件如下表4.1所示:

表4-1框架基本要素表

框架的基本要求/要素

配置文件和配置文件读取的功能

良好的数据库处理

良好的目录结构

正确的路径结构

作用

灵活读取更改数据库信

底层基本数据的增删改查

开发者便于开发

便于网站的移植

具体配置文件和配置文件读取的功能文件

几乎所有的文件都应该要连接数据库,所以一般将这个文件单独写到一个底层文件中,然后通过初始化文件,引入包含进去。基本配置文件代码如下:

网站的配置文件,将数据库信息作为一个数组保存。包括基本的连接密码、数据库名、编码格式(一般都是设置成utf8编码)等。

$_cfg['user'] = 'root';

$_cfg['pwd'] = 'tangpanpan314';

$_cfg['db'] = 'shop';

$_cfg['char'] = 'utf8';

图4-1 网站数据库配置信息

良好的数据操作,应该是有日志记录。所以在配置文件信息里面加入判断日志记录是否开启字段,以方便管理员管理。$_cfg['debug']=true;

9

通过读取网站配置文件来读取和更改网站的配置信息。代码如下:配置文件的读取类用来读取,并能返回某个配置选项的值,在配置读取类文件中,一般都是采取单例模式,减少不必要的重复多次反复生成连接对象开销。读取网站配置文件图4-2所示:

class conf {

private static $ins = false;

private $info = array();

final protected function __construct() {

require(ROOT.'includes/');

$this->info = $_cfg;

}

final protected function __clone() {

}

获得一个单例

public static function getIns() {

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

self::$ins = new self();

}

return self::$ins;

}

读取获得配置的网站信息

public function __get($key) {

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

return $this->info[$key];

10

} else {

return null;

}

}

图4-2 读取网站配置信息

数据库底层的基本都离不开的是增删改查,所以把这些sql语句全部封装到底层的sql类中。取得一行数据,取得所有数据,并且做一个简单的日志记录也是必要的。代码如下:文件

数据库处理类,灵活的数据库底层封装类,应该首先具备的公共易用性、灵活性等功能。所以数据底层处理类,必须封装数据库连接、数据库的选择、数据库语言执行、获取数据执行后返回对象、最后还必须具有错误提示功能。

数据库的连接功能图如下:通过数据配置文件读取相对应的信息值,连接如果不成功,返回对应不成功信息。连接数据库图4-3所示:

protected function connect() {

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

if(!$this->conn) {

$err = new Exception('连接失败');

throw $err;

}

}

图4-3 读取网站配置信息

选择数据库,这是底层封装类必备的灵活性。通过拼接sql语句,来更改引用的数据库。选择数据库图4-4所示:

protected function select_db($dbname='') {

if($dbname == '') {

11

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

$this->query($sql);

}

}

图4-4 选择连接数据库

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

protected function setChar() {

$sql = 'set names ' . $this->conf->char;

return $this->query($sql);

}

图4-5 数据库设置字符编码

Sql语言的执行函数,先判断配置文件里面的日志记录是否开启,如果开启则记录对应的sql语言操作。如果执行sql语句出错,则报错,并且记录错误信息日志。记录日志如图4-6所示:

public function query($sql) {

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

$this->log($sql);

}

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

if(!$rs){

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

}

12

return $rs;

}

}

图4-6 记录日志

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

public function getAll($sql) {

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

$list = array();

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

$list[] = $row;

}

return $list;

}

public function getRow($sql) {

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

return mysql_fetch_assoc($rs); }

图4-7 获取sql返回值

封装受影响的行数函数,在有时候判断sql语句是否执行成功很重要的判断依据。返回影响行数的函数,如图4-8所示:

public function affected_rows() {

return mysql_affected_rows($this->conn);

}

13

图4-8 返回受影响的行数

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

public function log($sql){

$log = ROOT.'data/';

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."rn");

fclose($fh);

}

}

图4-9 日志记录函数

上面底层的封装的sql类,集合了常用的连接数据库功能,还包括基础的数据库的执行操作。并且做一个日志记录sql语句操作功能。

良好的目录结构

14

将底层文件分别新建model文件,里面保存model模型类。Includes文件夹,里面包含网站所需的运行配置文件。再新建一个helper文件夹,里面保存一些可能会重复用到常用功能代码文件。比如像图片水印效果,分页等功能。

正确的路径结构

因为网站发布可能在未知的环境下进行,所以网站文件的引用最好采用相对路径的引用。在初始化文件中对此首先定义好,对网站的根目录定义成一个常量ROOT。网站的初始化文件,负责计算当前网站的根目录,负责引入所有页面都需要的引入的公共文件。文件如下图4-10所示:

define('ROOT',str_replace('','/',str_replace('','',__FILE__)));

include(ROOT . 'includes/');

include(ROOT . 'includes/');

include(ROOT . 'includes/lib_');

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里面配置虚拟主机的时候会15

标识。最后都是通过虚拟主机来访问网站。)通过基本的连接,将路径都走通。然后再对系统的主界面进行设计。模板中有用的模块能够用得上的,先设置好。再对自己将要开发的模块进行设计。采用”先死后活”的方法,先写成静态的Html页面,然后再对各个部分要实现的功能进行实现动态化。

4.2数据库的设计

在这个系统的过程中,需要会员登录注册,所以需要一张会员表。购物系统,必不可少是购物消费者跟商品打交道,商品表少不了。然后商品的栏目表,是作为关联商品的独立之外的表。然后购物必不可少的产生订单表,跟订单表关联的是订单商品信息表。基本简单这六张表,就可以实现一个简单购物商城系统所需的功能。

4.2.1商品信息表goods

商品信息如下表4-2:

表4-2 商品信息

名称

商品主键

数据库字段

goods_id

作用

商品唯一的标记 id定位不同的商品

商品货号 goods_sn 商店通过不同的货号来区分不同的商品

栏目id

商品名

cat_id

goods_name

商品都是属于不同商品栏目

商品名是给顾客最直观的名称

本店价格

市场价格

shop_price

market_price

商品价格是商品属性必备值

这是突出自己跟市场的差异体现自己的价格上的优势

库存量 goods_number 在交易的过程中 先得看看库存里面是否还有货

商品重量

简短描述

商品描述

小图片

goods_weight

goods_brief

goods_desc text

thumb_img

16

在选择物流时候的收费标准

简短描述

包含商品所有属性

首页展示的小图

大图片 goods_img 商家上传的原始图片作为以后的凭证

原始图片 ori_img 商家上传的原始图片作为以后的凭证

是否上架

是否删除

is_on_sale

is_delete

缺货或者下架时候的标记位

在商品删除的时候一般不作物理上的删除 只做一个标记位

是否精品 is_best 在前台展示确认精品的标记位

是否新品

是否热卖

is_new

is_hot

新品的标记位

热卖标记位 方便管理者设置热卖商品

发布时间

上次修改

add_time

last_update

发布商品的时间

商家管理查看更新时间

4.2.2商品栏目信息表category

Cat_id 栏目id 、Cat_name 栏目名称、 Parent_id 栏目所属父目录 。在商品面包屑导航过程中,这个极为重要。通过递归调用,查找父节点。

具体实现的Sql语句如下图4-11所示:

create table category (cat_id smallint unsigned primary key

auto_increment,

cat_name varchar(10) not null default '',

parent_id smallint unsigned not null default 0)

图4-11 商品栏目生成sql代码

17

4.2.3会员信息表user

用户id、用户密码passwd、用户名username、用户邮箱email。会员表,应该以简洁为主,过于冗杂的注册项目,会直接降低用户的好感度,导致潜在用户的流失。所以简单的以用户名,密码,注册邮箱为主。

4.2.4订单信息表order_info

订单表跟订单关联表,先要了解订单表形成的流程跟两张表之间的关联。其形成的基本要素表如下表4-3所示:

表4-3 订单表基本要素图

Order_id 姓名 手机 地址 电话 送货时间

3 Xx Xx Xxx X Xxx

配送方式

Xx

支付方式

X

但是仅有以上信息还不够,还必须记录相关的商品信息。订单商品关联表如

表4-4 订单表基本要素图

Order_id

3

3

3

Goods_id

4

5

9

Rec_id

Subtotal

4.2.5订单商品关联表order_goods

具体实现订单商品管理sql如图4-12所示:

create table order_goods (

rec_id int unsigned primary key auto_increment,

order_id int unsigned not null default 0,

goods_id int unsigned not null default 0,

18

goods_name varchar(30) not null default '',

num smallint unsigned not null default 1,

price decimal(9,2) not null default 0.00,

subtotal decimal(9,2) not null default 0.00,

图4-12 订单商品管理表sql语句

4.3 后台模块的设计

后台管理模块的设计,最重要的就是商品的增删改查功能。其他会员管理,订单管理,栏目表的管理。都是简单的一个增删改的语句就可以实现。而在商品管理中,必须涉及到图片的上传,图片的缩放等功能。形成缩略图,是商品上传必须解决的问题。在后台模块中,涉及到列表问题时候,就离不开分页功能小模块。而且不论是前台,还是后台。只要涉及到列表展示的时候,必须会涉及到分页功能。因此分页功能可以单独做一个modle层模块。

4.3.1商品管理模块

商品管理,包括商品的增删改查,但是商品管理中,有一个要注意的地方,就是图片的上传,还包括图片的水印,统一大小的图的前台展示。所以图片的上传跟水印是这部分的难点。其中还包括商品序列号的不重复自动生成功能。

大致思路如下:

1:接收POST数据

判断商品名为空,货号是否为空,栏目是否选中

2:把收到的POST的形成数组, 数组的键名与字段一一匹配

3:调用model的相关方法,插入商品信息

上传商品图片,new一个上传类封装对象。

$upfile = new upfile(2,'jpeg,jpg,gif,png,bmp');

$data['ori_img'] =$upfile->up('ori_img'); // 路径或false

19

生成缩略图,因为在商品展示中,为了统一美观的效果,一般都是生成统一大小的缩略图。在展示的时候,展示出来。

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 = '移动文件失败';

return false;

} else {

return ltrim(str_replace(ROOT,'',$path),'/');

}

}

图4-13 文件上传函数

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

protected function mk_dir() {

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

if(is_dir($path)) {

20

return $path;

}

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

}

图4-14 创建文件夹

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

protected function randName() {

return date('md',time()) . rand(100000,999999);

}

图4-15 生成随机文件名函数

检验文件大小,判断文件的大小。是否符合上传要求。具体实现如图4-16所示:

protected function checkSize() {

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

return true;

}

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

图4-16 检验文件大小

4.3.2 会员管理模块

会员管理模块,跟栏目模块相类似。也都是增删改查,基本的流程也都是相似。其中分页功能,在网站中,很多地方都会要用到页面分页这个功能。因此将这功能页面单独写作一个工具类,保存在helper文件夹中在做页面分页的过程中。主要是获取所有数据库信息的条数。然后分页页面要展示的数目,一次取多少条数据。然后可以通过总的数据库数据条数除每一页需要的显示的条21

目向上取整。可以得出取得页数,然后根据页数。通过id=N来计算当前页具体获取数据库里面的具体的那些数据。往前往后取多少条数据,offset参数来做标识。通过url来传值,通过解析url的id等于多少,在确定在数据库里面信息取多少。在界面里面,就是一个超链接地址,通过地址键入不同的url的值来获取不同的页数信息。

4.3.3订单管理模块

订单模块也是跟前面,栏目管理模块相类似。就是后台管理员对产生的订单情况进行查看,修改等。所以关键代码跟前面栏目管理相似,可以直接复用栏目管理的思,代码做微小的改变即可实现。这是MVC模式开发的优势,对相似的功能的代码可以实现复用。

4.4 前台模块的设计

其实前台模块的设计开发是由一些列的小模块组成起来的。前台模块就是一个大的合集。像前台页面一些基本功能的实现,其实由一个小小的功能模块组成。而最主要的模块,就是商品展示模块。

4.4.1会员注册登陆模块

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

public function check($u,$p='') {

if($p) {

$sql = "select user_id,username,email from

22

user where username = '" . $u . "' and pwd = '" . $this->encPass($p) . "'";

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

} else {

$sql = "select count(*) from user where

username = '" . $u ."'";

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

}

}

图4-17 用户登录验证

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

protected function encPass($str) {

return md5($str);

}

图4-18 密码加密函数

其中在view层的注册登陆时候,直接写了一个js简单的register函数方法验证。防止空白用户跟密码等一些不合法的情况的输入,比如在注册时候,先检验一下用户是否两次输入的密码相同。而登陆的时候也是同样的道理验证。

4.4.2会员注册登陆模块

导航是一个网站必备的,而导航最常见跟经典的就是面包屑导航.关于面包屑导航,就是关于子节点找父节点的方法,采取递归调用便可以实现。而这个是作为商品栏目分类中一部分存在。具体controller层实现如图4-19所示:

23

//根据栏目cat_id寻找家谱树

public function familyTree($arr,$cat_id) {

static $list = array();

foreach($arr as $v) {

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

$v['parent_id']);

$list[] = $v;

}

}

return $list;

}

图4-19 寻找家谱树函数

$this->familyTree($arr,4.4.3商品展示模块

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

商品展示页面,将商品的详细信息都给展示出来。即把从数据库获取出来的的商品详细数据根据需要都给展示出来。在点击商品图片时候进入商品详细信息,商品的描述,属性等功能。即从数据库读取商品所有的属性列值,在展示商品的时候,添加了一些js效果,使得看起来更美观。

4.4.4商品栏目模块

这个是开发过程中一个必要的模块,不同的型号的商品可能属于同一个类别下面,更便于使用者操作。而且在开发过程中,在foreach循环展示数据的时24

候,也是采用递归调用的办法。得注意父子节点之间的关系,实现如图4-20所示:

public function catSort($arr,$pid=0,$lev=0) {

foreach($arr as $v) {

if($v['parent_id'] == $pid) {

$v['lev'] = $lev;

$this->cateList[] = $v;

$this->catSort($arr,$v['cat_id'],$lev+1);

}

}

}

图4-20 递归找子孙数函数

4.4.5购物车模块

这是一个购物网站必备的功能,购物车展示。同时计算购物车里面的价格。购物车实际上是一个订单表的形成,临时对顾客选购的商品进行保存。购物车的处理流程就是提交到订单,其实关键是里面订单表的设计,订单表跟货物关联表之间的关系设计。购物车作为单独的一个模块,购物车要实现购物车里面商品的增删改查功能。购物车添加商品,其实是通过url地址栏中id来确定传入的商品信息。而购物车,相当于一个session文件。

25

第五章 结 论

经过几个星期的努力完成这个实验,我非常珍惜,在整个做的过程中,我经常与老师,同学交流做的经验和想法,还结合了书上的一些知识,以及查找了网上的资料完成这个实验,让我受益匪浅。做完这个实验让我更加的对原有的知识上学到了更多,对专业的知识有了更加深一层的了解,还有许多东西需要我学习。

这个网站主要是网上购物,MVC开发模式,PHP开发,网上支付等,开发的过程中,对编辑语言的概念和使用有了更深的认识,使我在这个方面了解到网络的无尽,扩大了自己的知识面,网页最主要的功能就是给每个上网者提供一种形式,让他们能够了解网站提供的信息。需要站在打开网址的人们角度思想,如果他们一打开就看见不美观不简便用的时候他们就会立刻关闭网址,所以在做网站的时候需要把各种因素思想进去,听取别人的建议和想法,尽量把网站做的更好。

在做这次网站设计之前,我对网站设计懂得的专业知识不多,但是通过此次的设计,我学了很多关于网站设计的知识。虽然对于网站的设计有所欠缺,但是还是做完的那一瞬间还是挺开心和兴奋的,我相信此次的设计在今后的工作岗位上不可或缺的一份经验。

26

参考文献

[1] 朱海龙,廖媛,逄欣. 基于PHP的电子商务网站的设计与实现[J]. 信息技术与信息化,2015,(02):50-51+56.

[2] 马毓. 基于PHP的电子商务网站的设计与实现探讨[J]. 科技展望,2015,25(36):19.

[3] 李华明. 基于PHP和MySQL的网上购物系统设计与实现[D].电子科技大学,2014.

[4] 马骞. 基于PHP的电子购物商城初步设计[J]. 电子技术与软件工程,2016,(03):68.

[5] 张书月,林启德. 基于PHP技术的购物网——商品购买子系统的设计与实现[J]. 硅谷,2012,5(16):8-9.

[6] 耿倩. 基于PHP的网上购物系统的研究与设计[J]. 艺术科技,2016,29(10):104.

[7] 王娜、刘东昌:“消费者网络购物实证分析”,《零售与服务》,2009年第2期。

[8] 呈雯:“我国网络购物现状浅析”,《商业时代》,2006年第3期

[9] 徐华伟、李素芳:“对我国网络购物的思考”,《科技信息》,2008年第24版。

[10] 尹成国. 基于PHP的网上购物系统的设计与实现 [J]. 琼州学院报.2008,15(2):39-41

27

致 谢

在论文的完成过程中,是在老师的指下完成的,非常感谢老师的帮助,还有同学在旁边的教导和在网上查询过相关的信息完成了这份设计。在总体的结构上还不是做的很好,可是对于自己没有做过到完成这个设计的我来说是一件开心的事情,老师和同学在编程、数据、论文排版等给了很大的建议,对于我完成这个论文起到了关键的作用,。

感谢老师的教导,帮助我在这个论文从没什么头绪到知道怎么做再到做出来给了很多的思想指导,再次特意的感谢您的帮助,感谢同学们的帮助,让我能顺利的做完这个毕业设计论文。

28


本文标签: 商品 购物 网站 数据库 功能