基于php开发的网上商城--<个人毕业设计>

网上商城系统的设计与实现

    

随着Internet的兴起,网上购物已然成为当今社会一种潮流。网购是一种必然的趋势是现在大多数人们心中不二的共识。网上购物相比传统购物的更加便捷的优势,加上如今配套物流的建设,网上支付技术的完善。使得消费者能够做到足不出户,即可享受到安全便捷的购物过程。因而越来越多的人开始亲睐”网购”。而网上商城可以不受地域,时间,天气等因素限制。也促使越来越多的商家向电商靠拢。但跟网络技术的飞速发展形成鲜明比对的是直接从事相关商务人群对互联网相关技术的有限掌握程度,特别是一些中小规模的商家。因此开发网上商城购物系统就应运而生。

此购物系统模仿实体购物流程,分为前台跟后台开发。前台即相当于顾客,而后台相当于商家。前台所需会员登陆注册功能,在线商品浏览,分类查看商品信息,选购功能,在线支付交易,在线留言功能。后台所需基本的订单管理,会员管理功能,商品发布管理,商品栏目管理等功能。

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

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

Designand Implementation of Online Shopping Mall System                        

                               AuthorTang Pan                                                        

                                       TutorWang Hexing

Abstract

With therise of the Internet, online shopping has become a trend in today's society.Online shopping is an inevitable trend is now most people's minds Fujiconsensus. Compared to traditional shopping, online shopping more convenientadvantages, coupled with the construction now supporting logistics, onlinepayment technology improved. Allows consumers to be able to do without leavinghome, you can enjoy safe and convenient shopping process. Thus more and morepeople began to pro-gaze "online shopping." The online store can besubject to geographical, time, weather and other factors. Also prompted moreand more businesses move closer to the electricity supplier. But with the rapiddevelopment of network technology in stark comparison is directly related tothe business crowd engaged in Internet-related technologies for a limitedmastery, especially small and medium sized businesses. Therefore, thedevelopment of online shopping mall system came into being.

Thisshopping system mimics physical shopping process, divided into front withbackground development. Reception is equivalent to customers, and thebackground is equivalent to the merchant. Reception Login required registrationfunction, browsing online products, classification view merchandiseinformation, optional features, online payment transactions, online messagefunction. Background required basic order management, membership managementfunctionality, merchandise release management, commodity part management.

Shoppingsystem, using the classic PHP + MySQL + Apache Gold portfolio development.Strictly based on the MVC development thinking, so that data page display layerwas separated from the details of the set, in the realization of onlineshopping functionality required, the possible from the consumer point of view,and ultimately achieve beautiful and friendly interface. User easy operation.Businesses are also easier to use, ease of implementation system.

Key Words: Onlineshopping MVC development model PHPdeveloper

1 绪论 

1.1  开发背景以及意义

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

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

一项针对中国中小企业的情况调查显示,启动实体的销售公司的平均费用至少5万元,而投资开网建店成本非常小。筹办一家网上的商店投入很小,因为不用去办营业执照,不用去租门面,不用囤积货品;而且网上商店比同等规模的地面商店“租金”要低得多,同时租金不会因为营业面积的增加而增加,商家也不用为延长营业时间而增加额外的费用。并且基本不需要占压资金。一般的传统商店的进货资金少则几千元,多则数万元,而网上商店则基本不需要压资金。可以做到24小时营业时间。即做到了网上商店延长了商店的营业时间,可以做到一天24小时、一年365天不停地运作,无须专人值班看守,都可照常营业。传统店铺的营业时间一般为早上8时到晚上11时,遇上坏天气、员工有急事或者其他一些意外情况也不得不暂停营业休息。销售规模不受地域跟地盘限制。传统商店店面的规模直接决定了能够摆放多少商品,生意大小常常被小店面积限制。而如果是在网上商城的话,即便在地面上只有一个小商店或者甚至没有门店也没问题,开店的生意却可以照样做得很大。不受店面空间的限制。哪怕只是小店,在网上商城系统却可以拥如同拥有百货大楼那么大的店面,可以摆上千万种商品。一般同时在线的商品只要超过10万件就已超过一些大超市。不受地理位置影响。不管客户商家有多远,也不论顾客是在国内还是国外,在网上购物商城里面,客户一样可以很方便地找到并购买商品。这令消费群体突破了地域的限制,变得购物无限广阔了。

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

