11.8 系统主界面与登录程序设计
除了管理员用户外,注册用户要通过系统主页面登录,才能完成自己的特定功能。本节将介绍系统主页面和用户登录程序的设计过程。
11.8.1 设计主界面
本实例的主界面为index.php,它的功能是显示系统的给定信息,包括站内公告、用户登录、最新商品、最被关注商品、最活跃卖家等信息,如图11-13所示。
图11-13 index.php的运行界面
下面介绍index.php的主要代码。
1.显示所有商品分类
在index.php的上方,显示所有商品分类的链接信息。用户通过单击商品分类名称查看指定分类名称下所有的商品列表。代码如下:
<?PHP
//从表GoodsType中读取商品类别数据
include('Class\GoodsType.php');
$gtype = new GoodsType();
$results = $gtype->GetGoodsTypelist();
//使用循环语句,依次显示分类信息
while($row = $results->fetch_row())
{
?>
<font color="#FF9933"">|</font> <a href="List.php?tid=<? echo($row[0]); ?>"target="_blank"><? echo($row[1]); ?></a>
<?
}
?>
从超链接的定义代码可以看到,显示指定分类商品信息的脚本为 List.php。本书将在 11.9.1小节介绍List.php的实现过程。
2.显示左侧功能列表
在主界面的左侧,显示系统公告、用户登录、最被关注商品、最新活跃卖家等信息。这些信息在Left.php中定义,而在index.php中则在指定位置引用Left.php。代码如下:
<td width="25%" valign="top" align="left"><?PHP include("left.php"); ?></td>
3.显示最新商品信息
在index.php的中央,将显示最新12个未结束商品的信息,代码如下:
<?PHP
include('Class\Goods.php');
$objGoods = new Goods();
$results = $objGoods->GetTopnNewGoods(12);
//如果没有找到商品,则显示提示信息
$i=0;
//否则使用循环语句,依次显示商品信息
while($row = $results->fetch_row())
{
?>
<td valign="top" width="33.33%" align="left" bgcolor="#FFFFFF">
<p align="center">
<?
//显示商品图片
if (!isset($row[5]) || trim($row[5])=="")
{
?>
<img border="0" src="images/noImg.jpg" height="110">
<?
}
else
{
?>
<a href="GoodsView.php?gid=<? echo($row[0]); ?>" target=_blank>
<img border="0" src="user/images/<? echo($row[5]); ?>" width="100"height="110"></a>
<?
}
?>
</center>
<br>商品名称:<a href="GoodsView.PHP?gid=<? echo($row[0]); ?>" target=_blank><? echo($row[3]); ?></a>
<br>交易类型:
<? if($row[2]==1)
{
?>
转让
<? }
else
{
?>
求购
<? } ?>
<br>所有者:<? echo($row[15]); ?>
<br>价格:<? echo($row[6]); ?>元
<br>发布时间:<? echo($row[7]); ?>
</td>
<center>
<?
if ($i%3==2)
{
?>
</tr><tr>
<? }
$i++;
}
if ($i==0)
{
?>
<td width="100%" valign="top" align="left" bgcolor="#FFFFFF">暂且没有商品</td>
<?
}
?>
下面分别介绍代码的主要功能。
(1)首先定义 Goods 对象$objGoods,并调用$objGoods->GetTopnNewGoods(12)函数获取最新加入的12个商品信息到结果集$results中。$objGoods->GetTopnNewGoods()函数在Goods.php中定义,请参照源代码理解。
(2)如果不存在商品信息($i等于0),则显示“暂且没有商品”。
(3)如果存在商品信息,则使用while循环语句从$results中依次获取所有商品信息,并以表格的形式显示。
(4)本实例约定每行显示3个商品信息,所以如果当前记录编号i % 3 = 2,则输出表格换行符号</tr>,并开始新的一行表格(输出<tr>)。
当用户单击商品图片或商品名称时,在新窗口中打开GoodsView.php文件,查看商品的详细资料,相关内容将在11.9.4小节中介绍。
11.8.2 设计Left.php
Left.php 文件用于显示主界面的左侧部分,包括站内公告、用户登录信息、最被关注商品、最新活跃卖家等信息。本节将介绍Left.php的部分代码。
1.显示站内公告
程序在首页左侧的上部显示数据库中最新的10条公告信息,程序如下:
<?PHP
session_start();
include('Class\Bulletin.php');
$obj = new Bulletin();
$results = $obj->GetBulletinlist();
//显示新闻信息
?>
<tr>
<td width="100%" bgcolor="#E1F5FF" height="70" valign="top">
<?PHP
$exist = false;
//按时间显示最新的10条新闻信息
for ($i=1; $i<=10; $i++)
{
$exist = true;
if($row = $results->fetch_row())
{
$title=$row[1];
//显示新闻标题以及网页链接
if(strlen($title)>11)
{
$title=substr($title,0,11);
?><a href="BulletinView.php?id=<?PHP echo($row[0]); ?>" target=_blank><?PHPecho $title; ?>……</a>
<?PHP }
else
{
?>
<a href="BulletinView.php?id=<?PHP echo($row[0]); ?>"target=_blank><?PHP echo($title); ?></a>
<?PHP} // end of else ?><br>
<?PHP } //else of if ?>
<?PHP } // else of for ?>
</td>
</tr>
<?PHP
if(!$exist)
{
?>
<tr>
<td width="100%" height="70" bgcolor="#E1F5FF">暂且没有公告</td>
</tr>
<?PHP }
单击任何一个公告链接,都会弹出一个新窗口,执行 BulletinView.php 文件,按照给定的公告编号显示公告信息。BulletinView.php的代码已经在11.4.5小节介绍过了,请读者参照理解。
2.显示登录信息
程序将从Session变量中获取登录用户名和密码,并进行验证。如果用户没有注册或者登录,则显示登录页面和注册链接;如果已经登录到系统,则显示用户信息。代码如下:
include('Class\Users.php');
//从Session变量中读取注册用户信息,并连接到数据库验证
$objUser = new Users();
$UserId=trim($_SESSION["user_id"]);
$Pwd=trim($_SESSION["user_pwd"]);
//连接数据库,进行身份验证
$objUser->GetUsersInfo($UserId);
$_SESSION["user_name"]=$objUser->Name;
if($UserId!="" && $objUser->UserPwd==$Pwd)
{
?>
<tr>
<td width="100%" bgcolor="#97DDFF" height="18" align="center">用户信息</td>
</tr>
<tr>
<td width="100%" height="18" bgcolor="#E1F5FF">
<table border="0" cellspacing="1" width="100%">
<tr>
<td width="100%" bgcolor="#E1F5FF">用户名:<?PHP echo($objUser->UserId);?><br>地址:
<?PHP echo($objUser->Address); ?><br>
E-mail:<?PHP echo($objUser->Email); ?><Br>电话:<?PHP echo($objUser->Telephone); ?>
</td>
</tr>
<tr>
<td width="100%" align="center" bgcolor="#E1F5FF">
<a href='user\UserView.php?uid=<?PHP echo($objUser->UserId); ?>' target="_blank">我的商品</a>
<a href="LoginExit.php" onclick="return newswin(this. href)">退出登录</a></td>
如果用户已经登录,则显示用户信息,登录后的界面如图11-14所示。
图11-14 用户登录后部分页面
如果没有登录,则显示登录的表单,具体情况请参见 11.8.3小节。
3.显示最被关注商品信息
当用户单击商品链接或商品图片时,将弹出新的窗口显示商品的详细信息。每次查看商品信息时,该商品的点击次数字段ClickTimes都会增加1。所谓最被关注商品即为点击次数字段最多的商品。在类 Goods 中,定义了 GetTopnMaxClick()函数,用于获取最被关注的商品信息。代码如下:
//获取前n名最受关注的商品
function GetTopnMaxClick($n) {
//设置查询的SELECT语句
$sql ="SELECT * FROM Goods WHERE IsOver=0 ORDER BY ClickTimes DESC, StartTime DESC LIMIT 0," . $n;
//打开记录集
$results = $this->conn->query($sql);
return $results;
}
在Left.php中,显示最被关注的前10个商品信息的代码如下:
<?PHP
include('Class\Goods.php');
$objGoods = new Goods();
//查询前10个点击次数(ClickTimes)最多的\未结束的商品信息
$results = $objGoods->GetTopnMaxClick(10);
$exist = false;
//如果结果集为空,则显示提示信息
//依次显示结果集中的商品信息
while($row = $results->fetch_row())
{
$exist = true;
?>
<a href="GoodsView.php?gid=<?PHP echo($row[0]); ?>"target="_blank"><?PHP echo($row[3]); ?></a> ( 浏 览 <font color="red"><?PHPecho($row[16]); ?></font>次)<br />
<?PHP
}
if (!$exist)
{
print "暂且没有商品";
}
?>
4.显示最活跃卖家信息
所谓最活跃卖家即为发表商品信息最多的用户。在类Users中,定义了GetTopnActiveUser()函数,用于获取最活跃卖家的信息。代码如下:
function GetTopnActiveUser($n)
{
//设置查询的SELECT语句
$sql="SELECT u.UserId, u.Name, Count(g.GoodsId) AS cc "
." FROM Users u INNER JOIN Goods g ON u.UserId=g.OwnerId "
." GROUP BY u.UserId, u.Name "
." ORDER BY Count(g.GoodsId) DESC LIMIT 0," . $n;
//打开记录集
$results = $this->conn->query($sql);
return $results;
}
在Left.php中,显示最活跃卖家的前10个商品信息的代码如下:
<?PHP
//获取发布商品最多的用户
$objUser = new Users();
$results = $objUser->GetTopnActiveUser(10);
$exist = false;
//使用循环语句,依次显示分类信息
while($row = $results->fetch_row())
{
$exist = true;
?>
<a href="user\UserView.php?uid=<?PHP echo($row[0]); ?>" target=_blank><?PHP echo($row[1]); ?></a>(<font color=red>
<?PHP echo($row[2]); ?>
</font>件)<br>
<?PHP
}
<? ?>
//如果结果集为空,则显示提示信息
if(!$exist)
{
print "暂且没有用户信息";
}
?>
11.8.3 注册用户登录程序设计
在left.php中包含一个登录表单,如图11-15所示。用户可以输入自己的用户名和密码登录到系统,登录后,才能实现发布商品等功能。如果用户没有成功登录,则显示登录表单,代码如下:
图11-15 登录表单
<form method="POST" action="putSession.php">
用户名 : <input type="text" name="loginname" size="18"value="">
<br> 密 码 <input type="password" name="password"size="18" value="">
<br><br> <input type="submit"value="确定" name="B1">
<a href="user/UserAdd.php" target=_blank>用户注册</a>
</form>
可以看到,当数据提交后,将执行putSesstion.php,代码如下:
<?PHP
session_start();
//取输入的用户名和密码
$UID=$_POST["loginname"];
$PSWD=$_POST["password"];
//把用户名和密码放入session
$_SESSION["user_id"]=$UID;
$_SESSION["user_pwd"]=$PSWD;
header("Location: index.php");
?>
以"Location: xxx"为参数调用header()函数可以将网页转向到转向的网页。
程序将用户信息保存在Sesstion变量中,然后把网页转向到index.php中在left.php中将进行用户身份验证,具体情况可以参照 11.8.2 小节理解。注册新用户的脚本为 UserAdd.php,本章将在11.10小节介绍用户管理的内容。