简易的在线书籍商城原型设计和实现
一、前言
网上购物如今在人们的生活中成了必不可少的一部分,如何便捷的向全国商家展示并出售商品成了一个十分重要的问题。在线商城的构建可以有效解决这一问题。而在当今这个网络普及的社会,网页的制作、开发与管理是十分热门和流行的,比如淘宝、天猫、京东这些网店云集的购物平台,拥有一个出色的网购平台是一切交易的前提和基础。
因此这次的任务就是开发一个网店交易的网页,需要利用到Navicat for MySQL、XAMPP作为开发软件,同时利用PHP、HTML、JavaScript以及一部分的CSS语言来进行网页的设计与制作,同时后期数据库的开发与维护也需要用到一些SQL语言。电子商务是以信息网络技术为手段,以商品交换为中心的商务活动;也可理解为在互联网、企业内部网和增值网上以电子交易方式进行交易活动和相关服务的活动,是传统商业活动各环节的电子化、网络化、信息化。
二、需求分析
1.功能设计原则
需求差异性:商城后台逻辑区分顾客与商家,功能同样区别设置,同类功能需区别设置具体逻辑判断
逻辑简洁性:简化用户操作逻辑,减少功能层次,减少操作步骤
边界清晰性:功能响应需要设置明确的判断边界条件
2.功能需求大纲
1) 用户管理需求
a.用户注册:注册成为网站的会员
b.用户登录:登陆网站进行购物
c.用户信息修改:用户修改个人的基本信息
d.用户注销:用户退出登录
2) 客户需求
a.提供电子目录,帮助顾客搜索发现需要的商品
b.进行同类产品比较,帮助顾客进行购买决策
c.购物车功能实现
d.为购买产品下订单
e.撤销和修改订单
f.支付订单
3) 商家需求
a.检查用户的注册信息
a.处理顾客订单
b.完成客户选购产品的结算,处理客户付款
c.能够进行商品信息发布和修改
d.商品库存管理
3.功能需求清单
模块 |
功能 |
功能简述 |
优先级 |
完成状态 |
通用模块 |
登录 |
通过输入框键入用户名和密码与数据库用户信息表进行匹配,匹配确认已注册且用户名与密码对应则完成登录 |
P1 |
已完成 |
通用模块 |
注册 |
通过输入框键入用户名、密码、姓名、手机号码等信息,若用户名不重复则写入数据库用户信息表 |
P1 |
已完成 |
通用模块 |
支付 |
根据已选择订单订单号,键入用户支付密码,读出数据表中该用户密码,配对成功则完成支付,不匹配则提示错误 |
P1 |
已完成 |
通用模块 |
注销账户 |
在数据库中执行当前登录账户的删除操作 |
P3 |
已完成 |
通用模块 |
修改账户信息 |
通过输入框键入完整新的用户信息,在数据库中执行当前登录账户的信息修改操作 |
P2 |
已完成 |
通用模块 |
查询 |
通过固定输入框键入QQ号/商品名/用户名/订单号/书名/作者名等搜索匹配相对应信息的数据条 |
P2 |
已完成 |
顾客模块 |
生成商品订单 |
通过勾选选项框并输入采购数量及购买者QQ号,完成订单基本信息,后台分配订单号,并匹配商品信息,写入订单细节表和订单基本信息表 |
P1 |
已完成 |
顾客模块 |
提交订单 |
通过选择的订单的订单号读出数据表中相应订单信息,进入订单支付环节 |
P1 |
已完成 |
顾客模块 |
加入购物车 |
通过勾选选项框并输入采购数量,完成心仪商品基本信息,并匹配商品信息,然后将商品基本信息写入购物车表 |
P2 |
已完成 |
顾客模块 |
移除购物车 |
通过勾选商品,选中希望删除的商品,将相应商品信息从购物车表中删除 |
P2 |
已完成 |
顾客模块 |
订单撤销 |
通过选择的订单的订单号读出数据表中相应订单信息,将订单信息从订单细节表和订单基本信息表中删除 |
P1 |
已完成 |
顾客模块 |
咨询客服 |
在后台为客服设置固定关键词及问题语句并设置相应回答,顾客通过对话框输入想要咨询的问题,完成与客服的交流并获取回复 |
P3 |
已完成 |
顾客模块 |
年/月度消费统计 |
以订单号为依据,截取固定时间段内该用户所有已完成订单数据,读出订单金额加和求得总消费 |
P2 |
已完成 |
顾客模块 |
已支付/未完成订单总金额 |
通过支付完成标志判断该用户已支付/未完成的订单,读出订单金额加和求得已支付/未完成的订单总额 |
P2 |
已完成 |
商家模块 |
查看订单 |
从数据库中读出该商家账户发布的所有商品的订单信息,进行打印显示 |
P1 |
已完成 |
商家模块 |
修改订单价格 |
选中订单,以订单号匹配从数据库中读出对应订单价格,修改后重新存入对应订单的价格栏 |
P2 |
已完成 |
商家模块 |
订单发货 |
选中订单,以订单号匹配从数据库中读出对应订单价格,发货后在后台修改相应订单的发货标志位,顾客实时可见状态更新 |
P2 |
已完成 |
商家模块 |
查看商品 |
从数据库中读出该商家账户发布的所有商品的信息,打印显示 |
P1 |
已完成 |
商家模块 |
添加商品 |
通过输入书籍名称、作者、价格、库存数量、卖方编号并上传封面图等信息,后台分配商品号,写入商品信息表 |
P1 |
已完成 |
商家模块 |
删除商品 |
选中商品,通过匹配商品号获取商品信息表中相应商品的数据,并执行删除操作从该表中删去该数据条 |
P1 |
已完成 |
商家模块 |
修改商品信息 |
选中商品,通过匹配商品号获取商品信息表中相应商品的数据,重新输入更新后完整的商品信息覆盖该条数据 |
P2 |
已完成 |
4.系统可行性分析
1) 技术可行性
随着windows以及各种设计软件、开发语言、编程软件的发展,设计并开发电子商务系统是可行的。
在设计阶段,可以通过使用MS Visio工具绘制系统总体结构功能图、ER图;使用PowerDesigner工具设计概念模型、物理模型、数据字典;使用Navicat for MySQL工具生成数据库;
在编码阶段,可以使用PHP、HTML、js、JavaScript等开发语言、notepad++编码工具相结合实现编码,使用XAMPP工具实现系统运行,最终完成系统开发。
以上这些技术和开发工具都是当下比较成熟的,可以完成该系统的开发,并且有很多当前已经成功的系统可以作为参考,所以在技术上完全可行。
4) 操作可行性分析
系统使用最流行的网页设计形式,并采用浏览器为框架的原生组件进行设计,使用的界面简便容易操作,构造的组建具有诱导性,让用户用起来很是便利简捷。当然数据存储也十分便利与安全,也不会造成死机!所以在操作上也是可行的。
三、系统总体设计
一个管理信息系统常常是一个数据库应用系统,通常由三部分组成:数据库、数据库管理系统、数据库应用程序。
在书籍商城系统中:
数据库存储着顾客基本信息、商家信息、订单信息、商品信息等;
数据库管理系统对数据库进行管理;
数据库应用程序向外给用户提供了一个数据库数据的显示界面,同时获取用户的命令,向内通过数据库管理系统对数据库进行增、删、改等操作,并将数据库对命令的反应输出给用户。
1.系统功能结构图
根据需求分析,可用 亿图 制作系统功能结构层次图如下图2:
图2 系统功能层次结构图
5.实体关系图(ERD)
对应制成ER图如下图3:
图3 ER 图
由于需要php_admin、t_order0、t_product、t_orderdetail和t_shopcar等几个数据表,则对数据库的实体和关系说明如下:(加下划线表示键码)
实体说明:
用户(php_admin):用户ID(userid)、用户姓名(username)、密码(password)、商家/顾客的标志(usertype)、用户年龄(userage)、手机号(usermobile)
商品(t_product):书籍编码(productcode)、书籍名称(productname)、作者名称(singer)、卖家编码(sellercode)、书籍价格(price)、书籍封面(productimage)、书籍库存(stocknumber)
购物车(t_shopcar): 买家ID(userid)、书籍编码(productcode)、购买数量(purchasenumber)
订单(t_order0):订单ID(orderid)、订单编码(ordercode)、买家ID(userid)、买家QQ号(QQnum)、订单价格(orderprice)、订单状态(ispay)、发货状态(issend)
订单详情(t_orderdetail):订单ID(orderid)、产品代码(productcode)、价格(price)、购买数量(purchasenumber)、商品图片(productimage)
关系说明如下:
一个买家(admin)可以有多个订单(order),一个订单(order)只对应一个买家(admin)。
一个卖家(admin)可以拥有多种商品(product),一种商品(product)只能对应一个卖家(admin)。
一个订单(order)至少包含一种商品(product),一种商品(product)可以对应多个订单(order)。
一个订单(order)至少对应一个订单详情(orderdetail),一个订单详情(orderdetail)只能对应一个订单(order)。
一种商品(product)可以对应一个订单详情(orderdetail),一个订单详情(orderdetail)只能对应一种商品(product)。
一个顾客只拥有一个购物车,一个购物车也只能对应一个顾客,是一对一的关系。而一个购物车里可以存放多个购买书籍的信息,多个购买的书籍对应一个购物车,是一对多的关系。
四、数据库设计
1.概念模型
将第四步中的ER图用Powerdesigner进行设计,得到概念模型如下图4所示:
图4 概念模型图
6.物理模型
将图4中的概念模型用Powerdesigner生成物理模型如下图5所示:
图5 物理模型图
7.Sql脚本
根据物理模型用Powerdesigner生成Sql脚本,部分脚本语言如下(为避免冗杂,其余略):
/*==============================================================*/
/* Table: admin */
/*==============================================================*/
create table admin
(
userid varchar(200) not null,
username varchar(50) null,
password varchar(50) null,
tradepassword char(6) null,
usertype char(1) null,
Ispay char(1) null
Issend char(1) null
constraint PK_ADMIN primary key (userid)
);
/*==============================================================*/
/* Table: t_shopcart */
/*==============================================================*/
create table t_shopcar
(
Userid char(50) not null,
productcode integer null,
Purchasenumber integer null
constraint PK_PRODUCT primary key (userid)
);
/*==============================================================*/
/* Table: "t_order0" */
/*==============================================================*/
create table "t_order0"
(
orderid integer not null,
userid char(50) not null,
ordercode char(12) not null,
QQnum char(500) not null,
orderprice decimal(12) null,
ispay char(1) not null,
constraint PK_ORDER primary key (orderid)
);
/*==============================================================*/
/* Table: orderdetail */
/*==============================================================*/
create table orderdetail
(
orderid integer(11) not null,
productcode integer(6) not null,
price decimal(10) null,
purchasenumber integer(200) null,
productimage char(200) null,
constraint PK_ORDERDETAIL primary key clustered (orderid, productcode)
);
/*==============================================================*/
/* Table: product */
/*==============================================================*/
create table product
(
productcode numeric(6) not null,
productname varchar(50) null,
sellercode char(6) null,
price decimal(10) null,
productimage varchar(200) null,
stocknumber numeric(11) null,
Writer char(50) null
constraint PK_PRODUCT primary key (productcode)
);
8.数据库列表
表单号 |
表单名 |
功能 |
php_admin |
用户信息表 |
储存用户个人信息 |
t_product |
商品信息表 |
储存商品信息 |
t_order0 |
订单信息表 |
储存订单信息 |
T_orderdetail |
订单物品详情 |
订单中各种商品的具体信息 |
t_shopcar |
购物车表 |
储存用户购物车信息 |
9.数据库连接
此次上机着重掌握PHP与数据库的用法,在进行功能开发前,首先要掌握连接数据库的相关语句:
(1)mysql_connect(server,user, pwd ,new link,client flag):用于打开非持久的 MySQL 连接,如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE。
(2)mysql_select_db(connection,database): 函数设置活动的 MySQL 数据库。如果成功,则该函数返回TRUE,如果失败,则返回 FALSE。
(3)mysql_query(connection,query):执行一条MySQL查询,仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
(4)mysql_affected_rows(link_identifier):函数返回前一次 MySQL 操作所影响的记录行数,执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1。
(5)mysql_fetch_array(data):函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有返回根据从结果集取得的行生成的数组,如果没有更多行则返回FALSE。
mysql_close(connection):关闭数据库连接。
10.数据流图
图6 数据流图
五、系统实施
1.登录模块
1) 界面
图7 登录界面
2) 功能
登录时,分成两种类型的用户,分别为顾客和商家。输入用户名和密码,匹配正确后即可登录,登陆后的界面内容分别对应不同类型的用户。
3) 实现
运用一个表单form,包含用户名文本框、密码文本框以及登录、注册两个button按钮。点击登录时,连接数据库,查询user表,比对用户名与密码是否匹配,匹配成功即可登录。点击注册时,即跳转到注册界面。
4) 部分代码
$sql = "select flag from user where userid = '".$name."' and password = '".$password."'"; //返回登录用户的标志(商家or用户)
$RS = mysql_query($sql);
$row = mysql_fetch_array($RS);
$flag = $row[0];
session_start();;//记录下该用户,进入系统后,若五分钟内对系统不进行操作,将自动退出系统,用户需再次登录,保证用户账号以及系统的安全性。
$_SESSION["username"] = $name;
$_SESSION["flag"] = $flag;
header("location:http://localhost/dzsw/user.php");//登录成功,跳转至主页面
}
else//用户名与密码不匹配,给出提示信息,跳回登录界面
{
echo"<script>alert('Wrong username or password');history.go(-1);</script>";
}
mysql_close($con);
1.注册模块
1) 界面
图8 注册界面
2)功能
注册模块进行用户个人信息填写,选择注册的账户类型,输入用户账号、用户、密码、用户姓名、用户年龄、用户手机等信息完成注册。信息按格式填写好后即可注册成功。
由于用户ID是唯一的,所以采用Ajax技术检测重名.
3)实现
运用一个表单form,包含五个文本输入框以及注册、返回两个button按钮。当用户名填写完后,如果用户名已被注册,则会立即给出提示信息。点击注册时,检验信息填写是否符合格式要求。若不符合要求则给出提示信息。若信息填写正确,则连接数据库,用insert语句将该新用户的信息置入user表。
4)部分代码
sql代码如下:
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
$userid = $_POST['userid'];
$password = $_POST['password'];
$username = $_POST['username'];
$userage = $_POST['userage'];
$usermobile = $_POST['usermobile'];
$usertype = $_POST['usertype'];
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$sql1 = "insert into php_admin(userid,username,userage,password,usermobile,usertype) values('$userid','$username','$userage','$password','$usermobile','$usertype')";
//echo $sql1; die();
$RS0 = mysql_query($sql1, $con);
header("location: userlogin.htm");
这部分的代码核心为JavaScript脚本。
<script src="clienthint.js"></script>
<script language="javascript">
function register()
{
if ((document.getElementById("txtHint").innerHTML) != '')//Ajax检测用户ID
{
alert("userid重复");
return false;
}
if (document.getElementById("txtHint").value == "")
{
alert("userid不能为空");
return false;
}
if (document.getElementById("username").value == "")
{
alert("username不能为空");
return false;
}
if (document.getElementById("password").value == "")
{
alert("password不能为空");
return false;
}
if (document.getElementById("tradepassword").value == "")
{
alert("交易密码格式不正确");
return false;
}
form1.action="usersave.php";//注册成功,保存到数据库
form1.submit();
}
function reback()
{
form1.action="login.php";//返回登陆界面
form1.submit();
}
</script>
2.顾客——功能菜单模块
功能:顾客模块包括查询商品、购买商品、将商品加入购物车、提交订单、取消订单、查询订单、订单付款、咨询客服、个人信息管理和退出等功能,在顾客模块主界面可分别进入子模块,查询商品子模块可查看商品信息,进行商品购买后,可进入我的订单模块查看我的订单信息,订单状态包括是否已经付款以及订单是否已经发货。
个人中心模块可查看和修改自己的个人信息,同时也可注销自己的账户。退出按钮可退出系统。
顾客页面左侧树列表图如下:
3.顾客——查询商品模块
1) 界面
图9 选择商品界面
图10 生成订单
图11 生成订单成功
5) 功能
①:查看商品界面可以通过专辑名称,或歌手名称查询自己想购买的专辑,同时有分页功能。
②:可以选择喜欢的专辑添加进入购物车
③:在填写完购买数量和购买者QQ号后,会根据订单下单的时间,生成新的订单。
④:支付界面可进行订单确认并付款,需要输入支付人的账号密码,核实正确后才能付款成功,也可取消订单或返回上一界面。(此处支付密码的验证为验收后新增)
5) 实现
①:查看商品界面通过查询t_product表得到商品信息,再运用一个表单form,显示商品信息,包含一个table、商品名文本框以及搜索、按销量、按价格三个button按钮和一个hidden标签。当专辑名称或歌手名填写完后,点击搜索按钮时,查找数据库t_product表中名称与输入文本相关的商品。表格下方配有首页、上页、下页、末页、跳转五个超链接和一个页码文本框,输入页码,点击跳转后即可通过script代码到达相应的页面。同时,商品的图片也是一个超链接,点击后可跳转至该商品的详细信息界面并携带参数商品ID。
②:加入购物车时,通过存储在checkboxes里的信息,往t_shopcar表中加入勾选专辑的编码信息,以及购买的数量信息。
②:根据用户在选择商品界面时输入的参数如购买商品代码、及购买数量等合并存储在checkboxes的数组里面,然后通过超链接的方式跳转到添加订单界面,并且将订单数据$_POST传递过来,而在添加订单的过程中,直接调用Navicat中的存储过程对t_product表格的库存,t_order0表格以及t_orderdetail表格中的数据进行修改,并遵循roll back原则,即若有一个数据修改失败,则所有数据重新修改,保证表格之间逻辑性的正确。
③:支付界面运用一个表单form,包含一个table、付款、返回和两个button按钮。进入支付界面后,先检查库存,如果库存不足则给出提示信息,如果库存足够则马上把订单信息写入数据库t_order0表中,订单状态为未付款。点击付款后就更新数据库中t_product表的库存值和t_order0表的订单状态为已付款。点击取消订单就删除数据库t_order0表中的订单信息。
6) 部分代码
HTML代码部分省去了很多,主要展示部分SQL语句(这里列出分页功能的代码,之后的模块中不再展示分页功能):
① 查看商品界面
session_start();
if (($_SESSION['userid'] == ''))
{
die('<script language="javascript">top.location.href="loginexit.php"</script>');
}
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$productname = $_POST['productname'];
$singer = $_POST['singer'];
$SQL = "select * from t_product where productname like '%". $productname ."%'";
if($singer)
{
$SQL = "select * from t_product where singer like '%". $singer ."%'";
}
$RS0 = mysql_query($SQL, $con);
// Script代码部分
<script>
function btnsel_onclick() {
document.form1.submit();
}
function btnpri_onclick() {
document.all.h.value="1"; //按价格升序
document.form1.submit();
}
function URLStr(){
return "<?php echo strval($PageName) ?>?selname=<?php echo strval($selname)?>";
}
function goPage(){
var vtf = true;
if(document.form1.goPageNo.value == ""){
alert("请输入要跳转的页码!");
document.form1.goPageNo.focus();
vtf = false;
}
if(isNaN(document.form1.goPageNo.value)){
alert("要跳转的页码必须为数字!");
document.form1.goPageNo.select();
vtf = false;
}
if(vtf) Overturn(document.form1.goPageNo.value);
}
function Overturn(p){
var Str = URLStr();
window.location=Str + "¤tpage=" + p;
}
function addorder(stocknumber)
{
var r = /^\+?[1-9][0-9]*$/;
var checkboxes = document.getElementsByName("checkbox1");
var texts = document.getElementsByName("text1");
var str = [];
var QQnum = document.getElementsByName("QQnum");
for(i=0;i<checkboxes.length;i++){
if(checkboxes[i].checked){
str.push(checkboxes[i].value);
if (texts[i].value=="" || !(r.test(texts[i].value)))
{ alert('请输入购买数量'); return false; }
if (QQnum[i].value=="" || !(r.test(QQnum[i].value)))
{ alert('请输入购买者QQ号'); return false; }
if(2000 < texts[i].value)
{
alert('商品余量不足,请修改购买数量');
return false;
}
str.push(texts[i].value);
}
}
document.getElementById("checkedproduct").value = str;
if((""==str))
{
alert('请选择商品添加订单'); return false;
}
else
{
alert('生成订单成功!');
document.form1.action = 'addorderX.php';
document.form1.submit();
}
}
function addshopcar(stocknumber)
{
var r = /^\+?[1-9][0-9]*$/;
var checkboxes = document.getElementsByName("checkbox1");
var texts = document.getElementsByName("text1");
var str = [];
for(i=0;i<checkboxes.length;i++)
{
if(checkboxes[i].checked)
{
str.push(checkboxes[i].value);
if (texts[i].value=="" || !(r.test(texts[i].value)))
{ alert('请输入购买数量'); return false; }
str.push(texts[i].value);
}
}
document.getElementById("checkedproduct").value = str;
if((""==str))
{
alert('请选择商品加入购物车'); return false;
}
else
{
alert('加入购物车成功!');
document.form1.action = 'addshopcar.php';
document.form1.submit();
}
}
② 生成订单
生成订单分为两部分:
I)在商品目录直接勾选商品提交订单
SQL存储过程代码如下:
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
set @i=0;
SET @cnt = 1+(LENGTH(checkedproduct) - LENGTH(REPLACE(checkedproduct,',','')));
set @i=1;
START TRANSACTION;
insert into t_order0(ordercode,userid,QQnum,ispay) values(varordercode,varuserid,varQQnum,'0');
set @orderid=(select orderid from t_order0 where ordercode=varordercode limit 1);
WHILE @i <=@cnt DO
SET @result = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
SET @result1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
insert into t_orderdetail(orderid, productcode, price, purchasenumber, productimage) values(@orderid, @result, (select price from t_product where productcode= @result limit 1), @result1, (select productimage from t_product where productcode= @result limit 1));
update t_product set stocknumber=stocknumber-@result1 where productcode=@result;
END WHILE;
update t_order0 set orderprice = (select sum(purchasenumber*price) from t_orderdetail where orderid=@orderid) where ordercode=varordercode;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
Ii)在购物车内勾选商品提交订单
SQL存储过程代码如下:
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
set @i=0;
SET @cnt = 1+(LENGTH(checkedproduct) - LENGTH(REPLACE(checkedproduct,',','')));
set @i=1;
START TRANSACTION;
insert into t_order0(ordercode,userid,QQnum,ispay) values(varordercode,varuserid,varQQnum,'0');
set @orderid=(select orderid from t_order0 where ordercode=varordercode limit 1);
WHILE @i <=@cnt DO
SET @result = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
SET @result1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
set @purchasenumber = (select number from t_shopcar where productcode = @result limit 1);
set @totalprice = (select totalprice from t_shopcar where productcode = @result limit 1);
insert into t_orderdetail(orderid, productcode, price, purchasenumber, productimage) values(@orderid, @result, @totalprice, @purchasenumber, (select productimage from t_product where productcode= @result limit 1));
update t_product set stocknumber=stocknumber-@purchasenumber where productcode=@result;
delete from t_shopcar where productcode = @result;
END WHILE;
update t_order0 set orderprice = (select sum(price) from t_orderdetail where orderid=@orderid) where ordercode=varordercode;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
iii)选择商品的代码核心为JavaScript脚本。
<script language=javascript>
function addorder()
{
var r = /^\+?[1-9][0-9]*$/;//正则表达式
var checkboxes = document.getElementsByName("checkbox1");
var texts = document.getElementsByName("text1");
var str = [];
for(i=0;i<checkboxes.length;i++){
if(checkboxes[i].checked){
str.push(checkboxes[i].value);//将复选框的值写入str
if (texts[i].value=="" || !(r.test(texts[i].value))) { alert('请输入购买数量'); return false; }
str.push(texts[i].value); //将对应的采购数量写入str
}
}
document.getElementById("checkedproduct").value = str;
if((""==str)){
alert('请选择商品添加订单'); return false;
}else{
document.form1.action = 'addorder0.php';
document.form1.submit();
} }
</script>
注:var r = /^\+?[1-9][0-9]*$/;
^ 这表示以其后面的字符开头
[0-9]* 这个匹配0个或0个以上的0-9之间的数字
[1-9] 匹配一个1-9之间的数字
$ 这表示以其前面的字符结尾
4.顾客——付款模块
1) 界面
图12 支付界面
图13 支付提示界面
图14 支付完成跳转至订单查询
7) 功能
付款时,顾客输入6位密码,如果密码正确,网站会提示密码正确,然后跳转到订单查询的界面。否则,网站会提示密码输入错误,然后要求顾客重新输入密码付款。点击左上角的“×”可以退出付款界面。
8) 实现
首先,利用css代码进行页面设计。然后,统计用户输入密码的个数,当输入密码个数为6时,会连接数据库,在t_admin表里利用userid这个键码进行匹配。
9) 部分代码
密码输入和匹配的代码核心为下面的JavaScript脚本。
<script>
var password="";
function clean()//删除密码
{
if(password.length>0){
password=password.substr(0,password.length-1);
}
for(var i=5;i>=0;i--){
var pwd=document.form.p[i];
if(pwd.value!=""){
pwd.value="";//清空对应位置的数字
break;
}
}
}
function put(m)
{
for(var i=0;i<6;i++){
var pwd=document.form.p[i];
if(pwd.value=="")//对应位置写入并记录密码
{
pwd.value=m;
password+=m;
break;
}
}
if(document.form.p[5].value!="")//匹配
{
if(password==<?php echo strval($passcode) ?>)//匹配成功
{
alert("支付成功!");
form.action="payorder.php";
form.submit();
}
else
{
alert("密码错误,支付失败!");
}
}
}
</script>
5.顾客——购物车模块
1) 界面
图16 加入购物车
图17 购物车界面
图18 于购物车提交订单成功
图19 未输入QQ号提示错误
图20 未勾选商品提示错误
10) 功能
在商品页面勾选需要购买的专辑后,即可点击添加购物车按钮(此时不需要填买家QQ号信息),在正确填写购买数量后(若填写格式错误会报错),且购买数必须小于库存数,才能加入购物车成功,(此时由于商品还未下单,库存暂时不减少),加入购物车成功后在购物车页面就能看到购买的专辑清单,在该页面还能进行商品的移除,把不需要的专辑勾选批量移除购物车。
11) 实现
构建一个新表t_shopcar,包含购物车内专辑的编码、购买数量以及买家的ID信息,通过sp_addshopcar存储过程,在上一个商品目录勾选好商品,并点击添加购物车按钮后,即将所勾选的商品信息存储至t_shopcar,并在购物车页面进行购物车内所有商品信息的显示。
12) 部分代码
sp_addshopcar 存储过程代码如下:
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
set @i=0;
SET@cnt=1+(LENGTH(checkedproduct) - LENGTH(REPLACE(checkedproduct,',','')));
set @i=1;
START TRANSACTION;
WHILE @i <=@cnt DO
SET @result = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
SET @result1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(checkedproduct , ',', @i),
LENGTH(SUBSTRING_INDEX(checkedproduct , ',', @i -1)) + 1),
',', '');
SET @i = @i + 1;
set @totalprice = @result1 * (select price from t_product where productcode= @result limit 1);
insert into t_shopcar(productcode, productname, number, totalprice, productimage) values(@result, (select productname from t_product where productcode= @result limit 1), @result1, @totalprice, (select productimage from t_product where productcode= @result limit 1));
END WHILE;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
购物车显示页面html及php关键代码如下(包括清除购物车内商品功能):
<?php
session_start();
if (($_SESSION['userid'] == ''))
{
die('<script language="javascript">top.location.href="loginexit.php"</script>');
}
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$productname = $_POST['productname'];
$SQL = "select * from t_shopcar where productname like '%". $productname ."%'";
//echo $sql1; die();
$RS0 = mysql_query($SQL, $con);
//print_r(mysql_fetch_array($RS0));
?>
<HTML>
<HEAD>
<script language=javascript>
function addorder()
{
var r = /^\+?[1-9][0-9]*$/;
var checkboxes = document.getElementsByName("checkbox1");
var str = [];
var QQnum = document.getElementsByName("QQnum");
for(i=0;i<checkboxes.length;i++)
{
if(checkboxes[i].checked)
{
str.push(checkboxes[i].value);
if (QQnum[i].value=="" || !(r.test(QQnum[i].value)))
{ alert('请输入购买者QQ号'); return false; }
}
}
document.getElementById("checkedproduct").value = str;
if((""==str))
{
alert('请选择商品提交订单'); return false;
}
else
{
alert('提交订单成功!');
document.form1.action = 'addorder0.php';
document.form1.submit();
}
}
function deleteproduct()
{
var r = /^\+?[1-9][0-9]*$/;
var checkboxes = document.getElementsByName("checkbox1");
var str = [];
for(i=0;i<checkboxes.length;i++)
{
if(checkboxes[i].checked)
{
str.push(checkboxes[i].value);
}
}
document.getElementById("checkedproduct").value = str;
if((""==str))
{
alert('请选择商品进行移除'); return false;
}
else
{
alert('已成功移除购物车内商品');
document.form1.action = 'deleteshopcar.php';
document.form1.submit();
}
}
</script>
6.顾客——订单查询模块
1) 界面
图21 订单查询界面
图22 QQ号查询订单
13) 功能
①订单查询界面可分别查看各订单的详细信息,以及订单是否已经付款:未付款,已付款,商品是否发货成功:未发货、已发货。点击订单状态栏里的图片可进入订单详情页面。(若该订单是未付款订单则跳转至付款界面,未付款的订单可取消订单,若该订单为已发货订单则跳转至确认收货界面)
②同时,可以根据订单编号、或者购买者QQ号进行相关订单的搜索,直接获取需要的订单信息,方便用户进行查询订单操作。
③实现用户本月/半年度订单总金额统计,及已付款/未付款订单总额统计。
14) 实现
订单查询界面运用一个表单form,通过查询数据库中t_order0表的信息,显示我的订单信息,包含一个table、未付款、已付款、已发货和已收货四个button按钮点击相应按钮,通过超链接跳转至相应的界面。同时,订单状态栏的图片也是一个超链接,点击后可携带参数订单ID跳转至该订单的详细信息界面。
15) 部分代码
功能核心部分代码如下:(省略部分常规代码)
<?php
session_start();
if (($_SESSION['userid'] == '') || ($_SESSION['usertype'] <> '0'))
{
die('<script language="javascript">top.location.href="loginexit.php"</script>');
}
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$productname = $_POST['productname'];
$ordercode = $_POST['ordercode'];
$QQnum = $_POST['QQnum'];
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then CONCAT('<a href=javascript:beginpay(''', ordercode ,''')>未付款(点击付款)</a>') when '1' then '已付款' end) as ispay,(case issend when '0' then '未发货' when '1' then '已发货' end) as issend from t_order0 where userid='". $_SESSION['userid'] ."'";
$SQL = $SQL. "and orderid in (select t_order0.orderid from t_orderdetail,t_product,t_order0 where t_orderdetail.productcode=t_product.productcode and t_orderdetail.orderid=t_order0.orderid and t_order0.userid='".$_SESSION['userid']."' and productname like '%". $productname."%')";
if($ordercode)
{
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then CONCAT('<a href=javascript:beginpay(''', ordercode ,''')>未付款(点击付款)</a>') when '1' then '已付款' end) as ispay from t_order0 where userid='". $_SESSION['userid'] ."'";
$SQL = $SQL. "and orderid in (select t_order0.orderid from t_orderdetail,t_product,t_order0 where t_orderdetail.productcode=t_product.productcode and t_orderdetail.orderid=t_order0.orderid and t_order0.userid='".$_SESSION['userid']."' and t_order0.ordercode like '%". $ordercode."%')";
}
else if($QQnum)
{
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then CONCAT('<a href=javascript:beginpay(''', ordercode ,''')>未付款(点击付款)</a>') when '1' then '已付款' end) as ispay from t_order0 where userid='". $_SESSION['userid'] ."'";
$SQL = $SQL. "and orderid in (select t_order0.orderid from t_orderdetail,t_product,t_order0 where t_orderdetail.productcode=t_product.productcode and t_orderdetail.orderid=t_order0.orderid and t_order0.userid='".$_SESSION['userid']."' and QQnum like '%". $QQnum."%')";
}
//$SQL = $SQL. "and orderid in (select orderid from v_orderdetail where v_orderdetail.userid='".$_SESSION['userid']."' and productname like '%". $productname."%')";
$RS0 = mysql_query($SQL, $con);
<script language=javascript>
function beginpay(ordercode)
{
document.getElementById("ordercode").value = ordercode;
document.form1.action = 'pay.php';
document.form1.submit();
}
</script>
7.顾客——订单撤销模块
1) 界面
图23 订单撤销界面
16) 功能
该页面可以取消对应的订单,点击蓝色按键“取消订单”,即可将对应订单信息从数据库中清除。(若订单已付款,则用户无法点击取消订单,订单状态未付款才能取消订单)
17) 实现
在点击取消订单后,获取相应的订单编号,送至SQL语句中进行查询、删除操作,删除订单在t_order0以及t_orderdetail中的订单有关信息,若此时付款显示未付款,即ispay=0,取消订单按钮不可点击。
18) 部分代码
该功能实现核心代码如下:
$productname = $_POST['productname'];
$ordercode = $_POST['ordercode'];
$QQnum = $_POST['QQnum'];
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then '未付款' when '1' then '已付款' end) as ispay, (case ispay when '0' then CONCAT('<a href=javascript:cancelorder(''', ordercode ,''')>取消订单</a>') when '1' then '已付款' end) as cancel from t_order0 where userid='". $_SESSION['userid'] ."'";
$SQL = $SQL. "and orderid in (select t_order0.orderid from t_orderdetail,t_product,t_order0 where t_orderdetail.productcode=t_product.productcode and t_orderdetail.orderid=t_order0.orderid and ispay = '0' and t_order0.userid='".$_SESSION['userid']."' and productname like '%". $productname."%')";
//$SQL = $SQL. "and orderid in (select orderid from v_orderdetail where v_orderdetail.userid='".$_SESSION['userid']."' and productname like '%". $productname."%')";
8.顾客——客服模块
1) 界面
图24 客服咨询界面
2) 功能
该页面可以实现跟客服的咨询功能,用户如果有疑问可以直接在对话框中输入,点击发送,客服会根据用户提出的问题,做出相应的回答。
功能演示效果如下:
图25 咨询过程
3) 实现
在html中建立window对象,在输入框input相关问题后,通过button发送给JS,JS中检测输入信息不为空后,根据输入的字符串,在words.innerHTML中叠加输入相关的回答结果字符串,并进行输出,输出形态根据class进行实现定义,实现美观、简洁的一问一答客服咨询效果。
根据实际用户可能产生的疑问需求,在php内置入相关问题的答案,并作出有关回答,若无有关问题的答案,将进行默认回复。
4) 部分代码
该功能核心代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
.talk_con{
width:600px;
height:500px;
border:1px solid #666;
margin:50px auto 0;
background:#f9f9f9;
}
.talk_show{
width:580px;
height:420px;
border:1px solid #666;
background:#fff;
margin:10px auto 0;
overflow:auto;
}
.talk_input{
width:580px;
margin:10px auto 0;
}
.whotalk{
width:80px;
height:30px;
float:left;
outline:none;
}
.talk_word{
width:420px;
height:26px;
padding:0px;
float:left;
margin-left:10px;
outline:none;
text-indent:10px;
}
.talk_sub{
width:56px;
height:30px;
float:left;
margin-left:10px;
}
.atalk{
margin:10px;
}
.atalk span{
display:inline-block;
background:#0181cc;
border-radius:10px;
color:#fff;
padding:5px 10px;
}
.btalk{
margin:10px;
text-align:right;
}
.btalk span{
display:inline-block;
background:#ef8201;
border-radius:10px;
color:#fff;
padding:5px 10px;
}
</style>
<script type="text/javascript">
//
window.onload = function(){
var Words = document.getElementById("words");
var Who = document.getElementById("who");
var TalkWords = document.getElementById("talkwords");
var TalkSub = document.getElementById("talksub");
TalkSub.onclick = function(){
//定义空字符串
var strA = "";
var strB = "";
if(TalkWords.value == ""){
// 消息为空时弹窗
alert("消息不能为空");
return;
}
if(TalkWords.value == '请问我怎么看订单是否支付')
{
strB = '<div class="btalk"><span>我 :' + TalkWords.value +'</span></div>';
strA = '<div class="atalk"><span>客服 :' + '亲,您可以点击购买商品下的订单查询,右侧就可以看到订单状态了呢~' +'</span></div>' ;
}
else if(TalkWords.value == '请问我的手机号换了怎么办')
{
strB = '<div class="btalk"><span>我 :' + TalkWords.value +'</span></div>';
strA = '<div class="atalk"><span>客服 :' + '亲,您可以通过左侧菜单栏点击修改信息,输入您的新手机号就能成功修改了哦 :)' +'</span></div>' ;
}
else if(TalkWords.value == '我可以用微信付款吗')
{
strB = '<div class="btalk"><span>我 :' + TalkWords.value +'</span></div>';
strA = '<div class="atalk"><span>客服 :' + '可以的哦亲,我们这边提供支付宝和微信两种付款方式的' +'</span></div>' ;
}
else if(TalkWords.value == '如果我不想用这个账号了怎么办')
{
strB = '<div class="btalk"><span>我 :' + TalkWords.value +'</span></div>';
strA = '<div class="atalk"><span>客服 :' + '亲,您可以选择左侧的注销账户,所有您有关的账户信息,包括商品、购物车、订单等信息都会帮您清空的哦,然后您在首页注册新的账户就可以啦' +'</span></div>' ;
}
else
{
strB = '<div class="btalk"><span>我 :' + TalkWords.value +'</span></div>';
strA = '<div class="atalk"><span>客服 :' + '亲,这个疑问超出了我的范畴哦,我将为您通知后台的管理员来解决您的疑问~' +'</span></div>' ;
}
Words.innerHTML = Words.innerHTML + strB;
Words.innerHTML = Words.innerHTML + strA;
}
}
</script>
</head>
<body>
<div class="talk_con">
<div class="talk_show" id="words">
<div class="atalk"><span id="asay">客服:亲,我有什么可以帮助您的吗?</span></div>
</div>
<div class="talk_input">
<select class="whotalk" id="who">
<option value="1">我说:</option>
</select>
<input type="text" class="talk_word" id="talkwords">
<input type="button" value="发送" class="talk_sub" id="talksub">
</div>
</div>
</body>
</html>
9.商家——功能菜单模块
功能:商家模块包括添加商品,修改商品信息,管理库存,删除(下架)商品、订单查询、修改订单价格、发货等功能,在顾客模块主界面可分别进入子模块,添加商品子模块可添加商品。修改商品信息子模块可修改商品的专辑名称,卖方编码、专辑的价格、以及修改专辑的图片,同时该模块还可以用来修改商品的库存。查看订单模块可查看当前所有订单,并可根据订单编码和购买者QQ号进行订单查询。修改订单价格模块,可以对已经生成的订单进行改价,满足实际交易中的需求。在发货模块,商家可以查看每个订单的相关信息以及是否已经付款,对于已经付款的订单,可以直接点击进行发货。退出按钮可退出系统。
商家页面左侧树列表图如下:
10.商家——新增商品模块
1) 界面
图26添加商品界面
图27 完成添加商品
19) 功能
添加商品子模块可进行专辑信息填写,包括专辑名称、卖方编码、歌手姓名、专辑价格、专辑数量和专辑图片。信息按格式填写好后点击确定即可添加成功。
20) 实现
运用一个表单form,包含五个文本框和一个图片文件上传框以及添加商品(submit)按钮。当商品编码填写完后,如果专辑名称已被注册,则会立即给出提示信息。点击注册时,检验信息填写是否符合格式要求。若不符合要求则给出提示信息。若信息填写正确,则连接数据库,将该新商品的信息置入数据库中t_product表。
21) 部分代码
该功能核心代码如下:
<?php
session_start();
if (($_SESSION['userid'] == '') || ($_SESSION['usertype'] <> '1'))
{
die('<script language="javascript">top.location.href="loginexit.php"</script>');
}
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
$productname = $_POST["productname"];
$sellercode = $_POST["sellercode"];
$price = $_POST["price"];
$singer = $_POST["singer"];
$stocknumber = $_POST["stocknumber"];
$filename = $_FILES['file']['name'];
$image_src = "/images2/".$filename;
$filetype = strtolower(substr($filename,strrpos($filename,'.')+1)); //得到文件类型,并且都转化成小写
$upload_path = ""; //上传文件的存放路径
//开始移动文件到相应的文件夹
if(move_uploaded_file($_FILES["file"]["tmp_name"], "C:/xampp/phpdocs/images2/".$filename))
{
echo "商品信息添加成功!";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
echo $filename." 商品添加失败";
}
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$sql = "insert into t_product(productname,sellercode,singer,price,productimage,stocknumber) values('".$productname."','".$sellercode."','".$singer."','".$price."','".$image_src."','".$stocknumber."')";
mysql_query($sql);
$sql1 = "select * from t_product where productname='".$productname."'";
$RS0 = mysql_query($sql1, $con);
//print_r(mysql_fetch_array($RS0));
?>
11.商家——管理商品模块、修改商品信息模块
1) 界面
图28 管理商品界面
图29 管理商品界面查询商品
图30 修改商品信息界面
图31 修改信息成功
22) 功能
商家可通过专辑名搜索相关专辑商品,并可以点击商品右侧的修改商品信息按钮,跳转至修改商品信息页面,实现对商品信息的修改,也可以进行库存量的更新。
23) 实现
首先通过一个表单form,包含商品名输入框和搜索按钮,用table列出用户信息,table的最后两项为删除和修改的超链接,点击则可带着商品ID跳转至删除或修改界面。
修改商品信息:通过表单form添加修改的商品信息,使用submit提交文本框内容,使用update语句将t_product表中的数据更新。
24) 部分代码
功能核心部分代码如下:
$sql = "update t_product set price='$price',stocknumber='$stocknumber',productimage='$image_src' where productcode='$productcode'";
mysql_query($sql);
12.商家——删除商品模块
1)界面
图32 删除商品页面
图33 删除商品界面查询
图34 未勾选删除目标删除失败
图35商品删除成功
2)功能
商家可通过在商品架上进行勾选,并选择删除勾选商品,实现批量化的删除过期的专辑商品,方便线上商品的更新。必须需要提前勾选好商品,后面的修改才会生效,否则修改无效,提示需要勾选商品。
3)实现
通过checkbox实现对于商品的勾选,点击删除勾选商品按钮后,将根据checkbox中的商品信息,在SQL语句中进行查找和删除,在t_product表中删除对应商品的信息。
4)部分代码
<?php
session_start();
if (($_SESSION['userid'] == '') || ($_SESSION['usertype'] <> '1'))
{
die('<script language="javascript">top.location.href="loginexit.php"</script>');
}
header("Cache-Control: no-cache, post-check=0, pre-check=0");
header("Content-type:text/html;charset=gb2312");
//error_reporting(E_ALL);
$con = mysql_connect("localhost","root","sql");
mysql_select_db("qingzhou", $con);
mysql_query("set names gb2312 ");
$checkedproduct = $_POST['checkedproduct'];
//$purchasearray=explode(',',$checkedproduct,1000000);
$SQL = "call sp_deleteproduct('".$checkedproduct."')";
//echo $SQL; die();
$RS0 = mysql_query($SQL, $con);
if ($RS0==false) var_dump(mysql_error());
die('<script language="javascript">top.location.href="main.php"</script>');
//print_r(mysql_fetch_array($RS0));
?>
13.商家——查看订单模块、修改订单价格模块
1) 界面
图36 查看订单
图37 QQ号查询
图38 编码查询
图39 修改订单价格界面
图40 填入完整信息
2) 功能
查看订单界面商家可以查看当前所有的用户订单,并可根据订单编码、买家QQ号进行搜索操作,得到指定的用户订单信息,并可查看用户订单的支付状态。
在修改订单价格页面,可以根据订单编码对订单进行价格修改,以满足实际生活交易中,对于卖家需要给买家修改价格的需求,进行最终订单的价格调整。
25) 实现
首先获取form中输入的订单编码或买家QQ号的信息,进行用SQL查询语句,查询对应的订单信息并进行输出。修改订单价格时,根据输入的订单编码,用SQL中update语句进行对应订单价格的更新。
26) 部分代码
该两个子模块的核心部分代码如下:
$ordercode = $_POST['ordercode'];
$QQnum = $_POST['QQnum'];
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then '未付款' when '1' then '已付款' end) as ispay from t_order0 ";
//echo $SQL; die();
if($ordercode)
{
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then '未付款' when '1' then '已付款' end) as ispay from t_order0 where ordercode like '%". $ordercode."%'";
//echo $SQL; die();
}
else if($QQnum)
{
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then '未付款' when '1' then '已付款' end) as ispay from t_order0 where QQnum like '%".$QQnum."%'";
//echo $SQL; die();
}
$sql = "update t_order0 set orderprice='$orderprice' where ordercode='$ordercode'";
14.商家——查看支付情况、订单发货模块
1) 界面
图41 订单发货界面
图42 订单发货成功界面
6) 功能
商家查看订单支付状态信息,以及发货状态信息,若商品此时已经付款,且未进行发货,商家可以点击发货按钮进行发货(若用户此时未付款则发货按钮无效)
7) 实现
判断ispay,issend状态后,若ispay=1,issend=0,即付款未发货,商家可直接点击进行发货,将订单编码ordercode传入JS函数,调用对应的php文件,执行update订单发货信息的SQL语句。
27) 核心代码
$SQL = "select ordercode, QQnum, orderprice, (case ispay when '0' then '未付款' when '1' then '已付款' end) as ispay, (case issend when '0' then CONCAT('<a href=javascript:send(''', ordercode ,''')>未发货(点击发货)</a>') when '1' then '已发货' end) as issend from t_order0 ";
15.修改用户信息模块
1) 页面
图43、44、45 修改用户信息界面
8) 功能
该页面可以查看当前用户的信息(用户ID、用户姓名、用户类型、用户年龄、手机号码),并可进行相关的信息修改,输入有关信息进行提交即可完成修改,修改后可以直接查看到修改结果。
9) 实现
通过form输入用户需要修改的个人信息,用SQL对php_admin表进行数据库的修改操作,实现个人信息的管理功能。
10) 核心代码
$sql1="update php_admin SET username='$username',password='$password',userage='$userage',usermobile='$usermobile' WHERE userid='$userid'";
16.注销用户子模块
1) 界面
图46 注销用户界面
11) 功能
注销用户的信息,即可对于用户的个人信息在数据库中进行清空,同时保留已经付款的订单信息,确保信息系统的可靠性。
12) 实现
根据userid,使用SQL中delete语句,对用户信息表php_admin、和用户有关的订单表t_order0,订单细节表t_orderdetail中的相关信息进行删除,若检测到ispay=1,即不进行删除操作。
13) 相关代码
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
set @orderid = (select orderid from t_order0 where userid=varuserid);
delete from t_order0 where userid=varuserid and ispay=0;
delete from t_orderdetail where orderid=@orderid;
delete from t_shopcar;
delete from php_admin where userid=varuserid;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
posted on 2021-03-05 22:25 俯仰之间Johnny 阅读(806) 评论(0) 编辑 收藏 举报