11.9 商品信息管理
普通用户可以查看和发布商品信息,本节介绍商品信息管理模块的实现过程。
11.9.1 分类查看商品信息
在系统首页的上方,有一个链接条,包括商品分类信息等链接。用户可以单击任意分类的超链接,进入按分类显示商品列表的页面,如图11-16所示。
查看商品信息的脚本是List.php,下面介绍List.php的主要代码。
1.显示转让和求购超链接
网站内的商品可以分为转让商品和求购商品两种情况。在List.php中,按转让商品和求购商品分别显示当前分类的商品信息。在页面的上方,显示转让和求购超链接。页面参数flag是转让和求购的标识,当flag=0时,当前页面显示转让商品信息;否则显示求购商品信息。页面参数tid表示页面显示的商品分类编号。
图11-16 按分类查看商品信息
显示转让和求购超链接的代码如下:
<?PHP
//读取参数, tid表示商品类型编号,flag表示转让或求购类型
$tid=intval($_GET["tid"]);
$flag=intval($_GET["flag"]);
if($flag==0)
{
?>
<B>转让信息</B> <a href="list.php?flag=1&tid=<?PHP echo($tid); ?>">求购信息</a>
<?PHP }
else
{
?>
<a href="list.php?flag=0&tid=<?PHP echo($tid); ?>">转让信息</a> <B>求购信息</B>
<?PHP } ?>
2.显示商品信息
在List.php页面中,程序将根据变量tid和flag的值从表Goods和表GoodsType中读取指定类别下所有的商品信息。代码如下:
<?PHP
//设置转让或求购的查询条件
if($flag==0)
{
$cond=" WHERE SaleOrBuy=1";
}
else
{
$cond=" WHERE SaleOrBuy=2";
}
//设置商品分类查询条件
if ($tid>0)
{
$cond=$cond." AND TypeId=".$tid;
}
//只查看未结束的商品
$cond=$cond." AND IsOver=0";
//创建Goods对象,读取满足条件的记录
include('Class\Goods.php');
$obj = new Goods();
$results = $obj->GetGoodslist($cond);
$m=0;
while($row = $results->fetch_row())
{
?>
<tr><td align=center bgcolor="#FFFFFF"><?PHP if ($row[5]=="")
{
?><img src="images/noImg.jpg" height=50 border=0>
<?PHP }
else
{
?><img src="user/images/<?PHP echo($row[5]); ?>" height=50 border=0>
<?PHP } ?></td>
<td align=center bgcolor="#FFFFFF"><a href="GoodsView.php?gid=<?PHPecho($row[0]); ?>" target=_blank><?PHP echo($row[3]); ?></a></td>
<td align=center bgcolor="#FFFFFF"><?PHP echo($row[6]); ?></td>
<td align=center bgcolor="#FFFFFF"><?PHP echo($row[8]); ?> </td>
<td align=center bgcolor="#FFFFFF"><a href="user/UserView.php?uid=<?PHPecho($row[15]); ?>" target=_blank><?PHP echo($row[15]); ?></a></td>
<td bgcolor="#FFFFFF" align="center"><?PHP echo($row[7]); ?></td>
</tr>
<?PHP $m=$m+1;
}
if ($m==0)
{
print "<tr><td bgcolor=#FFFFFF align=center colspan=6>暂无商品信息</td></tr>";
}
?>
11.9.2 添加商品信息
在分类查看商品信息页面中,登录用户单击“我要转让”或“我要求购”超链接,打开user/GoodsAdd.php,可以添加商品信息,如图11-17所示。
图11-17 添加商品信息页面
添加转让商品和求购商品都使用GoodsAdd.php,通过参数flag来区分它们。flag=0表示转让商品,flag=1表示求购商品。
下面将介绍GoodsAdd.php页面中的部分代码。
1.显示商品分类信息
当页面载入时,在下拉列表typeid中装载商品的分类名称,代码如下:
<select size="1" name="typeid">
<?PHP
include('..\Class\GoodsType.php');
$tid=intval($_GET["tid"]);
$obj = new GoodsType();
$results = $obj->GetGoodsTypelist();
while($row = $results->fetch_row())
{
?><option value="<?PHP echo($row[0]); ?>" <?PHP if ($row[0]==$tid)
{
?> selected <?PHP } ?>><?PHP echo($row[1]); ?></option>
<? } ?>
</select>
2.提交表单
用户输入商品信息后,单击“确定”按钮,提交拍卖商品信息表单,代码如下:
<form action="GoodsSave.php?flag=<? echo($_GET["flag"]); ?>" method=post name=form1 onsubmit="return CheckFlds()">
可以看到,表单名为form1,表单提交后,将由GoodsSave.php处理表单数据。在提交表单数据之前,程序将执行 CheckFlds()函数,对用户输入数据的有效性进行检查,只有当 CheckFlds()函数返回True时,才执行提交操作。
CheckFlds()函数的代码如下:
function CheckFlds(){
if (document.form1.aname.value==""){
alert("请输入商品名称!");
form1.aname.focus;
return false;
}
return true;
}
</Script>
下面介绍GoodsSave.php的部分代码。下面的程序将接收从GoodsAdd.php传递来的数据,并将它们转换为能够保存到数据库中的格式,代码如下:
<?PHP
//得到动作参数,如果为add则表示添加操作,如果为edit则表示更改操作
$StrAction=$_GET["action"];
//定义Goods对象,保存商品数据
include('..\Class\Goods.php');
$obj = new Goods();
$obj->GoodsName=$_POST["aname"];
$obj->TypeId=$_POST["typeid"];
$obj->SaleOrBuy=intval($_POST["flag"])+1;
$obj->GoodsDetail=$_POST["adetail"];
$obj->Price=$_POST["sprice"];
$obj->StartTime=$_POST["stime"];
$obj->OldNew=$_POST["oldnew"];
$obj->Invoice=$_POST["invoice"];
$obj->Repaired=$_POST["repaired"];
$obj->Carriage=$_POST["carriage"];
$obj->PayMode=$_POST["pmode"];
$obj->DeliverMode=$_POST["dmode"];
$obj->OwnerId=$_SESSION["user_id"];
if ($StrAction=="edit")
{
$gid=$_GET["gid"];
$obj->update($gid);
}
else
{
$obj->ImageUrl=$_POST["goodsimage"];
$obj->insert();
}
print "<h3>商品信息成功保存</h3>";
?>
GoodsSave.php 也可以用来处理修改拍卖商品信息的数据。在商品中插入图片的方法请参照11.9.3小节理解。
11.9.3 商品图片上传
本节介绍添加商品图片的方法。在Web应用程序中,通常采用两种方法处理图片。一种方法是将图片文件上传到服务器的指定目录下,需要时直接在网页中显示图片;另一种方法是将图片数据保存在数据库的image字段中,需要将其导出到一个图片文件中,然后才能在网页中显示。本实例选择第一种方法,因为这种方法处理起来比较简单,
在GoodsAdd.php中,定义文件上传框架的代码如下:
<iframe frameborder="0" height="40" width="100%" scrolling="no" src="upload.php"></iframe>
可以看到,文件上传的界面由upload.php实现。在upload.php中,定义上传表单的代码如下:
<form name="form1" method="post" action="upfile.php" enctype="multipart/form-data">
可以看到,上传文件的数据由upfile.php处理。
关于上传文件的方法,请读者参照 5.4 小节和源代码理解。上传完成后,需要将上传的文件名显示在上面的“图片文件”文本框goodsimage中,代码如下:
echo("<SCRIPT>parent.document.form1.goodsimage.value='".$newfilename."'</SCRIPT>");
当GoodsAdd.php提交数据时,goodsimage将会被传递到GoodsSave.php中,然后被保存到表Goods的ImageURL字段中。
11.9.4 查看商品信息
在主页面或查看商品列表页面中,单击商品名称超链接,将执行GoodsView.php文件,从表Goods中读取商品信息。文件GoodsView.php保存在系统根目录下,运行界面如图11-18所示。
图11-18 查看商品信息
下面介绍GoodsView.php页面中部分代码。
1.读取商品信息
商品信息数据来源于表Goods,代码如下:
<?
include('Class\Goods.php');
$gid=$_GET["gid"];
$obj = new Goods();
$obj->GetGoodsInfo($gid); //获取商品信息
2.增加浏览次数
当查看商品时,系统将为商品的浏览次数加1,代码如下:
$obj->Add_ClickTimes($gid); //增加点击次数
3.读取卖家信息
根据商品表Goods中的卖家用户名读取用户的所有信息,代码如下:
include('Class\Users.php');
//读取卖家信息
$objUser = new Users();
$objUser->GetUsersInfo($obj->OwnerId);
4.读取商品类型信息
根据商品表Goods中的商品类型编号读取商品类型信息,代码如下:
//读取商品类型
include('Class\GoodsType.php');
$objType = new GoodsType();
$objType->GetGoodsTypeInfo($obj->TypeId);
5.显示商品图片
可以通过<img …>来显示商品的图片信息。如果商品没有图片信息,则显示images/noImg.jpg,代码如下:
<?PHP if($obj->ImageURL=="")
{
?><img src="images/noImg.jpg" height=50 border=0>
<? }
else
{
?><img src="user/images/<?PHP echo($obj->ImageURL); ?>" height=50 border=0>
<? } ?>
请参照源代码理解显示其他商品信息的代码。
10.9.5 查看我的商品列表
用户登录后,在系统主页面中会出现一个“我的商品”超链接,其定义代码如下:
<a href='user\UserView.php?uid=<? echo($objUser->UserId); ?>' target="_blank">我的商品</a>
查看用户商品信息的页面为user\UserView.php,参数uid表示用户名。
查看用户商品信息的页面如图11-19所示。
下面介绍UserView.php的主要代码。
1.设置查询条件
UserView.php中的查询条件比较复杂,需要根据转让或求购、商品类型、发布用户等信息设置查询条件,从表Goods中获取满足条件的商品记录。代码如下:
图11-19 查看用户发布的商品信息
<?php
session_start();
//读取参数, flag表示转让或求购类型
$flag=intval($_GET["flag"]);
//设置转让或求购的查询条件
if ($flag==0)
{
$cond=" WHERE SaleOrBuy=1";
}
else
{
$cond=" WHERE SaleOrBuy=2";
}
//设置商品分类查询条件
if ($tid>0)
{
$cond=$cond." AND TypeId=".$tid;
}
//只查看未结束的商品
$uid=$_GET["uid"];
$cond=$cond." AND OwnerId='".$uid."'";
//获取用户信息
include('..\Class\Users.php');
$objUser = new Users();
$objUser->GetUsersInfo($uid);
//创建Goods对象,读取满足条件的记录
include('..\Class\Goods.php');
$obj = new Goods();
$results = $obj->GetGoodslist($cond);
2.显示商品信息
查询得到的结果集为$results,程序将显示其中的商品信息,代码如下:
<?php
$m=0;
while($row = $results->fetch_row())
{
?>
<tr><td align=center bgcolor="#FFFFFF"><?php if ($row[5]=="")
{
?><img src="../images/noImg.jpg" height=50 border=0>
<?php }
else
{
?><img src="images/<?php echo($row[5]); ?>" height=50 border=0>
<?php } ?></td>
<td align=center bgcolor="#FFFFFF"><a href="../GoodsView.php?gid=<?phpecho($row[0]); ?>" target=_blank><?php echo($row[3]); ?></a></td>
<td align=center bgcolor="#FFFFFF"><?php echo($row[6]); ?></td>
<td align=center bgcolor="#FFFFFF"><?php echo($row[8]); ?> </td>
<td bgcolor="#FFFFFF" align="center"><?php echo($row[7]); ?></td>
<td align=center bgcolor="#FFFFFF">
<?php if ($row[14]==1)
{
?>
已结束
<?php }
else
{
?>
<?php if ($row[15]==$_SESSION["user_id"])
{
?>
<a href="GoodsEdit.php?gid=<?php echo($row[0]); ?>" target=_blank>修改</a>
<a href="GoodsDelt.php?gid=<?php echo($row[0]); ?>" target=_blank>删除</a>
<a href="GoodsOver.php?gid=<?PHP echo($row[0]); ?>" target=_blank>结束</a>
<?php } ?>
<?php } ?></td>
</tr>
<?php $m=$m+1;
}
if ($m==0)
{
echo("<tr><td bgcolor=#FFFFFF align=center colspan=6>暂无商品信息</td></tr>");
}
?>
在每个商品的后面都可能显示“修改”、“删除”和“结束”3 个超链接,用于对商品进行管理。因为用户只能对自己发布的商品信息进行管理,所以在显示此超链接时,需要满足如下条件:
if ($row[15]==$_SESSION["user_id"])
表Goods的第16个元素为OwnerId,即当前商品的发布者。上面的if语句表示商品的发布者等于当前用户。
11.9.6 修改商品信息
在11.9.5小节介绍的查看用户商品列表页面中,单击商品信息后面的“修改”超链接,可以打开修改商品信息的页面,如图11-20所示。
修改商品信息的页面与添加商品信息相似,请读者参照11.9.2小节和源代码理解。
图11-20 修改商品信息
11.9.7 删除商品信息
在11.9.5小节介绍的查看用户商品列表页面中,单击商品信息后面的“删除”超链接,可以删除商品信息。删除商品信息的脚本为GoodsDelt.php,参数gid表示要删除的商品编号。
GoodsDelt.php的主要代码如下:
<?
//从数据库中批量删除信息
//读取要删除的编号
include('..\Class\Goods.php');
$gid=$_GET["gid"];
$obj = new Goods();
$obj->delete($gid);
print "删除成功!";
?>
程序调用Goods->delete()函数删除指定的商品信息。
11.9.8 结束商品信息
在11.9.5小节介绍的查看用户商品列表页面中,单击商品信息后面的“结束”超链接,可以结束商品信息。被结束的商品将不会出现在网站的交易商品列表中。结束商品信息的脚本为GoodsOver.php,参数gid表示要结束的商品编号。
GoodsOver.php的主要代码如下:
<?PHP
//从数据库中批量删除公告信息
//读取要删除的公告编号
include('..\Class\Goods.php');
$gid=$_GET["gid"];
$obj = new Goods();
$obj->SetOver($gid);
print("商品交易已结束!");
?>
程序调用Goods->SetOver()函数结束指定的商品信息,即将表Goods中的IsOver字段设置为1。