1.2  国内网上购物发展状况

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

在网络购物的过程中,通过人与电子通讯方式的结合,极大地提高了网上购物的活动的效率,减少了不必要的中间环节。同时,网上购物过程产生的网上支付行为的发展也将转变政府的行为。在网络购物逐渐变的流行的时代里,当企业应用网络购物商城进行经营,银行实现金融电子化,以及消费者实现网上消费的同时,也将对政府管理行为提出新的要求,国外在这方面有很好的法律法规加以约束,防止商业欺诈行为。但是国内在这方面做的就没有国外的好,没有一定的规范加以约束,我们经常可以看到一些消费者在网上购买的东西和实际不一样,发现上当后我们也无能为力。

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

1.3  论文组织结构

本文的组织结构如下:

1章绪论。主要论述了系统开发的背景以及意义。对目前国内的网络购物形势状况进行了基本介绍。阐述了网络购物给人们生活带来的便利变化,同时网购中存在的一些安全诚信问题。开发一个网上购物商城系统是有必要的,也是具备实际意义的。解决中小型商家的实际问题。

2章相关技术以及原理介绍。介绍了本系统开发过程需要用的开发工具跟一些技术。介绍相关技术的以及原理。掌握这些技术以及原理是对整个系统开发是不可缺少的前提。PHP语言就是一种特别适合开发动态网站的语言。而HTML+JS+CSS+DIVweb前端界面开发必须掌握的技能。而WEB服务器的搭建跟配置,是整个项目运行的基础。其次还介绍了易宝支付工作原理以及MySQL数据库的优势特点。其中易宝支付,网上购物中一个重中之重的环节。

3章系统需求分析。分析了本系统的可行性,简单阐述了在实际中的开发成本以及开发实现的可能性。然后对系统基本运行环境进行了说明。从实际入手,介绍系统功能需求。最后画出系统基本的框架图。

4 详细设计与实现。本章主要介绍了系统的主要功能模块。并对各个模块做了详细分析介绍。同时也阐述了系统各个功能模块流程设计跟界面展示。对主要功能段的代码进行了描述跟展示。

最后对全文进行了总结,并且对其中需要进一步完善的地方进行了说明。

 

 

 

 

 

2  相关技术以及工具介绍

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 HTML+CSS+DIV+JS前端技术的介绍

Html+css+jsweb前端技术必须会的利器组合。缺一不可,是制作动态网页必须掌握的技术。

Html即是超级文本标记语言(英文缩写:HTML)是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错部位。但需要注意的是,对于不同的浏览器,对同一标记符可能会有不完全相同的解释,因而可能能会有不同的显示效果。

Css是级联样式表(Cascading Style Sheet)简称“CSS”,通常又称为“风格样式表(Style Sheet)”,它是用来进行网页风格设计的。比如,如果想让链接字未点击时是蓝色的,当鼠标移上去后字变成红色的且有下划线,这就是一种风格。通过设立样式表,可以统一地控制HTML中各标志的显示属性。级联样式表可以使人更能有效地控制网页外观。使用级联样式表,可以扩充精确指定网页元素位置,外观以及创建特殊效果的能力。作用在客户浏览器端。

Div元素是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素。DIV的起始标签和结束标签之间的所有内容都是用来构成这个块的,其中所包含元素的特性由DIV标签的属性来控制,或者是通过使用样式表格式化这个块来进行控制。DIV标签称为区隔标记。作用:设定字、画、表格等的摆放位置。当你把文字,图象,或其他的放在 DIV 中,它可称作为“DIVblock”,或“DIVelement”或“CSS-layer”,或干脆叫“layer”。而中文我们把它称作“层次”。

特别是随着html5css3的发展,使得web页面开发又会引起新一轮的技术革新.web页面美观,布局的方面可以使得有更好的施展拳脚的空间,并且减少了很多冗杂的标签,增加了更多的媒体标签,使得web在网页布局方面有了新层次的提升。并且更注重网站的搜索效率--SEO优化.但是因为浏览器之间的区别,导致不同浏览器存在一些支持上的差异,但是html5是一种未来的趋势,浏览器也必将来适应html5的发展潮流。

