文章教程

11.8.1设计主界面

9/17/2020 9:38:49 PM 人评论 次浏览

11.8 系统主界面与登录程序设计

除了管理员用户外,注册用户要通过系统主页面登录,才能完成自己的特定功能。本节将介绍系统主页面和用户登录程序的设计过程。

11.8.1 设计主界面

本实例的主界面为index.php,它的功能是显示系统的给定信息,包括站内公告、用户登录、最新商品、最被关注商品、最活跃卖家等信息,如图11-13所示。

figure_0250_0321

图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>&nbsp;<a href="List.php?tid=<? echo($row[0]); ?>"target="_blank"><? echo($row[1]); ?></a>&nbsp;

<?

}

?>

从超链接的定义代码可以看到,显示指定分类商品信息的脚本为 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>

&nbsp;&nbsp;<a href="LoginExit.php" onclick="return newswin(this. href)">退出登录</a></td>

如果用户已经登录,则显示用户信息,登录后的界面如图11-14所示。

figure_0254_0322

图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所示。用户可以输入自己的用户名和密码登录到系统,登录后,才能实现发布商品等功能。如果用户没有成功登录,则显示登录表单,代码如下:

figure_0255_0323

图11-15 登录表单

<form method="POST" action="putSession.php">

用户名 : <input type="text" name="loginname" size="18"value="">

<br> 密 &nbsp; 码 <input type="password" name="password"size="18" value="">

<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input  type="submit"value="确定" name="B1">

&nbsp;&nbsp; <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小节介绍用户管理的内容。

教程类别