PHP案例 简易网上书店之购物车设计.docx
《PHP案例 简易网上书店之购物车设计.docx》由会员分享,可在线阅读,更多相关《PHP案例 简易网上书店之购物车设计.docx(23页珍藏版)》请在冰豆网上搜索。
PHP案例简易网上书店之购物车设计
案例简易网上书店之购物车设计
一、概述
当会员从图书显示页面选择了所购图书并填写了购书的数量后,就要把书放入购物车中。
购物车就是记录存放会员暂时选定图书的数据表,对这个数据表的操作包括添加、更改、删除和查询。
当把选中的图书放入购物车时,就是向数据库添加数据;当查看购物车时,就是把数据库中的数据读出来,按一定的格式显示在浏览器上;当删除不想要的图书或更改购书的数量时,就是删除或更改数据表中的数据;当重新购物时,就要清除数据表中的数据。
二、系统架构
对购物车的操作发生在选中图书之后。
建立一个数据表记录会员选购的图书信息。
当进入图书显示页面,选定了想要的图书后,要更新数据表中的数据。
查看购物车,除了显示数据表中与会员有关的图书信息外,还提供变更购书数量和取消不想要的图书的表单,并交给相关程序处理。
在查看购物车页面也提供结算的入口。
同时定单也要从确定的购物车中提取数据。
因此,购物车页面应该具有以下功能:
1.添加购物车。
2.查看购物车。
3.修改购物车。
4.清除购物车。
本案例的工作流程图如图1所示。
图1
说明:
1.会员从图书显示页面选定图书,请求加入购物车;
2.处理了添加后,会员的去向可能是继续购书,那就回到显示页面,也可能想查看购物车,那就进入到查看购物车页面;
3.进入查看购物车页面后,会员能浏览到所选图书的信息,同时还能修改购书信息,也能选择继续购书,或结账;
4.清除购物车是在购物结束时发生。
三、系统设计
1.逻辑结构设计
根据对系统的功能描述,可得如图2所示的系统逻辑结构图。
图2
2.数据库设计
在MySQL数据库服务器上名为bookshop数据库内建立数据表buychat,各字段的定义和说明如下。
表buychat
字段
类型
NULL
说明
备注
buyid
Int(11)
否
购书序列号
auto_increment
userid
char(30)
否
会员登录id
bookid
Int(11)
否
书号
buynum
Int(11)
是
购买数量
buyprice
float
否
购买价格
buystatus
varchar
(2)
否
购买状态
f
注:
通过phpMyadmin建立,在MySQL的data文件夹中会自动创建以此数据库为名的文件夹,包含相关数据。
3.界面设计
添加购物车页面:
addchat.php
标题行
继续购书(submit)查看购物车(submit)
查看购物车:
checkchat.php
标题行
提示信息栏
取消
书名
出版社
价格
购买数量
合计
表单(复选框)
表单(文本框)
提示语:
取消某本书或修改了购书数量后,单击“修改”按钮
修改
(submit)
还要卖(submit)
结账(submit)
状态提示栏:
购书数量不能为0,请修改。
四、编码实现
1.添加购物车页面:
addchat.php
session_start();//创建会话
$userid=$_SESSION['userid'];//使用会话变量
include("sys_conf.inc");
//建立与SQL数据库的连接
$connection=@mysql_connect($DBHOST,$DBUSER,$DBPWD)ordie("无法连接数据库!
");
@mysql_query("setnames'gb2312'");
@mysql_select_db("bookshop")ordie("无法选择数据库!
");
$query="SELECT*FROMbookinforderbybookid";
$result=@mysql_query($query,$connection)ordie("读取数据失败!
1");
$query="SELECT*FROMbuychatwhereuserid='$userid'orderbybookid";
$result2=@mysql_query($query,$connection)ordie("读取数据失败!
2");
$i=1;
while($row2=mysql_fetch_array($result2))
{
$bc[$i][bookid]=$row2[bookid];
$bc[$i][buynum]=$row2[buynum];
$i++;
}
$count=1;
while($row=mysql_fetch_array($result))
{
if($bookbm[$count]=="sel")
{
if($buynum[$count]=="")
$buynum[$count]=0;
$p=0;
for($j=1;$j<=count($bc);$j++)
{
if($count==$bc[$j][bookid])
{
$p=1;
break;
}
}
if($p==1)
{
$buynu=$buynum[$count]+$bc[$j][buynum];
$query="UPDATEbuychatsetbuynum='$buynu'where(bookid='$count'anduserid='$userid')";
@mysql_query($query,$connection)ordie("添加购物车数据失败!
1");
}
else
{
$buynu=$buynum[$count];
$query="INSERTINTObuychat(buynum,buyprice,userid,buystatus,bookid)VALUES('$buynu','$row[priceyh]','$userid','f','$count')";
@mysql_query($query,$connection)ordie("添加购物车数据失败!
2");
}
}
$count++;
}
mysql_close($connection)ordie("无法断开与数据库的连接");
?
>
|
成功选购!
|
--addchat.php--
代码解读
1)获取会话变量——会员id
session_start();要把在登录时创建的会话变量(会员id)取出,必须先创建会话;
$userid=$_SESSION['userid'];获取会话变量,将在数据库操作中使用;
2)包含数据库服务器配置变量文件
使用include()函数把数据库服务器配置变量文件包括在程序中。
include()函数的参数是公共文件sys_conf.inc,用于设置系统使用的数据库全局变量。
--sys_conf.inc:
系统配置文件-->
php
//数据库配置全局变量
$DBHOST="localhost";
$DBUSER="root";
$DBPWD="";
?
>
3)写入或修改购物车中的数据
这个部分相对复杂些,主要算法是:
包含数据库服务器配置数据文件
连接数据库服务器
设置数据库服务器处理的字符集,以处理汉字在浏览器上的显示
打开数据库bookbook
读取数据表bookinf中的数据赋予变量$result
读取数据表buychat中指定会员的的数据并赋予变量$result2
依次提取字段bookid和booknum中的值
依次提取数据表bookinf中记录;
对被选中的记录
如果没有填写数量,就设置为0;
如果已经在数据表buychat中,就修改它的数量;
如果不在数据表buychat中,就把相关图书信息插入在表尾;
关闭数据库连接。
4)用HTML编写在浏览器上显示的添加购物车页面
注意:
继续购书的提交按钮表单交给newbook.php处理,而查看购物车按钮表单交给checkchat.php处理。
5)这段代码中用到的SQL命令
命令格式
含义
setnames'gb2312'
设置字符处理集为gb2312
SELECT*FROMbookinforderbybookid
获取数据表bookinf的所有记录
SELECT*FROMbuychatwhereuserid='$userid'orderbybookid
获取数据表bookchat中与登录会员相关的所有记录
UPDATEbuychatsetbuynum='$buynu'where(bookid='$count'anduserid='$userid')
更新数据表buychat中登录会员指定书号的购书数量
INSERTINTObuychat(buynum,buyprice,userid,buystatus,bookid)VALUES('$buynu','$row[priceyh]','$userid','f','$count')
把登录会员当前的购书信息插入到数据表buychat中
6)程序中用到的变量
变量名
取值
含义
$userid
字符串
记录会员ID
$connection
整数,标识连接数据库的句柄
记录连接数据库德指针
$query
SQL命令
记录SQL命令
$result,$result2
查询数据集
记录执行SQL命令后的返回结果
$count
整数
记录书号
$row,$row2
数组
记录查询数据集中的一条记录
$bc
查询数据集中的值,二维数组
记录查询结果数据集的值
$bookbm
数组
记录对每本书的选购状态
$buynum
数组
记录对每本书的选购数量
$p
逻辑值(0/1)
0-已经记录在购物车上
$i,$j
整数
记录查询数据集中的记录指针
7)程序中用到的函数
函数
用法
含义
count()
参数取数组型
统计数组中元素的个数
mysql_connect()
三个参数分别是服务器名,会员名,会员密码
连接到指定的数据库服务器上,访问会员建立的数据库
die()
参数取字符串型
返回字符串的信息,错误警报
mysql_query()
参数为SQL命令
执行SQL命令
mysql_select_db()
参数为数据库名
打开数据库文件
mysql_fetch_array()
参数为字符串
以数组返回查询数据集中的记录
mysql_close()
参数为标识连接数据库的句柄
关闭数据库文件
2.查看购物车:
checkchat.php
session_start();
$userid=$_SESSION['userid'];
include("sys_conf.inc");
//建立与SQL数据库的连接
$connection=@mysql_connect($DBHOST,$DBUSER,$DBPWD)ordie("无法连接数据库!
");
@mysql_query("setnames'gb2312'");
@mysql_select_db("bookshop")ordie("无法选择数据库!
");
//向数据库发送查询请求
$query="SELECT*FROMbuychatwhereuserid='$userid'orderbybookid";
$result=@mysql_query($query,$connection)ordie("读取数据失败!
1");
$query="SELECT*FROMbookinforderbybookid";
$result2=@mysql_query($query,$connection)ordie("读取数据失败!
2");
$count=1;
$errmsgnum="";
while($row=mysql_fetch_array($result))
{
$bc[$count][buyprice]=$row[buyprice];
$bc[$count][buynum]=$row[buynum];
$bc[$count][bookid]=$row[bookid];
$i=1;
while($rows=mysql_fetch_array($result2))
{
if($bc[$count][bookid]==$rows[bookid])
{
$bc[$count][bookname]=$rows[bookname];
$bc[$count][publisher]=$rows[publisher];
break;
}
$i++;
}
if($row[buynum]==0)
$errmsgnum="购书数量不能为0,请修改!
";
$count++;
}
mysql_close($connection)ordie("无法断开与数据库的连接");
?
>
查询购物车
--
.STYLE2{FONT-size:
14px;}
-->
|
购物车清单
|
echo$_SESSION['userid']?
>:
以下是你所选购的图书,你可以修改购买的数量或取消!
|
取消
书名
出版社
价格
购买数量
合计
for($j=1;$j<=count($bc);$j++)
{
echo"
";echo'';
echo''.$bc[$j][bookname].'';
echo''.$bc[$j][publisher].'';
echo''.$bc[$j][buyprice].'';
echo'
';
echo''.$bc[$j][buyprice]*$bc[$j][buynum].'';
echo"
";
}
?
>
|
取消某本书或修改了购书数量后,单击“修改”按钮
|
展开阅读全文
相关搜索
|