Javascript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言。也是直接作用在客户浏览器端.你可以利用JavaScript轻易的做出亲切的欢迎讯息、漂亮的数字钟、有广告效果的跑马灯及简易的选举,还可以显示浏览器停留的时间。让这些特殊效果提高网页的可观性。让web网站显得更加生动。在现在得网站登陆模块开发中,一般都是采用的javascript技术,对用户输入值先做一个校验,免费空数据或者危险数据的注入,从而减轻web服务器的负载量跟提高网站的可用性跟安全性。

2.3  MYSQL技术的介绍

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

2.4  Apache服务器安装使用并配置所需项目环境

安装MySQL后,安装MyphpAdmin进行对数据库管理操作。系统中,我将myphpadmin的连接地址直接写到到了phpinfo文件中,做成一个链接地址,以供方便访问。在访问本地localhost的时候,就可以快速通过页面的链接地址定位直接进入MyphpAdmin进行测试检验。运搭建web服务器,主要是搭建一个php+Mysql的环境。用来支撑项目跑起来的运行环境。

1.先安装apache服务器,在地址栏键入127.0.0.1进行测试,测试是否安装成功。

2.安装php文件包,用来搭建php的解析环境。因为apache服务器是通过配置文件加载相对应的模块工作。需要php的时候,则需要在配置文件里面,加载对应的php动态链接文件。

现在开始将phpmodule方式与Apache相结合,使php融入Apache,具体配置代码如下:

具体的配置信息代码如下

#加载php模块

LoadModulephp5_module D:/andy/php5/php5apache2_2.dll

#指定phpini文件,该文件对php的一些配置

PHPIniDir"D:/andy/php5

AddTypeapplication/x-httpd-php .php .phtml .html

并将php.ini.deployment改成php.ini启用开发模式.

指定php的拓展库路径:

php.ini中制定拓展块路径extension_dir=~php安装路径/ext

注意事项,自动识别index.php的代码。

apacheconf文件中,找到DirectoryIndex,添加如下代码:

DirectoryIndexindex.php default.php index.htm index.html default.htm default.html 否则不能自动识别index.php

3.接下来就是整合MySQL数据库。将下载的MySQL安装软件,解压按照提示安装就可以。

在整个环境的搭建过程中,应该先遵循搭建apache服务器,然后安装配置php,最后再安装配置MySQL。按照这个严格的步骤,可以尽量减少不必要的错误跟麻烦。并且可以在配置加载phpMySQL的时候,对apache服务器工作原理更加了解。在这里,搭建服务器,并不是我们需要的重点。总之搭建成功后,出现下面的画面,表示搭建服务器环境是可用的,即成功搭建。并且写一个简单测试php环境是否可用语句进行测试,结果如下。最经典的语句就是phpphpinfo()函数.并且将其写进apache的测试页面里面。在浏览器输入:127.0.0.1或者http:localhost,回车,出现下图2.1所示:

本地图片,请重新上传

2.1 服务器搭建运行测试效果

结果成功如图2.2所示:

本地图片,请重新上传

图 2.2 phpMyadmin界面

 一般为了网站的的安全性,一般都是采用虚拟主机的办法。不论是在实际网站配置中,还是自己做测试的时候。都应该养成这个习惯。开辟虚拟主机的方法来做网站开发。在apache服务器conf/init中开启虚拟主机的模块,然后在extra/httpd-vhosts.conf文件下对虚拟主机进行配置。配置代码如下:

#网上商城项目

<VirtualHost*:80>

 ServerName shop.com

 ServerAlias www.shop.com

 DocumentRoot"D:/andy/apache/htdocs/shop"

 DirectoryIndex index.php index.html

<Directory/>

 Options FollowSymLinks

 AllowOverride All

 Order DenyAllow

 Allow from all

</Directory>

</VirtualHost>

然后配置本地的hosts文件,添加进一句代码127.0.0.1 www.shop.com即将域名解析到本地需要的地址上面。这样一来就可以在地址栏中输入www.shop.com测试结果如下图2.3所示:

本地图片,请重新上传

图 2.3 访问虚拟主机

 

2.5  易宝支付工作原理

