防止SQL注入的网上二手交易平台的设计与实现
摘 要
近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现今,大量的计算机技术应用于商业领域,包括软件技术、网络技术、硬件技术等。越来越多的企业使用计算机来开展业务、销售、购买和宣传各种商品。各种商业系统和软件已经解放了企业的双手,并使企业能够最大限度地获得利益。因此,计算机技术在商业领域占有非常重要的地位。
本文主要通过对系统的前台系统和后台管理系统进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。网上二手交易平台使用 Dreamweaver、HBuilder代码编辑器、Apache服务器等开发工具,完成了系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、商品发表功能、充值下单功能、信息反馈功能、加入购买和查看购买功能、生成订单和查看我的订单功能、在线付款功能以及订单管理功能的实现过程。
关键词:电子商务; HBuilder代码编辑器;商品搜索
Design and implementation of online second-hand trading platform to prevent SQL injection
Abstract
In recent years, with the rapid development of mobile Internet, e-commerce is more and more welcomed by Internet users. E-commerce also plays a more and more important role in the development of national economy. Simple process, convenient and reliable payment method, fast and smooth logistics express delivery and safe information protection all make e-commerce more and more popular among Internet users. Nowadays, a large number of computer technologies are used in commercial fields, including software technology, network technology, hardware technology and so on. More and more enterprises use computers to carry out business, sell, buy and publicize all kinds of goods. Various business systems and software have liberated the hands of enterprises and enabled enterprises to maximize benefits. Therefore, computer technology plays a very important role in the commercial field.
This paper mainly analyzes the functional requirements of the foreground system and background management system, and analyzes the non functional requirements of the security and scalability of the system. Based on the detailed demand analysis, the database structure is determined according to the functional design of the system to realize the complete coding. The second-hand trading website uses Dreamweaver, hbuilder code editor, Apache server and other development tools to complete the page design and function implementation of the main modules of the system. This paper shows the implementation effect diagram of the home page, and introduces the implementation process of user registration function, commodity publishing function, recharge order function, information feedback function, add purchase and view purchase function, generate order and view my order function, online payment function and order management function through code and page.
Key words: E-commerce; Hbuilder code editor; Product search
目 录
21世纪是一个以网络为核心的信息时代,数字化、网络化与信息化为特征的时代。这些多元化的组合在国际贸易和商业领域得到了广泛的应用,已经成为各国商务发展的一大趋势。应运而生的网上二手交易平台作为信息时代的一种新的商品交易形式,不仅对商品销售的运作方法和过程产生了巨大的影响,而且也带来了一场革命,这场革命的影响将远远超过在线购物本身的意义,它还将会在社会的生产和管理、人们的生活和就业、政府职能、法律制度以及文化等方面改变人类的思维观念和人际交往模式。
跳蚤市场(Group purchase)就是二手商品的交易市场,在当前在高校中,往往在临近毕业时是常见的,网上二手交易平台商品多样化和价格低廉的优势,很受同学们的青睐,它也起到了商品再利用,节约资源的作用。然而在有如此多的优点的同时,也有着许多的缺点,比如只有在毕业之际,人们才比较聚集,在平常,人们难以聚集起来这样买二手商品,而且平常也没有时间去这样买。
由于近年来在线销售行业的兴起,也了解了一些相关信息。在中国,以前的销售只是传统销售,而在线销售似乎满足了市场需求。到目前为止,有一些家喻户晓的名字,如淘宝和天猫。然而,这种在线销售也有一些缺点:用户不能在下订单并付款后立即提货,他们还应该考虑货物是否受损。该系统是根据商品网络上的销售情况开发的。
经过几年的发展,许多被消费者认可的网上购物中心已经出现在国内外。这些网上购物中心的内容是多样化的,它们包含的功能相对完善,包括注册用户、搜索商品、管理订单、介绍商品细节以及在线留言。如今,互联网的广泛使用在一定程度上导致了国内外在线购物中心的发展,只要企业通过这个平台在线打字,就可以随时管理系统的内容。通过展示商品内容和发布公告,鼓励消费者购买和进行在线交易。
根据市场调研得到的信息数据,结合国内外前沿研究,利用相关系统开发和设计方法,最终设计出网上二手交易平台。
本文共有七章,如下所示。
第一章概述了网上二手交易平台的研究目的和意义;精炼地总结了国内外在内的领域研究情况和未来的研究趋势,最后给出了论文的组成结构。
第二章简要概述了本文所用的开发技术和工具。
第三章简要对系统各业务流程进行需求分析、可行性分析。
第四章对网上二手交易平台进行设计。
第五章对网上二手交易平台进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第六章对网上二手交易平台采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第七章总结全文并对未来的研究做出展望。
PHP是一种面向对象的程序设计语言,类是PHP程序的基本组成单元,类中又包含了属性和方法,在类中又可以创建无数个对象。类中包含的主要成员是字段和方法,字段是指一种数据变量,方法是指对字段进行操作的集合,包括给其他变量赋值、调用方法等[1]。PHP代码都是编写在类体中,类体中的每个数据项都可以看作是一个对象,PHP不支持类的多重继承,但可以支持接口的多重继承,并且支持类和接口的实现[2]。由于PHP通常在网络环境中使用,所以PHP提供了一个防止代码恶意攻击的安全机制,同时,PHP具有强类型机制、自动收集垃圾和异常处理等特性,这些都是PHP语言健壮性的重要保证[3]。
1、PHP语言具有如下特点:
(1)PHP 结合 C、Java、Perl 以及自创的新语法形成了自己独特的语法。
(2)PHP可以更快速的执行动态网页,当然这只是相对于CGI或者Perl来说,PHP可以在HTML文档中嵌入程序,而且去执行,另外PHP能够实现CGI的所有功能,因此说明PHP具有很强大的功能[4]。
(3)大部分当下流行的数据库和操作系统PHP语言都能够支持。
(4)PHP语言的最重要特点就是可以让C、C++进行扩展
2、PHP语言具有如下优势:
(1)开放源代码:事实上PHP的所有源代码都可以得到。
(2)免费性:PHP是开源代码并且免费
(3)快捷性:PHP对于初学者来说,它不止编辑简单可以嵌入与HTML语言中,而且对于程序开发和运行也是非常快速的,并且非常容易掌握。
(4)跨平台性强:PHP是可以在服务器运行的脚本语言,所以在UNIX、Android、Mac OS、WINDOWS等操作平台上都可以运行[5]。
(5)效率高:PHP对系统资源的消耗相当少,所以它的效率高。
(6)图像处理:PHP不止是可以使用GD2对图像进行处理,而且他还可以完成对图像的创建。
(7)面向对象:php4、php5对于PHP在面向对象上,有了许多的改进,PHP语言开发大型商业程序也是可以胜任的[6]。
此作品中,其中包含了页面的搭建,以及前后台数据接口的连接等,而对于实现用户页面交互以及一些页面逻辑性判断等功能都是用JavaScript完成的[7],而JavaScript是已经被广泛用于Web应用开发,是一种属于网络的脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能。JavaScript作为一种描述语言,作用于web前端,它基于对象(object)和事件驱动(Event Driven)并且安全性也较好。它可以有效的在客户端运行并为服务器减轻负担[8]。
1、JavaScript具有的特点:
(1)脚本语言。JavaScript是一种脚本语言并具有解释性,在程序运行过程中,它就可以进行解释[9]。
(2)基于对象。JavaScript可以创建对象,而且还可以使用现在存在的对象,它是基于对象的脚本语言。
(3)简单。JavaScript不对使用的数据类型有着严格的要求,应用的是弱类型的变量类型,设计是十分紧凑简单。
(4)动态性。JavaScript是可以不经过Web服务器对用户的操作做出相应,是可以采用事件驱动的脚本语言。
(5)跨平台性。JavaScript可以不依赖操作系统,但需要浏览器的支持。所以在编写JavaScript脚本后可以在任意机器上使用,但要注意的一点,使用的浏览器是支持JavaScript脚本语言,现在大多浏览器也支持JavaScript[10]。
2、JavaScript的用途
JavaScript的用途是解决页面交互和数据交互,最终目的是丰富客户端效果以及数据的有效传递[11]。
(1)实现页面交互,提升用户体验实现页面特效。即js操作html的dom节构或操作样式。
(2)客户端表单验证。当数据传送到服务端前,可以将用户填入并上交的信息快速有效的验证,进行了数据的交互,为服务器减轻了负担[12]。
Mysql Database,通常简称为Mysql,是一款关系型数据库的管理系统。Mysql数据库系统是目前最流行的关系型数据库管理系统之一,其系统具有良好的可移植性,功能强大且使用十分方便[8]。Mysql支持很多系统和硬件,包括HP-UX,Linux,MicrosoftWindows,SunSolaris,AppleMac等[13]。
Mysql系统的特点:
(1)Mysql的多线索服务器的体系结构使其只利用很少的资源就能够支持多用户的、大数据的高性能事务处理;
(2)Mysql支持大量的多媒体数据,例如声音、动画、二进制图形和多维数据结构等;
(3)Mysql提供了安全保密管理系统,具有良好的安全性、一致性和完整性;
(4)具有新的分布式数据库能力和分布处理的能力;
(5)提供了一些高级语言的接口软件,可以帮助快速开发基于客户端的应用程序,具有良好的移植性、可连结性和可兼容性[14]。
Mysql数据库逻辑结构包含表空间(tablespace)、段(segment)、范围(extend)、数据块(datablock)、和模式对象(schemaobject) 。每一个数据库都可以逻辑划分为一个或多个表空间,每一个表空间都是由一个或多个数据文件来组成。Mysql数据库分为系统表空间和非系统表空间,每一个Mysql数据库都包含一个称作SYSTEM的系统表空间。
AJAX是创建交互式网页的一种开发技术,利用AJAX技术可以实现以无刷新网页的方式更新HTML元素中的内容。传统的网页如果要更新网页内容,必须重新加载整个页面,而AJAX使用异步数据传输在网页和Web服务器之前传递HTTP请求,这样可以使网页只请求少量信息,而不用刷新整个页面[15]。
本系统将在经济、技术、操作这三个角度上进行可行性分析。
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于PHP语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
网上二手交易平台的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用PHP技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
前台需求:
(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理和用户买入卖出查询等功能。
(2)商品模块:主要包括商品浏览、商品信息展示、商品搜索、商品购买等功能。
(3)购买模块:主要包括添加购买、查看我的购买和删除购买等功能。
(4)订单模块:主要包括生成订单、我的订单、查看订单详细信息、在线支付、确认收货等功能。
(5)留言反馈模块:主要让买家向卖家进行消息的反馈,然后由卖家来回复反馈问题。
后台需求:
(1)用户管理:主要包括用户列表、用户等级管理和用户评论管理等功能。
(2)商品管理:主要包括商品列表、充值管理、商品信息管理等功能。
(3)订单管理:主要包括订单状态管理。
(4)地区管理:主要包括地区的管理。
系统用例图如下所示。
图3-1系统用例图
随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。
系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。
网上二手交易平台的前台中,用户模块和商品模块进行数据交互,实现购买的功能。前台的功能主要包括用户模块、商品模块、充值模块、购买模块和订单模块。
网上二手交易平台的后台中,管理员对用户在前台提交申请产生的数据进行处理,以满足用户的需求。前台系统和后台系统有数据交互,整个系统各个部分相互独立又密不可分。后台的功能主要包括用户管理、商品管理、充值管理、订单管理。
系统业务流程图如下所示。
图3-2系统业务流程图
软件系统的功能是多样的,在软件设计的过程中分层进行的思维是极为重要的,这样的思维可以在软件开发的过程中很大程度降低层之间的耦合度,这一点是符合“低耦合、高内聚”的软件设计原则的。因此,可以把网上二手交易平台划分为显示层、数据层和业务层。在系统的架构中,为了方便上层调用完成相应的功能,每个层次都会为其对应的上层提供相应的接口。
系统架构图如下所示。
图4-1系统架构图
1.显示层
此层主要是为用户提供计算机交互的UI界面,它根据用户的相应操作来提供相应的逻辑处理。
2.数据库层
数据库不仅是对软件所涉及的实体映射,而且也是系统读取和处理数据的关键所在。本系统的整个操作流程设计都是围绕着数据库里面的数据所展开的。
3.业务层
主要是通过系统的业务层中的业务逻辑来实现业务需求,依据相应的需求,剖析实现的策略和对应的业务逻辑,其优劣,在很大程度上决定了软件的质量,所以,整个系统成败的主要原因在于业务的逻辑实现。
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4-2系统功能结构图
注册/登录
游客(未进行注册或登陆的用户)可以浏览、搜索商品,但不能进行收藏和购买。用户注册首先需要进行表单验证,来验证用户名和手机号码是否合法,然后验证用户名和手机号是否已经存在,验证通过即可注册。
注册成功后,用户可以通过输入用户名来登录系统,输入密码后进行验证。登录成功后,用户可以使用商品收藏、商品购买、查看我的订单、个人信息管理等功能。
个人信息管理
用户登录系统后,在账户设置中,可以修改昵称、头像、手机号、登陆密码、收货地址等个人基本信息。
商品搜索
系统首页展示了商品搜索输入框,用户在输入框内输入与商品名称相关的关键字,系统通过模糊查询搜索到用户需要的商品并展示。
商品信息展示
用户在浏览商品时,点击某一个商品,跳转到该商品的信息展示页。在商品信息页面展示了商品的详情信息,比如商品介绍,商品详情,商品销量和收藏量,商品评价等,用户通过浏览信息了解商品的主要功能和评价,最终决定是否购买。
商品购买
在商品信息页面,用户可以通过点击“购买”进行购买商品,点击后跳转到订单生成页面。订单生成页面会展示商品信息,收货地址,优惠信息等,用户确认后信息无误点击“提交”生成订单,订单生成后跳转到支付页面,支付完成则购买成功。
查看订单详情
用户在查看我的订单列表时,可以点击某一个订单来查看该订单的详细信息,主要包括订单编号、订单状态、订单日期、订单中的商品、交易金额等。
商品列表
管理员可以在“商品列表”中展示商城中需要销售的商品,包含商品名称,商品属性以及类目等商品信息。管理员可以对商品进行搜索,按分类查询商品。
商品添加
添加商品首先需要输入商品基本信息,如商品名称、商品数量、商品分类等;然后需要编辑商品信息详情,如商品规格,商品描述,商品图片等。管理员也可以删除已添加的商品。
商品管理
用户在购买商品时需要选择商品规格,管理员可以设置商品规格的名称以及展示的顺序等。管理员还可以给商品规格添加属性值,也可以删除不需要的属性值。同时,管理员可以编辑商品信息,如商品介绍、商品展示图片等,方便用户浏览。
留言反馈管理
卖家可以在后台为用户提供建议服务,卖家可以查看用户建议的状态,对于没有及时回复的建议快速给予回答。卖家还可以进行建议分类,比如购物的流程、对商品的疑问、支付方式等。通过分类添加,方便用户查看,使用户获得更好的用户体验。
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。
图4-3系统E-R图
在图中,用户购买商品,关系为1:N,管理员审核商品,关系为1:N,用户和购买的关系为1:1,用户和订单的关系为1:N。
针对系统的实体和属性,结合数据设计思想,对系统的逻辑设计的内容进行如下描述。
商品(商品编号、物品名称、物品类型、物品价格、物品数量、物品图片、上架人)。
订单(订单编号、物品编号、物品名称、物品类型、物品价格、物品数量、购买数量、总价格、预存金、交易方式、上架人、购买人、是否支付)。
反馈(反馈编号、标题、回复内容、接受人、反馈人)。
数据库表是设计和实现系统的一个重要基础。以下列出了该购物系统几个重要的数据库表。
campus_management | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
campus_management_id | int | 11 | 否 | 主键 | 校区管理ID |
campus | varchar | 64 | 是 | 校区 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
cart | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
cart_id | int | 11 | 否 | 主键 | 购物车ID |
title | varchar | 64 | 是 | 标题 | |
img | varchar | 255 | 否 | 图片 | |
user_id | int | 10 | 否 | 用户ID | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
state | int | 1 | 否 | 状态使用中,已失效 | |
price | double | 8 | 否 | 单价 | |
price_ago | double | 8 | 否 | 原价 | |
price_count | double | 10 | 否 | 总价 | |
num | int | 8 | 否 | 数量 | |
goods_id | mediumint | 8 | 否 | 商品id | |
type | varchar | 64 | 否 | 商品分类 | |
description | varchar | 255 | 是 | 描述 | |
collect | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
collect_id | int | 10 | 否 | 主键 | 收藏ID |
user_id | int | 10 | 否 | 收藏人ID | |
source_table | varchar | 255 | 是 | 来源表 | |
source_field | varchar | 255 | 是 | 来源字段 | |
source_id | int | 10 | 否 | 来源ID | |
title | varchar | 255 | 是 | 标题 | |
img | varchar | 255 | 是 | 封面 | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
goods | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
goods_id | mediumint | 8 | 否 | 主键 | 产品id |
title | varchar | 125 | 是 | 标题 | |
img | text | 0 | 是 | 封面图 | |
description | varchar | 255 | 是 | 描述 | |
price_ago | double | 8 | 否 | 原价 | |
price | double | 8 | 否 | 卖价 | |
customize_field | text | 0 | 是 | 自定义字段 | |
sales | int | 10 | 否 | 销量 | |
inventory | int | 11 | 否 | 商品库存 | |
type | varchar | 64 | 否 | 商品分类 | |
hits | int | 10 | 否 | 点击量 | |
content | longtext | 0 | 是 | 正文产品的主体内容 | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
img_1 | text | 0 | 是 | 主图1 | |
img_2 | text | 0 | 是 | 主图2 | |
img_3 | text | 0 | 是 | 主图3 | |
img_4 | text | 0 | 是 | 主图4 | |
img_5 | text | 0 | 是 | 主图5 | |
source_table | varchar | 255 | 是 | 来源表 | |
source_field | varchar | 255 | 是 | 来源字段 | |
source_id | int | 10 | 否 | 来源ID | |
user_id | int | 11 | 是 | 添加人 | |
order | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
order_id | int | 11 | 否 | 主键 | 订单ID |
order_number | varchar | 64 | 是 | 订单号 | |
goods_id | mediumint | 8 | 否 | 商品id | |
title | varchar | 32 | 是 | 商品标题 | |
img | varchar | 255 | 是 | 商品图片 | |
price | double | 10 | 否 | 价格 | |
price_ago | double | 10 | 否 | 原价 | |
num | int | 8 | 否 | 数量 | |
price_count | double | 8 | 否 | 总价 | |
norms | varchar | 255 | 是 | 规格 | |
type | varchar | 64 | 否 | 商品分类 | |
contact_name | varchar | 32 | 是 | 联系人姓名 | |
contact_email | varchar | 125 | 是 | 联系人邮箱 | |
contact_phone | varchar | 11 | 是 | 联系人手机 | |
contact_address | varchar | 255 | 是 | 收件地址 | |
postal_code | varchar | 9 | 是 | 邮政编码 | |
user_id | int | 10 | 否 | 买家ID | |
merchant_id | mediumint | 8 | 否 | 商家ID | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
description | varchar | 255 | 是 | 描述 | |
state | varchar | 16 | 否 | 订单状态 | |
ordinary_users | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
ordinary_users_id | int | 11 | 否 | 主键 | 普通用户ID |
campus | varchar | 64 | 是 | 校区 | |
gender | varchar | 64 | 是 | 性别 | |
examine_state | varchar | 16 | 否 | 审核状态 | |
recommend | int | 11 | 否 | 智能推荐 | |
user_id | int | 11 | 否 | 用户ID | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
second_hand_mall | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
second_hand_mall_id | int | 11 | 否 | 主键 | 二手商城ID |
seller_number | int | 11 | 是 | 卖家编号 | |
campus | varchar | 64 | 是 | 校区 | |
hits | int | 11 | 否 | 点击数 | |
recommend | int | 11 | 否 | 智能推荐 | |
cart_title | varchar | 125 | 是 | 标题 | |
cart_img | text | 0 | 是 | 封面图 | |
cart_description | varchar | 255 | 是 | 描述 | |
cart_price_ago | double | 8 | 否 | 原价 | |
cart_price | double | 8 | 否 | 卖价 | |
cart_inventory | int | 11 | 否 | 商品库存 | |
cart_type | varchar | 64 | 否 | 商品分类 | |
cart_content | longtext | 0 | 是 | 正文产品的主体内容 | |
cart_img_1 | text | 0 | 是 | 主图1 | |
cart_img_2 | text | 0 | 是 | 主图2 | |
cart_img_3 | text | 0 | 是 | 主图3 | |
cart_img_4 | text | 0 | 是 | 主图4 | |
cart_img_5 | text | 0 | 是 | 主图5 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
seller | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
seller_id | int | 11 | 否 | 主键 | 卖家ID |
campus | varchar | 64 | 是 | 校区 | |
gender | varchar | 64 | 是 | 性别 | |
seller_number | varchar | 64 | 否 | 卖家编号 | |
examine_state | varchar | 16 | 否 | 审核状态 | |
recommend | int | 11 | 否 | 智能推荐 | |
user_id | int | 11 | 否 | 用户ID | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 |
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登录界面如下图所示。
图5-1登录界面
登录系统主要代码如下。
{
if (Request::isPost()) {
$request = Request::param();
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->login($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function login($request=[],$table_name = ''){
$username = $request['username'];
$password = $request['password'];
$bol = $this->where(['username'=>$username])->find();
if ($bol){
$password = md5($password);
if ($request['password']==$bol['password']) {
//添加token信息
$access_token['create_time'] = date('Y-m-d H:i:s');
$access_token['update_time'] = date('Y-m-d H:i:s');
$access_token['info'] = json_encode($bol);
// $access_token['info'] = $bol;
$access_token['token'] = md5(date('Y-m-d H:i:s'));
$bol_token = Db::name('AccessToken')->insert($access_token);
if ($bol_token){
$data['obj'] = $bol;
$data['obj']['token'] = $access_token['token'];
return ['result' => $data];
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,token生成失败']];
}
} else {
return ['error' => ['code' => 5000, 'message' => '登录失败,密码不正确']];
}
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,账号不存在']];
}
}
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览、购买商品,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。
图5-1首页界面
首页关键代码如下。
$obj = $this->where($where)->field($field)->find();
$result = self::allowField(true)->save($request);
$result = $this->where($where)->update($request);
$result = $this->where($where)->delete();
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码和手机号,页面进行表单验证,验证输入的用户名和手机号是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名和手机号实现页面无刷新验证,检测数据库中是否已经存在该用户名或手机号,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册界面如下所示。
图5-1用户注册界面
用户注册代码如下:
public function register()
{
if (Request::isPost()) {
$request = Request::param();
$request['create_time'] = isset($request['create_time']) ? $request['create_time'] : date('Y-m-d H:i:s');
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->register($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function register($request=[],$table_name = ''){
$username = $request['username'];
$bol = $this->where(['username'=>$username])->find();
if (!$bol){
$result = self::allowField(true)->save($request);
if ($result) {
return ['result' => 1];
} else {
return ['error' => ['code' => 3000, 'message' => '注册失败']];
}
}else{
return ['error' => ['code' => 3000, 'message' => '注册失败,账号已存在']];
}
}
商品展示页是展示系统商品的页面,通过sql语句:"select shangpinxinximingcheng,id,tupian,jiage,addtime from shangpinxinxi order by addtime desc",将所有是商品按商品编号降序排列。
商品展示页面,如下图所示。
图5-1商品展示页面
商品展示主要代码如下。
public function get_list($request=[],$table_name = '',$table_id = ''){
$page = 1;
$size = $table_name == "auth" ? 100 : 10;
$where = [];
$order = $table_id.'_id desc';
$field = '*';
// echo $order;exit;
$columns = Db::query( "show COLUMNS FROM `".$table_name."`");
foreach($columns as $key=>$val){
$field_name = $val['Field'];
if(isset($request['like'])){
if ($request['like']==true){
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, '=', $request[$field_name]];
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
//范围查询
if(isset($request[$field_name.'_min'])){
$where[] = [$field_name, '>=', $request[$field_name.'_min']];
}
if(isset($request[$field_name.'_max'])){
$where[] = [$field_name, '<=', $request[$field_name.'_max']];
}
}
//分页
if (isset($request['page'])){
$page = $request['page'];
}
if (isset($request['size'])){
$size = $request['size'];
}
//排序
if (isset($request['order'])){
$order = $request['order'];
}
//查询字段
if (isset($request['field'])){
$field = $request['field'];
}
//模糊查询
$list= $this->where($where)->order($order)->field($field)->page($page, $size)->select()->toArray();
foreach($list as &$l){
foreach($l as &$o){
if(strpos($o,$_SERVER['HTTP_HOST']) === false){
$o = str_replace('upload','http://'.$_SERVER['HTTP_HOST'].'/upload',$o);
}
}
}
return $list;
}
系统首页提供了搜索商品的输入框,用户在输入框内输入想要查找商品的关键字,点击搜索按钮,系统将用户输入的关键字传递到后台。首先创建一个实体类 PageBean,该实体类的属性包括页码 pageCode、每页记录数 pageSize、总记录数 totalRecord 和一个 List 集合 beanList,利用输入的关键字对数据库进行模糊查询,将得到的结果存入 PageBean 中,返回PageBean 跳转到 goodList.php 页面,在 goodList.php 页面,使用循环将搜索到的结果分页展示。
商品搜索界面如下图所示。
图5-1商品搜索界面
用户在浏览商品时,对于心仪的想要购买的商品,可以将该商品添加到购买中。点击“添加购买”按钮,页面将该商品的数据传递到后台,首先查询数据库购买表中是否已经存在该商品,若存在直接将商品数量加一,若不存在则创建一个新的购买对象,添加购买成功,数据库中的购买表添加一条信息。用户还可以点击“我的购买”查看添加到购买的商品,系统通过读取 session获取到用户 ID,将用户 ID 传递到后台,在购买表中查询该用户的所有购买信息,返回数据到我的购买页面。
商品购买界面如下图所示。
图5-1商品购买界面
个人购买界面如下图所示。
图5-1个人购买界面
商品购买主要代码如下:
public function add($request=[],$table_name = '',$table_id = ''){
$result = self::allowField(true)->save($request);
if ($result) {
return ['result' => 1];
} else {
return ['error' => ['code' => 3000, 'message' => '数据添加失败']];
}
}
用户在lyblist查看留言信息,先使用sql语句查询出所有留言表的数据,返回一个数组对象,在for循环里,使用php得到每个数组对象的数据,然后放入页面模板中,用户点击我要留言则跳转至lyb.php。
在线留言界面如下图所示。
图5-1在线留言界面
留言回复界面如下图所示。
图5-1留言回复界面
在线留言主要代码如下。
{
$request = Request::param();
if (isset($request['groupby']) && isset($request['field'])) {
if (!empty($request['groupby']) && !empty($request['field'])) {
$result = $this->model->avg_group($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
return json_encode($data);
}
管理员对系统用户的管理,在yhzhgl.php实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,提交到mod.php中,使用sql命令更新密码。
用户管理界面如下图所示。
图5-1用户管理界面
登录密码修改界面如下图所示。
图5-1登录密码修改界面
登录密码修改的逻辑代码如下。
public function change_password()
{
$accessTokenModel = new AccessTokenModel();
$token = Request::header('x-auth-token');
if (!empty($token)) {
$result = $accessTokenModel->getToken($token);
if (Request::isPost()) {
$get = Request::get();
$keys = array_keys($get);
$where = [];
if ($result) {
$where[] = ["user_id", '=', $result['user_id']];
$i = 0;
foreach ($get as $key => $val) {
$where[] = [$keys[$i], '=', $val];
$i++;
}
$request = Request::post();
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
$new_password['password'] = $request['password'];
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$result = $this->model->change_password($new_password, $this->table, $this->table_id, $where);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "token错误或失效,未查询到用户数据";
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
} else {
$data['error'] = 30000;
$data['message'] = "token的值不能为空!";
}
return json_encode($data);
}
管理员可以获取系统中所有商品的列表并对其进行编辑。管理员在添加商品时,需要输入商品基本信息,如名称、价格、规格等,还需要输入商品详情描述,包括对商品功能的描述以及展示图片等。添加商品完成,数据库商品表添加一条信息。管理员可以搜索商品,同时可以对已经添加的商品进行编辑。
商品管理界面如下图所示。
图5-1商品管理界面
商品管理主要代码如下。
{
//上传文件目录获取
$month = date('Ym', time());
$data = 'file';//文件域
$path = 'upload/file/' . $month . "/";//上传文件保存位置
$allow_ext = explode(",", "jpg,jpeg,png,jfif,bmp,gif,ico,xls,xlsx,AVI,mov,rmvb,rm,FLV,mp4,3GP");
if ($_FILES) {
$file = $_FILES[$data];
$rst = [];
if (!empty($file['name'])) {
$file_type = explode('.', $file['name']);
$ext = end($file_type); //获取文件的格式
$ext = strtolower($ext);
if (!in_array($ext, $allow_ext)) {
$rst['error']['code'] = 30000;
$rst['message'] = '只能上传jpg,jpeg,png,jfif,bmp,gif,ico,xls,xlsx,AVI,mov,rmvb,rm,FLV,mp4,3GP类型文件';
} else {
if (!is_dir($path))//判断目录是否存在
{
mkdir($path, 0777, true);//如果目录不存在则创建目录
};
$name = date('YmdHis') . '_' . rand(10000, 99999) . '.' . $ext;
$save_rst = move_uploaded_file($file['tmp_name'], $path . $name);
if ($save_rst !== false) {
// $rst['code'] = 1;
$rst['result']['url'] = 'http://'.$_SERVER['HTTP_HOST'].'/'.$path . $name;
// $rst['ext'] = $ext;
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '文件上传失败';
}
}
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '未选择文件';
}
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '未获取到文件';
}
return json_encode($rst);
}
管理员在后台管理界面点击到所有订单界面dingdan_list.php,向控制层dingdanAction发送请求,搜索当前所有订单信息,dingdanAction向订单数据访问层调用搜索全部订单的请求,向数据库的订单表搜索当前所有订单并将订单信息以对象的形式层层返回到dingdan_list.php界面,显示出当前所有订单信息。同时可以删除过期订单,确认已有订单,进行发货处理。
订单管理界面如下图所示。
图5-1订单管理界面
订单管理主要代码如下。
{
$request = Request::param();
if (isset($request['field'])) {
if (!empty($request['field'])) {
$result = $this->model->sum_field($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
}
以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在3秒钟内响应;需要完成页面的菜单栏、首页轮播图片、类目及商品列表以及各功能模块入口等元素的显示。
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表6-1系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
4 | 购买管理 | 1.购买清单是否可以生成。 2.验证消费信息是否准确。 | 通过 |
5 | 商品管理 | 1.商品信息是否与上传一致。 2.是否能完成价格修改。 3.验证库存信息修改。 | 通过 |
6 | 订单处理 | 1.能否正常上传单号完成发货。 2.验证数据准确性。 | 通过 |
7 | 添加商品 | 1.上传商品是否添加验证。 2.图片是否成功上传。 3.验证表单是否提交成功。 | 通过 |
8 | 用户管理 | 1.验证用户录入功能。 2.验证用户违规清理功能。 | 通过 |
集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。
在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。
本文针对网上二手交易平台的特点和用户需求,利用 PHP相关技术、Web 开发技术和MVVM 模式等技术,通过详细的需求分析、页面设计和功能设计,最终实现了一个基于 PHP 的网上二手交易平台。
系统利用 Html 提供的标签库、JQuery 技术和 CSS 技术进行了系统页面设计,实现了包括用户模块、商品模块、购买模块和订单模块的前台系统以及包括用户管理模块、商品管理模块、订单管理模块的后台系统。另外,系统还进行了数据安全设计和推荐商品模块设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的网上二手交易平台。
该系统的特点有:
(1)简单大方,易于操作的 Web 页面;
(2)利用 Ajax 技术使页面进行无刷新更新;
(3)根据用户的浏览和购买记录,向用户推荐可能感兴趣的商品;
(4)系统具有商品搜索功能,使用户能够简单方便的找到自己心仪的商品;
(6)有良好的安全性和可扩展性,增强了系统的可靠性,使系统保持持久的生命力。
由于时间限制和本人能力条件有限,该系统还存在一些不足,今后也会出现许多新的开发技术,未来还可以对系统做出如下改进:
(1)优化系统页面,使页面更加美观且方便操作;
(2)优化商品搜索功能,提供多条件选择查询搜索;
(3)优化商品推荐功能,提高商品推荐的精准度;
(4)优化在线支付功能,提供更多支付接口,使用户付款更加方便;
(5)进一步提高系统的安全性,使系统更加健壮;
(6)优化数据和代码,提升软件效率,方便系统维护和扩展。
[1]黄建澍.浅谈“互联网+”对外贸的影响(深圳)[J].知识经济,2016(15).
[2]张周平.2017年度中国电子商务市场数据监测报告[R].电子商务研究中心,2018.
[3]PanH,JiangWR,YanJ,etal.DesignandImplementationofE-commerceFeatureMajorWebsite[C]//SecondInternationalConferenceonMultimedia&InformationTechnology.IEEE,2015.
[4]中国互联网络信息中心,李静.第41次《中国互联网络发展状况统计报告》发布[J].中国广播,2018.
[5]HeidarzadehHanzaeeK,JavanbakhtA.Theeffectsofshoppingenvironmentonconsumptionemotions,perceivedvaluesandbehavioralintentions[J].ManagementScienceLetters,2013:2501-2512.
[6]彭非.B2B电子商务模式在我国的研究现状及发展趋势探析[J].金融经济,2017(2):85-87.
[7]曹继东.互联网+科技自媒体创新与盈利模式[R].北京:中国科技新闻学会,2015.
[8]艾维娜,杨坚争.B2B电子商务平台发展及存在的问题[J].电子商务,2018.
[9]LeeRST.ANewEraofIntelligente-CommerceBasedonIntelligentJavaAgent-BasedDevelopmentEnvironment(iJADE)[M]//Internet-BasedIntelligentInformationProcessingSystem,2015.
[10]卢信文,武志学.关于程序设计入门语言的教学改革研究[J].电脑知识与技术,2015(4):101-103.
[11]邱仲潘,张星成,宋智军.高级程序设计语言:PHP版[M].清华大学出版社,2015.
[12]ChenKY,ChangJ,HouTW.AnEnergy-EfficientJavaVirtualMachine[J].IEEETransactionsonCloudComputing,2015:1-1.
[13]宦臣.JavaWeb开发中MVC模式的研究[J].时代教育(教育教学版),2015(21).
[14]LiJH,MengFX,WenXM.TheDesignandRealizationofLibraryMISBasedonMVC[J].AdvancedMaterialsResearch,2013,756-759:1114-1118.
[15]于湛麟,李仲秋,任永昌.SSH框架实现MVC架构的电子商务软件平台[J].计算机技术与发展,2016(10).
[16]张南平,朱富利.基于MVC模式的Struts框架的研究与应用[J].计算机技术与发展,2016,16(3).
[17]张晓峰.基于MDA的Web信息系统设计与实现[D].上海交通大学,2016.
[18]陈力行.基于开源框架的教学辅助平台的设计与实现[D].电子科技大学,2017.
[19]宁承林.基于MVC模式的Struts框架在J2EEWEB应用中的研究与实现[D].北京邮电大学,2015.
[20]WojciechowskiJ,SakowiczB,DuraK,etal.MVCmodel,strutsframeworkandfileuploadissuesinwebapplicationsbasedonJ2EEplatform[C]//ModernProblemsofRadioEngineering,Telecommunications&ComputerScience,InternationalConference.IEEE,2014:342-345.
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。
点赞+收藏+关注 → 私信领取本源代码、数据库