基于PHP的产品报价系统的设计与开发
基于PHP的产品报价系统的设计与开发
摘 要
随着互联网技术应用的不断深入,产品的生产与销售链条也越来越多的融入了电子商务的元素。消费者通过网络能与来自世界各地、不同种类的产品建立直观的联系,并通过便捷、快速的操作完成购买流程。为了便于用户在千万计的产品中通过对不同制造商、不同产地的产品的价格、性能等参数进行比较,快速的找到自己需要的产品,尽可能缩短购买时间,并在制造商和消费者之间建立一个高效的平台,采用简洁高效的PHP语言与MySQL数据库等技术,并借鉴了开源社区中最经典的技术思想和开发模式,设计和开发了这一产品报价系统。该系统主要实现了产品搜索、用户评论、在线购买等前台模块与产品管理、用户管理、订单管理等后台模块。通过科学全面的测试,系统实现了产品报价和在线购物的主要功能。产品报价系统做为现有电子商务和在线购物模式的重要补充,在实际的应用中必将显现其突出的优势。
关键词:产品报价;在线购物;电子商务;PHP;MySQL;开源社区
目录
1引言
1.1系统的开发背景
1.1.1在线购物的发展
在线购物可以被认为是电子商务的一部分。从广义上讲,电子商务是指一种依托现代信息技术和网络技术,集金融电子化,管理信息化,商贸信息网络化为一体,旨在实现物质流,资金流,与信息流和谐统一的新型贸易方式,是贸易过程的电子化,网络化[1]。
在线购物也已经成为一种时尚,它为人们提供了真正足不出户就可以购买任何需要的东西的可能性,因此得到越来越多消费者的接纳和认同,尤其是成长在网络时代的年轻人。当然,成功的电子商务并不是简单的编写一套程序就能完成的,它不仅需要与金融系统紧密联系在一起,还要有完善的物流系统作为支撑。另外还要有良好的美誉度、强大的前期宣传,以及完善售后服务。国内就有很多成功的在线购物网站,比如阿里巴巴,无论哪个方面,都是值得学习的榜样。
虽然我国的在线购物体系还不够成熟,还存在这样那样的问题,但它的发展符合经济学原理和人们的需要,只要对症下药,一定可以逐渐发展完善,在竞争激烈的现代商务竞争中占据稳固地位.
1.1.2产品报价系统的现状
产品报价系统的开发,主要是用来帮助消费者在最短的时间内通过产品参数的比较,找到自己需要的产品,并使用系统提供的在线购买功能,实现整个购物流程。
目前,产品报价系统已经越来越多的应用到了大型的电子商务解决方案之中,起到了良好的效果。在泡泡网(实时发布最权威最新的IT产品报价大全,500个产品类别,22万产品尽在-泡泡网产品报价查询频道)、中关村在线(IT数码产品报价大全_中关村在线报价_专业IT数码产品中心-中关村在线产品库)、IT世界网(http://www.it.com.cn/)、太平洋电脑网(行情报价_太平洋科技)等国内著名的IT和数码产品信息网都提供了强大的产品报价功能[1]。
1.2系统实现的目标
本系统主要实现产品报价和传统在线购物的结合。一方面用户可以使用该系统对产品进行多种属性的搜索,对不同制造商和不同型号的产品进行简单的比较,最后提交订单并完成整个在线购买流程。另一方面,建立严格的审核和快捷的订单处理机制,对管理员进行权限管理,分为系统管理员、产品管理员和订单管理员等。管理员在后台设置产品的类别、制造商信息以及对不同的产品进行属性定制,建立专有的产品属性字段。
1.3系统开发的意义
本系统的开发,将在一定程度上缩短用户在产品选择和购物的中间环节,简化购物流程,提高效率。为用户节省大量的时间。通过对新注册用户的审核,来建立一个安全可靠的购物环境,解决传统电子商务存在的诚信度问题。
2产品报价系统分析
2.1网站的设计目标
网站使用简洁的框架结构,让审核通过并登录了的用户进行产品的搜索、
使用购物车、填写定单、选择支付和送货方式等操作,用户发表产品评论,在填写定单的时候可以附带留言对自己订购的产品加以备注说明。管理员有权在后台面板进行用户管理(包括审核、查看、编辑与添加)、订单管理和留言管理以及一些常规的设置和数据库管理(包括备份和恢复)等操作。
2.2网站的可行性分析
2.2.1 用户群体与市场分析
从用户群体的特点分析,他们主要为18-35岁之间的年轻人[2],他们更容易接纳新的生活方式,本身也具有很大的消费能力,而随着互联网用户数的快速增长,各种年龄段的网络用户都在逐渐的接受这种新的购物方式,而网上支付和物流行业的崛起,更凸显了电子商务的优势。截止今年第一季度,我国网民数量已达1.44亿人,这是一个庞大的基数,而且正在不断增大。庞大的用户群必将为在线购物市场注入强劲的活力。
从市场的前景分析,据两家美国机构发布的一份有关全球在线购物发展的报告显示,2007年,全球在线购物的市场容量将增长20%,达到2110亿美元。而我国的在线购物市场已经进入到了白热化的竞争,包括淘宝、易趣、当当等国内外巨头已经掌握了绝对的市场份额。专家预测,未来几年我国在线购物市场将达280亿元人民币,电子商务已成为我国互联网产业继门户、游戏、短信、搜索之后又一新的支撑点。
2.2.2 技术能力分析
根据本系统的功能需求,采用PHP编程语言与开源的MySQL数据库引擎进行开发。由于PHP作为一种高效而且语言结构清晰的编程语言,尤为适合于模块化功能的开发,而且因为其本身和服务器结合比较紧密,有大量优秀的函数库可以使用,在执行效率和安全性上有很大优势。而MySQL作为一种快速的、多线程、多用户和健壮的SQL数据库服务器,根据第三方测试结果,在千万级的数据环境中依然保持较高的执行速度。因此在技术层面上,是完全可行的。
2.2.3 可行性分析总结
综合在线购物市场用户群体的特点和不断增长的需求,以及技术、市场前景趋势等因素,在线购物市场有很大的发展前途,而产品报价系统则是建立在对产品的价格等参数对比的基础上的在线购物系统,因此本系统的开发是具有可行性的。
2.3网站设计的特点
系统的设计上需要注重安全性和用户操作的流畅性。因此要在对用户的管理和资格审核环节做出限定,只有经过审核确认的会员才有权使用产品的订购功能,而且需要对管理员进行不同的权限分配。搜索将在系统功能中占据重要的位置,可以使用产品的多个属性字段进行模糊搜索,并在搜索结果提供比较和购买通道。
3系统的开发技术及主要构架
3.1开发技术的选择
3.1.1PHP编程技术
PHP(“PHP Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到 HTML中,尤其适合 web开发。它还是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。
PHP代码在服务器端被解释转变成普通的HTML页面内容,送给浏览器端,这种模式可使我们用它来完成相当复杂的功能。它能运行在包括Windows、Linux等在内的绝大多数操作系统环境中,常与免费的Web服务器软件Apache和免费数据库软件MySQL配合使用于Linux平台上,具有较高的性价比。
强大的数据库支持:目前其支持范围覆盖了包括Oracle,Sybase,Microsoft SQL,MySQL,Informix,Solid dBase,ODBC,Unix dbm,PostgreSQL,Adabas D等在内的大多数常见数据库。用它编写一个含有数据库功能的网页程序十分简单。
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳组合。
可扩展性:就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。
面向对象编程:PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP也支持构造器、提取类等。
3.1.2MySQL开源数据库的开发
MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。
它的主要特点和优势主要有以下几个:
MySQL是一个快速、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。
MySQL是一个关系数据库管理系统。它将数据存放在独立的表格中,以增加存取的速度和灵活性。“MySQL”中的SQL代表“Structured Query Language”(结构化查询语言)。SQL是用于访问数据库的最通用的标准语言,它是由ANSI/ISO定义的SQL标准。
MySQL是开源的。开源意味着任何人都可以使用和修改该软件,任何人都可以从Internet上下载和使用MySQL而不需要支付任何费用。
3.2系统的主要架构及开发模式
本产品报价系统采用B/S模式,服务器采用著名的web服务器端软件apache,该http服务器有着良好的跨平台性和安全性,可以运行在包括windows、linux、mac等操作系统上。用户客户端使用各种浏览器都能够进行正常的浏览和操作。需要注意的是在程序的开发过程中,程序和路径相关的要考虑到不同的操作系统的文件目录结构。
面向对象的方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。面向对象方法的基本思想是:从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类自然的思维方式。
关于OOP思想是否适用于PHP程序开发的争论一直在持续,一方面PHP向来以快捷开发著称,在程序中可以直接的对变量进行调用,况且PHP自身就提供了庞大的函数库。而OOP则需要使用对象来调用每一个函数和属性。但是在本系统的开发中,大量使用到了OOP的思想,最突出的就是对数据库的操作部分,在后续的代码中出现对数据库的操作的时候使用对象调用让整个流程和结构显得更加清晰。在PHP5的开发过程中,OOP的思想已经得到了一定的重视[7]。
4系统的功能和流程分析
4.1平台功能模块的设计分析
根据需求分析和产品报价系统的整体工作流程,本系统所具有的基本功能模块主要包括查询、购买、留言、用户管理、产品管理、留言管理和订单管理等,除了以上基础模块,在开发过程中还开发了一些相关的模块来补充和完善整个系统,以期获得更好的效果。
系统功能模块关系图如图1。
图1 产品报价系统功能模块图
4.2系统流程分析
以下部分主要对各个功能模块的实现流程思路进行分析。
4.2.1 前台购物流程
只有管理员审核通过的注册用户才具有在本系统购买产品的权限,当用户搜索到所要订购的产品时,点击“购买”按钮,即可将产品放入购物车中,系统页面转向购物车页面,用户可以在看到产品现有库存,并根据自身需要设置购买的产品数量。
设置完毕后,用户可以继续购物,也可以通过页面上的“结帐”开始订单填写流程。页面将显示出订购产品的基本信息、用户所在的通讯地址(用做产品发货地址),用户需要确认正确的收货地址,如果需要设置新的收货地址,可以在自己的通讯录内添加。在收货地址确认后用户需要选择送货方式,比如普通邮寄、特快专递等,在确认送货方式之后,进入支付方式的选择,用户可以选择在线支付,也可以选择邮局汇款,在线支付的可以通过在线支付的接口实现支付。在支付方式确认之后,订单的全部信息设置完毕,用户做最后的确认,无误之后确认定单。整个订单过程完毕。等待管理员处理订单。
用户可以在个人面板查看个人订购记录与订单处理状态。
用户购物的整体流程如图2。
图2 前台购物流程图
4.2.2 注册登录功能流程
注册流程的实现较为简单,用户在系统首页或者系统任何通过登录才有访问权限的页面都能找到会员注册的链接。点击注册链接,用户按照表单所需信息填写,需填写真实信息,因为新注册用户必须经过管理员审核才能成为正式会员在本站进行产品订购。信息填写完毕并提交之后,系统提示注册成功,但是需要管理员审核。
登录功能中,注册用户需要提供其正确的注册邮箱和密码,忘记密码的用户可以通过“找回密码”填写注册使用的邮箱名称,提交发送找回密码的请求,系统收到请求后,将会通过邮件将用户的新密码发送到用户注册邮箱中去。
4.2.3 商品搜索流程
搜索功能是系统最重要的一个模块,在搜索页,用户可以输入产品关键字,并根据产品的价格范围、产品制造商以及产品类别等属性进行查询,在查询的过程中,可以使用符号与关键字的结合进行模糊搜索。在搜索结果中,每个产品都会以规范的表格形式展示出来,并直观的显示出产品的关键属性和特点,并提供直接的购买按钮。
4.2.4 留言评论流程
在每个产品的介绍下面都有产品评论的功能,注册用户可以对产品发表评论,对产品提出问题或者疑问,并评分。信息提交之后,管理员将能通过后台的管理功能查看的相关的评论以及问题。
4.2.5 商品管理流程
在本产品报价系统中,主要通过管理员添加产品信息,在后台的产品管理中,管理员需要设置产品的类别,类别设置能够设立一级分类与二级分类。类别主要信息包括类别名称、排列顺序、类别形象图片等。管理员还需要设置和管理产品制造商,在添加产品信息时,管理员需要设置产品的类别、制造商、价格、库存数量等属性,库存数量会在每次的订购之后自动的减少。在产品添加之后并不能直接的显示在前台的页面上,只有在产品被管理员激活之后才能够显示。管理员有权限对已存在的类别、制造商、产品进行包括编辑、删除的管理。由于产品库存会随着产品订购而减少,管理员可以通过编辑产品来修改库存数量。同时,也可以将特有产品设置为特价产品来销售。
4.2.6 订单处理流程
管理员在查看到新订单出现时,查看订单信息,根据用户所订购的产品以及所选取的支付和运送方式,对订单进行处理,在确认已经收到用户的订购货款的时候,开始进行正式的处理中,并根据办理的情况,修改产品订单的处理状态,用户可以通过个人面板了解订单状态,及时的了解到最新的处理情况,和网站保持一种便捷的沟通渠道,从而保证了购物过程的安全和流畅。
4.2.7 用户管理流程
用户群组是本系统一个重要模块,为了对新注册用户进行审核,在开发过程中,将新注册的用户默认为待审核组的成员,管理员登录后,可以查看新注册用户的资料,待确认审核通过后将其从待审核组转到正式用户组,实现了基本的审核功能,而只有正式会员才享有在本站订购产品的权限。其次在用户管理中,管理员可以添加用户,添加完成后将给新添加的用户发送一封邮件,进行通知。管理员还可以通过姓名、邮箱以及所在群组搜索查找用户,并对用户进行编辑、删除等操作。而管理员也作为一个特殊的群组存在,主要分为系统管理员、订单管理员和产品管理员,每个管理员都具有相应的权限。
5系统功能的具体实现
5.1系统数据库的设计
根据需求分析以及系统功能的需要,系统信息数据存放在MySQL数据表中。下面给出重要数据表的简单描述。
1.customers(用户信息表)
该表存储了用户的基本信息,主要用于用户的登录以及站内的活动记录。表内数据由用户注册时写入,如表1。
表1 用户信息表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
customers_id |
int |
11 |
是 |
用户标识号,自动生成 |
customers_gender |
char |
1 |
否 |
用户性别 |
customers_firstname |
varchar |
32 |
否 |
用户姓名 |
customers_email_address |
varchar |
96 |
否 |
用户注册用email地址 |
customers_default_address_id |
int |
11 |
否 |
用户默认地址编号 |
customers_fax |
varchar |
32 |
否 |
用户传真 |
customers_password |
varchar |
40 |
否 |
用户密码 |
customers_newsletter |
char |
1 |
否 |
用户订阅的新闻 |
status |
enum |
否 |
用户群组 |
|
credit |
int |
10 |
否 |
用户积分 |
regdate |
int |
10 |
否 |
注册日期 |
lastvisit |
int |
10 |
否 |
最后访问时间 |
2.usergroups(用户群组表)
该表存储了系统群组的信息,每个群组所享有的权限是不同的,新注册用户默认为待审核成员组。该表的字段属性如表2。
表2 系统群组信息表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
groupid |
Smallint |
6 |
是 |
群组编号,自动生成 |
status |
Enum |
否 |
用户组类型 |
|
grouptitle |
Varchar |
30 |
否 |
群组名称 |
creditshigher |
Int |
10 |
否 |
积分上限 |
creditslower |
Int |
10 |
否 |
积分下限 |
groupdiscount |
Float |
否 |
账户折扣 |
|
allowsetconfig |
Tinyint |
1 |
否 |
是否有系统配置权限 |
allowsetproduct |
Tinyint |
1 |
否 |
是否有管理产品权限 |
allowsetmodules |
Tinyint |
1 |
否 |
是否有管理模块的权限 |
alloweditcustomer |
Tinyint |
4 |
否 |
是否有编辑用户的权限 |
alloweditorder |
Tinyint |
1 |
否 |
是否有处理订单权限 |
allowadmindata |
Tinyint |
1 |
否 |
是否有管理数据的权限 |
3.categories(产品分类表)
该表存储了产品类别信息,主要包括了产品编号、标识图片以及订购类型编号等。字段属性描述如表3。
表3 产品分类表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
categories_id |
Int |
11 |
是 |
产品类型编号 |
categories_image |
Varchar |
64 |
否 |
产品标识图片 |
parent_id |
Int |
11 |
否 |
父类编号 |
sort_order |
Int |
3 |
否 |
订购类型编号 |
date_added |
Datatime |
否 |
添加日期 |
|
last_modified |
Datatime |
否 |
最后修改日期 |
4.address_book(用户通讯地址表)
系统将用户注册时的通讯地址保存到该表中,用户可以根据自身情况,在通讯录最多设置5个通讯地址,该通讯地址主要作为订购产品的发货地址和邮件接收地址。保证产品通过用户选择的送货方式送达用户手中。字段属性描述如表4。
表4 用户通讯地址表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
address_book_id |
Int |
11 |
是 |
通讯录编号 |
customers_id |
Int |
11 |
否 |
用户编号 |
entry_firstname |
Varchar |
32 |
否 |
姓 |
entry_lastname |
Varchar |
32 |
否 |
名 |
entry_street_address |
Varchar |
64 |
否 |
详细地址 |
entry_postcode |
Varchar |
10 |
否 |
邮政编码 |
entry_city |
Varchar |
32 |
否 |
城市 |
entry_state |
Varchar |
32 |
否 |
省市 |
entry_country_id |
Int |
11 |
否 |
国家编号 |
entry_zone_id |
Int |
11 |
否 |
区域编号 |
entry_tel_regular |
Varchar |
32 |
否 |
固定电话 |
entry_tel_mobile |
varchar |
32 |
否 |
移动电话 |
5.manufacturers(制造商信息表)
制造商信息表主要存储了制造商的基本信息,包括编号、名称、形象图片、添加及更新日期。本表信息由系统管理员进行管理。字段属性描述如表5。
表5 制造商信息表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
manufacturers_id |
Int |
11 |
是 |
制造商编号 |
manufacturers_name |
Varchar |
32 |
否 |
制造商名称 |
manufacturers_image |
Varchar |
64 |
否 |
制造商标识图 |
date_added |
Datetime |
否 |
添加日期 |
|
last_modified |
Datetime |
否 |
最后修改日期 |
6.products(产品信息表)
该表存储了产品的基本信息。由管理员在后台添加产品时候输入。字段属性描述如表6。
表6 产品信息表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
products_id |
Int |
11 |
是 |
产品编号自动生成 |
products_quantity |
Int |
4 |
否 |
产品库存数量 |
products_image |
Varchar |
64 |
否 |
产品图片 |
products_price |
decimal |
15,4 |
否 |
产品价格 |
products_date |
Datetime |
否 |
产品发布时间 |
|
products_last_modified |
Datetime |
否 |
产最新编辑时间 |
|
products_date_available |
Datetime |
否 |
激活时间 |
|
products_weight |
decimal |
5,2 |
否 |
产品重量 |
products_status |
Tinyint |
1 |
否 |
产品状态 |
manufacturers_id |
Int |
11 |
否 |
产品制造商编号 |
products_ordered |
Int |
11 |
否 |
已订购产品 |
products_type |
int |
2 |
否 |
产品型号 |
categories_id |
int |
10 |
否 |
产品类别编号 |
7.reviews(用户评论表)
该表存储了用户提交的产品评论信息,主要包括了用户的信息和评论以及评分的信息。字段属性描述如表7。
表7 用户评论表
字段名 |
字段类型 |
字段长度 |
是否主键 |
描述 |
reviews_id |
Int |
11 |
是 |
评论编号 |
products_id |
Int |
11 |
否 |
产品名称 |
customers_id |
Int |
11 |
否 |
用户编号 |
customers_name |
Varchar |
64 |
否 |
用户姓名 |
reviews_rating |
Int |
1 |
否 |
评论评分 |
date_added |
Datetime |
否 |
添加日期 |
|
last_modified |
Datetime |
否 |
最后修改日期 |
|
title |
Text |
否 |
题目内容 |
|
reviews_read |
Int |
5 |
否 |
评论阅读次数 |
5.2功能总体说明
5.2.1 系统流程图
系统整体主要流程图如图3。
图3 系统整体主要流程图
5.2.2 目录结构说明
本系统程序代码包含11个子目录,主要目录描述说明为:
admin : 管理后台程序目录,包括后台程序、数据库备份目录、后台管理子模块程序目录。
htmlarea : htmlarea在线编辑器的全部程序,包括编辑器的js文件、编辑器图标以及模版程序。
images : 该目录主要为系统中使用到的图片、图标,包括jpg、gif、ico等格式。
includes : 系统的重要函数,包括全局配置文件,还有调用频繁的代码段。
modules : 存放系统中一些小的功能模块的代码。比如站内新闻订阅。
osdata : 数据库备份和恢复的设置目录,主要存放系统备份的数据库,可以从这里面将数据库导入到系统中去。
templates : 系统前台模版文件,为html格式,通过PHP文件的包含而使用。
5.3各功能模块的实现
5.3.1 数据库的连接
系统中对数据库的操作是以类的形式表现的,将对数据库操作的函数封装到类dbstuff中,包括数据库的连接和查询以及从查询结果从取数据。然后建立一个新的对象db,在整个系统中直接使用对象操作数据库。在类dbstuff中,对数据库连接的代码片段是:
function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0){
if ($pconnect){
if (!@MySQL_pconnect($dbhost, $dbuser, $dbpw)){
$this->halt('连接数据库服务器失败');
}
}
else{
if (!@MySQL_connect($dbhost, $dbuser, $dbpw)){
$this->halt('连接数据库服务器失败');
}
}
MySQL_select_db($dbname); //选择数据库
}
function select_db($dbname){ //将选择数据库以函数的形式表示
return MySQL_select_db($dbname);
}
对数据库操作的类封装在includes目录中的db_MySQL.PHP文件中,然后在application_top.PHP文件中建立对象,然后在使用到数据库操作的每个页面将application_top.PHP包含进去。在application_top.PHP建立对象的操作代码为:
$db = new dbstuff; //建立对象
$db->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE,
USE_PCONNECT); //使用对象来操作数据库连接
$db->select_db(DB_DATABASE);
5.3.2 用户注册与审核模块
作为一个产品报价系统,首先它是一个在线购物系统,因此为了建立一个良好的购物环境,保证系统的安全和用户的信息,新用户的审核是一个重要的环节。新用户在前台首页或者系统任何一个需要登录才能操作的功能页,都会自动的跳转到登录注册页面,注册页面如图4所示。
图4 用户注册页面
点击用户注册链接,进入如图4的页面,填写真实的个人信息,在确认无误之后提交,系统将对提交信息进行初步的过滤,如果无误,将会提示注册成功。此时用户可以登录系统,使用搜索功能,发布产品评论,修改个人资料,但是不能订购产品,在等待管理员审核通过之后才具有购买产品的权限,成为正式会员。审核功能如图15。
在注册页面,标注星号的为必须填写的字段,在程序中对此类字段进行是否为空的判断。如果均不为空则插入数据表中,否则返回信息提交页面。
在这个过程中,重要的就是提取用户提交的信息,这是对信息进行判断和写入数据库的重要步骤,该过程使用到了位于includes目录中的global.PHP文件中自定义函数tep_db_prepare_input()。该函数的实现为:
function tep_db_prepare_input($string){
if (is_string($string)){
return trim(tep_sanitize_string(stripslashes($string))); //字符串替换函数
}
elseif (is_array($string)){
reset($string);
while (list($key, $value) = each($string)){
$string[$key] = tep_db_prepare_input($value);
}
return $string;
}
else{
return $string;
}
}
审核模块,由管理员在后台对所要审核的会员所在的群组进行更改,管理员能全面的查看到会员的全部资料,确认之后将用户由待审核组更改为正式会员组即实现了审核功能。
5.3.3 用户登录模块的实现
注册用户通过前台页面的登录窗口(如图5),进入系统,以进行相关操作。登录主要使用用户邮箱地址和注册密码,如果与数据库匹配成功则登录成功。用户遗忘密码时,通过找回密码功能来获得一个新的密码,这使用到了两个操作:
首先就是通过用户提供的邮箱地址进行数据库的操作,如果邮箱存在就随机产生一个密码,并将加密后的新密码写入到数据库中。
图5 用户登录页面
产生新密码的实现过程为:
$email_address = tep_db_prepare_input($HTTP_POST_VARS['email_address']); //读取用户提交信息
$check_customer_query = $db->query("select customers_firstname, customers_password, customers_id from $table_customers where customers_email_address = '".safe_input($email_address)."'"); //数据库查询
if ($db->num_rows($check_customer_query)){ //邮箱地址存在,分配新密码
$check_customer = $db->fetch_array($check_customer_query);
$new_password = tep_create_random_value(ENTRY_PASSWORD_MIN_LENGTH); //随机产生密码
$crypted_password = md5($new_password); //对随机产生的密码加密$db->query("update $table_customers set customers_password =
'".safe_input($crypted_password). "' where customers_id = '" . (int)$check_customer['customers_id'] . "'");//更新用户信息
其次,系统需要自动的发送邮件到用户信箱,将新密码以邮件方式发送给用户。发送给用户的密码是没有加密前的随机密码。发送邮件之前,系统需要配置好邮件服务功能。实现过程使用到了函数tep_mail(),该函数的实现代码为:
function tep_mail($to_name, $to_email_address, $email_subject, $email_text,
$from_email_name, $from_email_address){
if (SEND_EMAILS != 'true')
return false;
require_once('includes/classes/mime.PHP');
require_once('includes/classes/email.PHP');
$message = new email(array('X-Mailer: Mailer'));
$text = strip_tags($email_text);
if (EMAIL_USE_HTML == 'true'){
$message->add_html($email_text, $text);
}
else{
$message->add_text($text);
}
$message->build_message();
$message->send($to_name, $to_email_address, $from_email_name,
$from_email_address, $email_subject); //使用到了PHP封装的函数send()
}
5.3.4 商品搜索模块的实现
产品搜索主要是通过对数据字段的查询实现的。如图6所示,用户通过输入产品名称的关键字,目前可以实现的是使用产品名称关键字、产品分类(包含子分类)、产品制造商与产品的价格范围和上架的日期范围进行组合式的搜索服务。
搜索结果将产品以列表的形式调用出来,并且显示各个产品的参数,以便于产品之间的比较,搜索结果显示如图7。在实现该模块中,对数据库的查询、产品的显示形式与分页是重点技术点。
图6 产品搜索页面
其中搜索过程对数据库的操作较为复杂,需要同时对不同数量的关键字进行处理。搜索处理用到的重要函数有以下2个:
function tep_get_all_get_params() 用于获取用户搜索输入的所有参数
function tep_parse_search_string() 用户对所有参数的处理。
图7 前台产品展示页面
5.3.5 购物车模块的实现
在产品列表点“购买”按钮,就自动的将所要购买的产品放进购物车中,如图7,在图8中,点继续购物就可以回到产品页面,继续选择自己需要的产品。如果要结帐,只需要点“结帐”按钮,就会进入到订单填写的流程。如图2所示。 订单处理主要包括确认收货地址、选择收货方式和选择支付方式三个主要步骤,其中可以发布订单的特殊要求和供货方需要注意的事项。购物车管理页面如图8。
图8 购物车管理页面
在本模块中,需要对用户是否具有购物权限进行判断,未审核通过的用户虽然能够将喜欢的产品放进购物车(即使未通过审核的用户,放进购物车的产品信息也可以保存,以便用户在具有权限时继续购买,但在未通过审核前,其行为不影响产品库存数量)。权限判断的代码为:
$query1 = $db->query(
"select status from $table_customers where customers_id ='".(int)
$customer_id."'");
$check_status = $db->fetch_array($query1);
if ($check_status['status'] == 'verify'){
echo "<script>alert('您的资料还没有通过审核,暂时不能购买产品,我们将尽快为您开通。');history.back();</script>";
exit();
}
5.3.6 产品管理模块的实现
产品管理模块包含的主要功能有:添加管理产品分类(如图9),添加管理产品(如图10),设置制造商(如图11),设置产品特有属性(如图12)。
产品分类管理模块,为二级分类。通过管理后台的“新分类”链接,可以添加新的分类,通过“新产品”的链接可以在当前类别下添加产品,同样在一级分类下面也具有这两项功能。可以对已存在类别进行包括修改、删除和移动在内的操作。而对类的操作均是对数据库的直接操作。其中添加类的核心代码为:
$action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action']: (isset($HTTP_POST_VARS['action']) ? $HTTP_POST_VARS['action']: ''));
if ($action){
switch ($action){
case 'new_category':
if (isset($HTTP_POST_VARS['categories_id']))
$categories_id = stripslashes($HTTP_POST_VARS['categories_id']);
$sort_order = stripslashes($HTTP_POST_VARS['sort_order']);
$db->query(
"insert into $table_categories (parent_id,sort_order,date_added) values ('$current_category_id','$sort_order',now())");
$categories_id = $db->insert_id();
$languages = tep_get_languages();
for ($i = 0, $n = sizeof($languages); $i < $n; $i++){
$categories_name_array = $HTTP_POST_VARS['categories_name'];
$language_id = $languages[$i]['id'];
$categories_name = stripslashes($categories_name_array[$language_id]);
$db->query(
"insert into $table_categories_description (categories_name,categories_id,language_id) values ('$categories_name','$categories_id','$language_id')");
}
$categories_image = new upload('categories_image',
'/upload/images/category');
if ($categories_image->parse($timestamp)){
$categories_image->save();
$db->query("update $table_categories set categories_image =
'".addslashes($categories_image->filename)."' where categories_id = '".(int)$categories_id."'");
}
updatecache('categories');
cpmsg("分类添加成功。", tep_href_link('admincp.PHP', 'act=catalog&cPath
='.$cPath.'&cID='.$categories_id));
5.3.7 用户管理与权限的实现
主要包括了对用户的搜索查找、添加用户、编辑、删除以及对用户群组的权限和积分设置。搜索结果以列表形式显示。用户搜索页如图13。
搜索用户的实现程序片段为:
elseif ($searchsubmit || $deletesubmit || $exportsubmit){
if (!$page){ //分页显示程序段
$page = 1;
}
$offset = ($page - 1) * MAX_DISPLAY_SEARCH_RESULTS;
$conditions = ""; //用户搜索条件处理
$conditions .= $name != "" ?
" AND (customers_firstname LIKE '%$name%' OR customers_firstname='$name')" : NULL;
$conditions .= $email != "" ?
" AND (customers_email_address LIKE '%$email%' OR customers_email_address='$email')" : NULL;
$conditions .= $userstatus != "" ? " AND status='$userstatus'" : NULL;
if ($conditions){ //如果搜索条件存在,开始搜索
$conditions = substr($conditions, 5);
if ($searchsubmit){ //action判断
$query = $db->query(
"SELECT COUNT(*) FROM $table_customers WHERE $conditions"); //符合条件的用户总数
$num = $db->result($query, 0);
$multipage = multi($num, MAX_DISPLAY_SEARCH_RESULTS, $page, "admincp.PHP?act=members&searchsubmit=yes&name=$name&email=$email&userstatus=$userstatus");
$query = $db->query(
"SELECT * FROM $table_customers WHERE $conditions LIMIT $offset,".MAX_DISPLAY_SEARCH_RESULTS);
while ($member = $db->fetch_array($query)){
//循环分页显示用户列表
}
5.3.8 订单与评论管理
订单管理是产品报价系统的重要部分,主要实现的功能包括订单搜索、订单查看与处理、订单删除等。订单搜索通过订单号、订单状态、顾客名与顾客邮箱关键字进行搜索。在订单处理页,管理员能查看新订单的完整资料,并根据订单的处理状态进行管理,并通过系统邮件与顾客沟通,将订单的处理信息反馈给顾客,同时管理员能对一些订单进行删除操作。
评论管理主要提供了简单的评论查看与删除功能,整个实现过程较为简单。
5.3.9 系统数据管理
MySQL数据库的最大特点就是提供了很多便于直接使用的操作函数,可以轻松的将复杂的数据库操作由清晰的函数实现。在系统数据管理这个模块,主要实现了数据备份和数据恢复(即数据库导入)。
6系统测试及难点分析
6.1系统运行环境的搭建
本系统的开发和测试均在windows操作系统平台下进行的,使用AMP集成软件包搭建运行环境
Apache,一种开放源码的HTTP服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性而被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,Perl/Python等解释器可被编译到服务器中[ 5]。
Apache支持许多特性,其中大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持Perl、Python、Tcl和PHP。流行的认证模块包括mod_access,mod_auth和mod_digest。其他的例子有SSL和TLS支持(mod_ssl),proxy模块。很有用的URL重写(由mod_rewrite实现),定制日志文件(mod_log_config),以及过滤支持(mod_include和mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。
相比较linux下的复杂安装过程,在windows操作系统下搭建运行环境相对简单,但是不足之处在于配置选项较少,安全性相对不高。在windows上主要采用继承软件包来直接安装,甚至不需要做任何配置就可以直接使用。
第一:采用著名的AMP集成软件包wamp5,在众多AMP集成软件中,wamp5是最为出色的,它使用了最新的PHP5版本。安装与使用的流程如下:
1.从官方网站:http://www.wampserver.com下载最新版本。软件包为exe可执行文件,下载完毕直接双击,连续选择下一步就安装成功了。如果你需要对默认的设置做简要的修改,在安装的过程中很容易做到。可以自定义WWW根目录的存放位置,强烈建议放到D盘等安全的分区中,以避免万一系统崩溃,造成数据丢失。
2.对于中文用户来说,安装结束后,首先要设置的是,把MySQL的数据库默认编码改为UTF-8,这样可以排除很多中文乱码问题:在WAMP5菜单中选择打开my(wamp).ini,设置其中的default-character-set=utf8, 然后重启WAMP5。
3.数据库默认的密码是空的,可以在PHPMyAdmin中设置root帐号的密码为123456。修改之后,接着需要修改PHPMyAdmin的配置文件config.inc.PHP,否则PHPMyAdmin就不能进入数据库:
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '2003032024';
4.由于MySQL4.1之后版本对密码验证的方法发生了改动,如果在WAMP5中使用PHP4.x,那么就需要启用MySQL的old password功能,否则无法登录PHPMyAdmin。在WAMP5菜单中选择MySQL/MySQL console,然后输入下列命令:
MySQL> SET PASSWORD FOR
-> 'root'@'localhost' = OLD_PASSWORD('2003032024');
第二:采用其他的AMP集成软件。比如:AppServ(http://www.appservnetwork.com)、XAMPP(http://www.apachefriends.org/en)以及由网友Caisong制作的集成软件(I love china)。其安装和配置过程大体相同。
6.2系统程序的安装
在搭建有apache+PHP+MySQL的服务器平台上,系统管理员只需要使用MySQL命令端或者web管理软件在MySQL服务器端创建一个数据库mywork.然后使用MySQL数据库导入命令将系统中的数据库文件导入到新创建的数据库mywork中即可。然后配置位于目录includes中的配置文件configure.PHP,修改为当前的数据库用户名和密码即可安装成功。使用默认用户邮箱:epochina@163.com 和密码:117227 登录后台进行系统设置和管理。
6.3系统的测试
测试平台为windows操作系统,运行环境由MAP集成软件包搭建。Apache和PHP采用了缺省设置。
6.3.1 系统关键部分测试分析
测试分为两个部分:
第一部分主要就是测试系统所要求的最基本的功能,主要侧重于用户前台的使用流程。基本的用户注册和登录功能相当流畅,但是在产品搜索功能上,虽然能够使用关键字搜索到产品,但是还有所欠缺,而且可以使用的产品属性关键字还太少。在前台的购物流程中,前期发现的购物权限设置问题已经得到了解决。测试过程中,购物环节完全可以成功运行,但是当用户购买产品超过库存数量的时候,虽然程序可以正确运行,但是缺少一个适当的判断环节。
第二部分主要是针对后台管理的测试,由于后台管理功能模块较为集中,是整个系统的核心所在,特别是对用户的审核、对管理员的权限分配以及对订单的处理都完全符合系统设计初期的功能要求。因此从整体上来说,系统的设计和实现是成功的。
6.3.2 测试结果分析与说明
从整体的测试结果来看,在大中型的商务应用中,PHP与MySQL的结合具有相当的优势。
首先就是缩短了开发时间,PHP与MySQL提供的大量固有的函数库直接在程序中使用,提高了程序的运行效率。虽然系统的功能还显得弱小,但是系统的优良性能已经得到了很好的体现。
6.3.3 系统安全与性能分析
系统设计过程中,对代码中出现的可能对系统造成安全威胁的字符进行过滤和字符的转换,在一定程度上提高了系统运行的安全性。同时所采用的编程语言和数据库的特性足以承受大量的数据读取和写入。
6.4系统中存在的问题及解决方法
第一:在系统的设计初期,对用户的权限分配考虑不周,所有登录用户均可以进行产品购买。缺少对新注册用户的审核。这个问题已经得到解决,在系统的用户群组中建立了待审核用户组,默认所有新注册用户为该组成员,用户注册成功提交之后,提示用户等待管理员审核。在产品购买页面对用户进行判断,如果为待审核群组的会员则不能进行购物。
第二:由于第一个问题的出现,在后台的用户资料查看中,没有将用户的详细资料调用显示,管理员不能够直观全面的了解用户的情况。就不方便进行审核,解决办法是从数据库中读取用户的资料,以表格形式显示出来。
结 论
在系统的开发过程中,充分的借鉴了开源社区的优秀代码段和设计思想,使用面向对象的编程方式与php结合,完整的实现了系统的需求。而且使用到了模版和程序分离的模式,对于系统管理员来说,前台的设计工作将变的更加轻松。而优秀的开源数据引擎MySQL本身所具有的良好性能,对于繁杂而且庞大的数据处理有明显的优势,这就为系统的使用提供了稳定性和安全性。
在过去几个月的设计和开发过程中,通过老师的指导、主动的收集资料,已有知识的整合,对构建大型系统尤其是商务应用系统有了进一步的认识,更加熟悉在php中使用面向对象的编程思想,对如何进一步提高php与MySQL系统的安全性有了更多的思考。
然而,做为产品报价系统,在产品的销售和在线订单实现过程中,本身需要有良好的性能来防范可能出现的任何漏洞,对程序代码本身的安全性要求相当高,从这个方面来看,还需要进一步的工作来完善,在确保功能流程的前提下为用户提供体验性好而且可信任的服务。另外对于订单的管理也存在需要改进的地方,比如按照月份生成Excel或者PDF格式的报表。
参考文献
[1] 金兰,郑玉,黄续新.我国电子商务的现状与未来[J] .计算机时代,2006,(10):25~29。
[2] 李端明,李宇翔.电子商务环境下的网络消费者[J] .商场现代化,2006,(30):31~36。
[3] 威利[澳] . PHP和MySQL Web开发(第3版)[M] .武欣 等译.北京:机械工业出版社,2005。
[4] 威廉斯[澳],莱恩[澳] .PHP & MySQL Web数据库应用开发指南[M] .南京:东南大学出版社,2006。
[5] 仲进平,寿加炎.PHP+MYSQL 网络开发技术[M] . 北京:人民邮电出版社,2000。
[6] Matt Zandstra[美] .PHP5的异常处理机制 [J] .PHP&More,2006,(2):19~24。
[7] Leendert Brouwer[美] .以OO的方式使用PHP [J] .PHP&More,2006,(3):35~41。
[8] 杨宝昌. MySQL实现中文全文检索的解决方案[J] .程序员,2006,(10):26~29。
[9] 顾治华,忽朝俭. MySQL存储引擎与数据库性能[J] .计算机时代,2006,(10):71~82。
致 谢
本文是在刘嘉勇老师的热情关心和指导下完成的,他们渊博的知识和严谨的治学作风使我受益匪浅,在PHP技术、数据库编程设计、产品报价系统规划和设计方面得到了很大的帮助,对顺利完成本课题起到了极大的作用。在此向他们表示我最衷心的感谢!
在论文完成过程中,在报价系统的流程设计和程序调试方面,本人还得到了其他老师和许多同学的热心帮助,正是他们热心和无私的帮助,课题才能顺利的得以进展,不断的克服在设计和开发中遇到的问题。在此本人一并向他们表示深深的谢意!
最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!