易宝支付是中国领先的独立第三方支付平台,其最大的特点,是实现了银行信用卡还款到账功能。易扩展的支付、易保障的支付、易接入的支付。由于用户的重要数据只存储在用户开户银行的后台系统中,任何第三方无法窃取,因此为用户提供了充分保障。从接入易宝支付到使用商家管理系统,无需商家任何开发,零门槛自助式接入,流程简单易学、即接即用。凡是成为易宝支付的客户,都可以自动成为易宝支付财富俱乐部的会员,享受易宝支付提供的各种增值服务、互动营销推广以及各种丰富多彩的线下活动,拓展商务合作关系,发展商业合作伙伴,达到多赢的目的。

其开发的接口,供第三方商家使用,从而避免了商家直接与银行接口打交道的麻烦。易宝支付直接做好各个银行的接口,提供专门开放的接口给商家使用,并且提供特定的商家id跟唯一的相配密钥以保障安全。省去了商家跟不同银行打交道的麻烦,商家可以不用知道如何跟银行对接,只需要跟易宝支付提供的接口对接就可以完成网上电子支付转账的功能。接口工作原理大概如下图2.4所示:

本地图片,请重新上传

 2.4 易宝支付工作原理

 

2.6  MVC开发模式和思想

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

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

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

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

此次系统的开发,都将严格基于MVC模式思想进行开发。


3  系统需求分析

3.1  系统可行性分析

本系统拟采用PHPMySQL分别作为开发语言和数据库。使用免费的Apache服务器作为web服务器,分别采用ZendStudio作为集成开发工具跟phpMyadmin作为数据库的管理工具。

首先,技术可行性。本系统仅需要一台配置好php+mysqlapache服务器环境软件的计算机即可,对机器本身没有太高的要求,一般当前个人电脑完全可满足要求。对软件技术要求,由于系统本身采用MVC三层模式开发,所以前台view层页面,可以不用完全自己开发,从网上参考有价值的template模板作为合适的view层即可。主要自己来开发后台跟的Model层跟Controller业务逻辑层。

本地计算机硬件环境以及软件环境如下表3.1所示:

 3.1  本地环境配置列表

本地计算机的配置

详细配置信息

处理器

酷睿双核

内存

2G

硬件空间

320GB

开发环境

Widows7系统

数据库

MySQL

编程语言

PHP5.2

服务器

Apache2.2

其次,经济可行性。由于本系统是完全采用免费的黄金组合搭档php+mysql+apache。都是免费的,而且前台框架是viewECshop的模板。以便开发简单且适合小型公司的网店,独立区分于茫茫大潮中的淘宝店中。所带来的效益远远大于系统软件的开发成本。在经济上完全可行。

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

3.2  功能需求分析

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

                      3.2   网站大概功能需求表

功能模块

实现功能

后台管理方面

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

管理网站用户

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

用户管理方面

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

用户订购方面

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

商品展示方面

二级分类展示、首页精品推荐、新品发布、销售排行

网站购物信息方面

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

首页功能方面

导航功能、友情链接等功能

3.3  系统大概功能模块框架图

网站前台基本的功能框架图。包括用户注册,登陆,商品浏览选购,添加商品到购物车,并且在添加到购物车里面时候可以进行相关操作,对购物车商品进行在线支付,确认购买商品并进行支付功能,购买完成后对商品进行评价反馈功能。个人相关信息修改功能。框架图如下图3.1所示:

 SHAPE  \* MERGEFORMAT

修改个人信息

模块

 

用户

注册模块

 

商品展示模块

 

 

用户登录

 

 

对购物车里面商品进行操作,最后提交生成订单

 

服务器

数据库

浏览器

本地图片,请重新上传

 

3.1 前台基本框架

后台基本框架图,后台就是对订单进行管理,会员信息进行管理,最主要的就是对商品进行添加删除操作,商品栏目的管理与更新。框架图如图3.2所示:

 SHAPE  \* MERGEFORMAT

 

后台登陆成功

 

会员管理

商品分类栏目管理/

商品管理

 

订单管理

本地图片,请重新上传

 

 3.2 后台基本框架

 

 

 

 

4  详细设计与实现

4.1  整体框架的布置和搭建

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

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

4.1  框架基本要素表

框架的基本要求/要素                                作用

配置文件和配置文件读取的功能                       灵活读取更改数据库信息

良好的数据库处理类                                 底层基本数据的增删改查

良好的目录结构                                     开发者便于开发

正确的路径结构                                     便于网站的移植

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

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

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

代码清单4.1 网站数据库配置信息

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

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

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

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

 

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

$_cfg['debug']=true;

通过读取网站配置文件conf.class.php来读取和更改网站的配置信息。代码如下:

配置文件的读取类用来读取config.php,并能返回某个配置选项的值,在配置读取类文件中,一般都是采取单例模式,减少不必要的重复多次反复生成连接对象开销。读取网站配置文件代码清单4.2所示:

代码清单 4.2   读取网站配置信息

class conf {

    private static $ins = false;

    private $info = array();

    final protected function __construct() {

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

        $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];

        } else {

            return null;

        }

    }

 

良好的数据库处理类

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

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

数据库的连接功能代码清单如下:通过数据配置文件读取相对应的信息值,连接如果不成功,返回对应不成功信息。连接数据库代码清单4.3所示:

代码清单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;

        }

    }

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

代码清单4.4   选择连接数据库

protected function select_db($dbname='') {

        if($dbname == '') {

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

            $this->query($sql);

        }

    }

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

                       代码清单 4.5 数据库设置字符编码

protected function setChar() {

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

        return $this->query($sql);

    }

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

代码清单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());

                }

                return $rs;

    }

    }

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

代码清单4.7   获取sql返回值

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); }

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

代码清单4.8  返回受影响的行数

public function affected_rows() {

        return mysql_affected_rows($this->conn);

    }

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

代码清单4.9   日志记录函数

      public function log($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);

       }

}

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

良好的目录结构

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

正确的路径结构

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

代码清单 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();

初始化session,在此系统中,session是要多次用到,所以将session也放置到初始化文件中。

因为在网站中,购物车跟用户登录都要用到session技术。所以在初始化文件也包含了session初始化代码。并且根据不同的model来加载对应的model类。从而实现代码的复用度,跟代码的简洁度。

先将Ecshopview模板解压到,apache服务器的hosts文件下。(其实这里在任何地方建project都可以,因为在vhost里面配置虚拟主机的时候会标识。最后都是通过虚拟主机来访问网站。)通过基本的连接,将路径都走通。然后再对系统的主界面进行设计。模板中有用的模块能够用得上的,先设置好。再对自己将要开发的模块进行设计。采用”先死后活”的方法,先写成静态的Html页面,然后再对各个部分要实现的功能进行实现动态化。

系统前台主界面大概如下图4.1所示::

本地图片,请重新上传

4.1 前台界面

系统后台管理界面如下图4.2所示:

本地图片,请重新上传

4.2 后台管理界面

 

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         首页展示的小图

大图片          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所示:

代码清单4.11  商品栏目生成sql代码

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.2.3 会员信息表user

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

4.2.4 订单信息表order_info

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

 

 

         Order_id

姓名

手机

地址

电话

送货时间

配送方式

支付方式

3

Xx

Xx

Xxx

X

Xxx

Xx

X

4.3   订单表基本要素图

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

Order_id

Goods_id

Rec_id

Subtotal

3

4

 

 

3

5

 

 

3

9

 

 

本地图片,请重新上传

订单3

 

本地图片,请重新上传本地图片,请重新上传

 

 

 

 

 

 

 4.4   订单商品关联表图

4.2.5 订单商品关联表order_goods

具体实现订单商品管理sql如代码清单4.12所示:

代码清单 4.12   订单商品管理表sql语句

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

goods_name varchar(30) not null default ''

num smallint unsigned not null default 1

price decimal(92) not null default 0.00

subtotal decimal(92) not null default 0.00

4.3  后台模块的设计

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

4.3.1 商品管理模块

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

大致思路如下:

1:接收POST数据

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

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

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

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

$upfile = new upfile(2'jpegjpggifpngbmp');

$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']230230))'/');

上传文件是一个普通常用的功能,因此将upfile单独做一个封装功能模块。放在常用的工具类文件夹里面。以供系统所需调用。

迭代来生成不重复的文件名,放置文件名冲突,所以才去随机生成文件名。以时间日期为前缀,最大限度减少冲突的可能性。

文件上传是通过php内置函数,upload上传到服务器,以临时文件存在。要保存上传文件,需要将临时文件移动到要保存的文件夹下面。移动文件的函数move_uploaded_file实现。如果移动失败,则返回失败信息提示。如代码清单4.13所示:

代码清单4.13  文件上传函数

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

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

            return false;

        } else {

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

        }

    }

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

代码清单4.14     创建文件夹

protected function mk_dir() {

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

        if(is_dir($path)) {

            return $path;

        }  

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

    }

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

代码清单4.15        生成随机文件名函数

protected function randName() {

        return date('md'time()) . rand(100000999999);

    }

检验文件大小,判断文件的大小。是否符合上传要求。具体实现如代码清单4.16所示:

代码清单 4.16     检验文件大小

protected function checkSize() {

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

            return true;

        }

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

4.3.2 商品栏目管理模块

文件栏目展示列表: /admin/catelist.php

作用按层次展示栏目列表

流程分析如图4.5所示:

 

catelist.php

查询数据

Foreach显示

是否有数据

没有数据

 

 
  本地图片,请重新上传

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                            

                    4.5  商品列表展示流程图

需要先select出数据, 赋给数据,

判断数组是否为空,并提示为空或显示

$sql ='select * from category'; --->model里调用。常用的增删改查sql语句将封装在底层。供上层的controller层进行调用。

/Cateadd_ok.php:作用:添加新栏目。步骤如下::

接收POST数据

判断POST数据的完整性, 与合法性

实例化cateModel

形成数组,调用model的方法进行栏目的新增。

流程图如图4.6所示:

 

 

添加栏目

接收数据

数据信息合法

添加该栏目

提示退出

选定栏目层级

非法

合法

 

           
    本地图片,请重新上传
 
    本地图片,请重新上传
 
 

 4.6  栏目添加流程图

 


Catdel.php?cat_id=N : 
作用:删除栏目N。栏目的删除,步骤如下:

 

从地址栏接收cat_id

实例化cateModel

调用cateModel的删除方法,商品删除流程图如图4.7所示:

 

删除栏目

删除该栏目

是否有子栏目

提示栏目非空

没有

接收cat_id

Cat_id合法

提示退出

合法

 

                   
    本地图片,请重新上传
 
    本地图片,请重新上传
 
    本地图片,请重新上传
 
  本地图片,请重新上传
 
   

 4.7  栏目删除流程图

 


 

 

 

Catedit_ok.php修改栏目

步骤:

接收POST数据

判断数据完整性与合法性

调用 model进行修改

判断修改的结果。修改栏目流程图如图4.8所示:

 

修改栏目

判断数据

接收数据id

不合法

 

 
  本地图片,请重新上传

 

 

 

 

 

 

 

 

 

 

失败退出

 

  

 

 

判断新的父栏目是否是自己的子孙栏目

合法

 

           
    本地图片,请重新上传
 
  本地图片,请重新上传
   

 
 

 

 

 

 

 

 

 

 

 

 

提示错误信息退出

 

                                                                  

 

本地图片,请重新上传                                                                               

 

 

不是

本地图片,请重新上传 

 

 

 

 

                                                                                                                                

 

修改

 

 
  本地图片,请重新上传

 

 

 

 

 

 

 

                              4.8  商品栏目修改流程图

                                                                        

4.3.3会员管理模块

会员管理模块,跟栏目模块相类似。也都是增删改查,基本的流程也都是相似。其中分页功能,在网站中,很多地方都会要用到页面分页这个功能。因此将这功能页面单独写作一个工具类,保存在helper文件夹中在做页面分页的过程中。主要是获取所有数据库信息的条数。然后分页页面要展示的数目,一次取多少条数据。然后可以通过总的数据库数据条数除每一页需要的显示的条目向上取整。可以得出取得页数,然后根据页数。通过id=N来计算当前页具体获取数据库里面的具体的那些数据。往前往后取多少条数据,offset参数来做标识。通过url来传值,通过解析urlid等于多少,在确定在数据库里面信息取多少。在界面里面,就是一个超链接地址,通过地址键入不同的url的值来获取不同的页数信息。

4.3.3订单管理模块

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

4.4 前台模块的设计

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

4.4.1会员注册登陆模块

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

  用户登录验证方法,从前端view页面获取的用户名跟密码,传过来后调用封装的验证函数进行验证。其中密码也要通过一次相同的加密方法才能进行比对。为了保证的安全性,应该对密码进行加密。加密实现如代码清单4.17所示:

代码清单4.17    用户登录验证

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

        if($p) {

            $sql = "select user_idusernameemail from 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);

        }

    }

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

代码清单4.18    密码加密函数

   protected function encPass($str) {

        return md5($str);

    }

 

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

      运行效果如图4.9所示::

本地图片,请重新上传

4.9 登陆界面

4.4.2会员注册登陆模块

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

代码清单4.19    寻找家谱树函数

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

    public function familyTree($arr$cat_id) {

        static $list = array();

        foreach($arr as $v) {

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

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

                $list[] = $v;

            }

        }

        return $list;

    }

View的显示层结果用一个foreach循环来实现。运行效果图4.10所示:

本地图片,请重新上传

4.10 面包屑导航

4.4.3商品展示模块

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

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

运行效果如图4.11所示:

本地图片,请重新上传

4.11 商品展示界面

4.4.4商品栏目模块

这个是开发过程中一个必要的模块,不同的型号的商品可能属于同一个类别下面,更便于使用者操作。而且在开发过程中,在foreach循环展示数据的时候,也是采用递归调用的办法。得注意父子节点之间的关系,实现如代码清单4.20所示:

代码清单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.4.5购物车模块

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

本地图片,请重新上传

4.12 购物车界面

 

4.4.6在线支付模块

网上支付有两种方法,一种是直接跟银行对接,另外一种就是在此系统中用到通过中间代理机构对接银行。在这次的开发中采用的是易宝支付作为中间机构。选取中间机构进行跟银行的对接,适合这种小型交易金额的项目。一般银行不接受小金额的交易的直接对接口。而且采用中间支付机构,可以省去银行不同的接口或者银行因为升级而要更新接口的麻烦。采用中间支付机构,我们只用按照中间支付的规定原则,与中间支付机构提供的接口对接,而不用管中间支付机构跟银行如何对接。在选用中间支付机构时候,应该注重安全性跟可靠性。所以一般选取规模大、有影响力的、信誉度高的中间支付机构。我们在这里采用的是易宝支付作为中间支付机构。其实易宝支付接口,就是一个url地址。但是这个地址是对大家公开开放的。

支付宝给商家提供一个唯一的商号id跟对应的密钥。以保证交易过程中的安全性。商号id是商家向易宝支付申请的,与之同时会产生一个对应的密钥。在交易过程中,密钥是确定两者之间安全进行的凭证。注意这里,我采用的网上公共测试账号跟密钥。

实现具体订单获取相关信息如代码清单4.21所示:

代码清单4.21    具体订单信息获取提交

//订单支付获取提交过来的信息

    $p0_Cmd="Buy";

    $p1_MerId="10001126856";

    $p2_Order=$orderinfo['order_sn'];

    $p3_Amt=$data['price'];

    $p4_Cur="CNY";

    //商品名称

    $p5_Pid="";

    //种类

    $p6_Pcat="";

    //商品介绍

    $p7_Pdesc="";

    //易宝支付成功后,给url返回信息

    $p8_Url="http://localhost/shop/view/res.php";

    //送货地址

    $p9_SAF="0";

    //易宝保存地址,默认为0.不保存

    $pa_MP="0";

    $pd_FrpId=$_REQUEST['pd_FrpId'];

    //应答机制

    $pr_NeedResponse="1";

    //请求参数拼接,严格按照开发文档手册的顺序。

    $data="";

    $data=$data.$p0_Cmd;

    $data=$data.$p1_MerId;

    $data=$data.$p2_Order;

    $data=$data.$p3_Amt;

    $data=$data.$p4_Cur;

    $data=$data.$p5_Pid;

    $data=$data.$p6_Pcat;

    $data=$data.$p7_Pdesc;

    $data=$data.$p8_Url;

    $data=$data.$p9_SAF;

    $data=$data.$pa_MP;

    $data=$data.$pd_FrpId;

    $data=$data.$pr_NeedResponse;

    //商家密钥

$merchantKey = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";

//易宝支付与商家之间的约定的加密方式。

    function HmacMd5($data$key)

    {

           // RFC 2104 HMAC implementation for php.

           // Creates an md5 HMAC.

           // Eliminates the need to install mhash to compute a HMAC

           // Hacked by Lance Rushing(NOTE: Hacked means written)

           //需要配置环境支持iconv,否则中文参数不能正常处理

           $key = iconv("GB2312""UTF-8"$key);

           $data = iconv("GB2312""UTF-8"$data);

           $b = 64; // byte length for md5

           if (strlen($key) > $b) {

                  $key = pack("H*"md5($key));

           }

           $key = str_pad($key $b chr(0x00));

           $ipad = str_pad('' $b chr(0x36));

           $opad = str_pad('' $b chr(0x5c));

           $k_ipad = $key ^ $ipad ;

           $k_opad = $key ^ $opad;

           return md5($k_opad . pack("H*"md5($k_ipad . $data)));

    }

    //hmac是签名串,用于易宝和商家相互确认

    $hmac=HmacMd5($data$merchantKey);

再接着将订单信息提交到易宝支付的接口,即提供的url地址。即通过form表单,把订单的相关信息,按照易宝支付的规定加密后,通过<formaction="https://www.yeepay.com/app-merchant-proxy/node"method="post">提交到易宝支付进行交易。跳转到页面支付信息如下图4.13所示:

本地图片,请重新上传

4.13 在线支付界面

 


   

本文通过此次毕业设计网上商城系统设计与开发,从而得出下列结论:   

首先,学习一门新的技术,最重要是实践,只有多动手才能尽快掌握它。实践出真知是不变的道理。纸上得来终觉浅,缘知此事要躬行。其次,一个完善的系统的开发,最重要的是经验,如果经验不足,就难免会有许多考虑不周之处。所以在开发过程中,多参考别人的类似的项目,从而可以避免一些弯路。再次,一个开发较好的系统,是可以吸引更多的用户,具有用户友好性的特性。所以这就必须要求系统的界面必须要美观、有特色、友好,功能要健全。不过由于经验不足,我设计的界面,主要是参考的Ecshopview模板。然后对基本功能进行了开发。最后,在本次开发中,我对自己的毕业设计进行了完善,但是还有很多的不足之处,有待以后进一步学习提高改进。

由于本次毕业设计由自己一个人设计完成制作,对我这样一个PHP新手而言,所制作的模块还有很多不完善的地方。数据库的设计,业务逻辑流程也比较处理的比较简单。还有很多毕业设计中用到PHPSQL语言的知识也不够全面,还有很多地方跟细节的处理不能够作到完全的理解和掌握。但是通过这次毕业论文的设计制作使我个人受益匪浅。首先,由于毕业设计所用的PHP技术和其中用到HTML等前端语言是在课堂上从来都没有接触过的,所以要用它来做设计,必须通过前期大量自学来掌握,因而在这个过程中,不仅大大提高了我的自学能力而且让我对PHP的学习有了进一步的认识 。做自己喜欢的事情,效率永远是最高的。在此次毕业设计的过程遇到了很多的困难,我求教了不少老师和同学,同时也学会了怎么利用互联网的便利快捷来找到自己所需要的学习资料。在这个过程中让我体会到了,学习交流的重要性。

通过实践证明,经测试运行。本次设计所制作的系统基本符合界面友好、使用灵活、操作简单、功能齐全等功能,而前台所采用的Ecshopview模板的在国内的流行程度,可以从侧面反应此购物商城系统的广大的发展市场。

 

 

 

 

   

在毕业论文过程中,得到了老师指导跟同学的帮助。在此特别感谢指导老师王和兴老师的悉心指导,并且在此向给我提供过帮助的同学表示感谢。

特别是在论文的前期,对论文以及开发方向毫无头绪的时候,王和兴老师给我指明了学习的方向的道路。在结合我的兴趣的基础上,给我指明了php学习的方向,及时从迷茫中走出了出来,在前期枯燥的学习中,王和兴老师及时的督促跟严谨的教学作风,让我在万事开头难的学习开始阶段中慢慢找到了学习的乐趣跟快感。并慢慢在其中找到了一种成就感。所以在此答辩之际,特别向王老师表示衷心的感谢跟崇高的敬意。

 

 

posted @ 2013-12-17 10:47  小霸王易水寒  阅读(10274)  评论(1编辑  收藏  举报