11.4 公告信息管理模块设计
公告信息管理模块可以实现以下功能。
• 在表格中浏览公告信息。
• 添加新的公告记录。
• 修改公告记录。
• 删除公告记录。
只有管理用户才有权限进入公告信息管理模块。
11.4.1 设计公告管理页面
公告管理页面为 BulletinList.php,在此页面中可以对网站的公告信息进行添加、修改、删除等操作,如图11-4所示。
下面将介绍BulletinList.php中与界面显示相关的部分代码。
1.显示公告信息
为了便于用户管理公告信息,BulletinList.php以表格的形式显示公告名称,并在后面显示修改链接和删除复选框。代码如下:
图11-4 公告管理页面
<?PHP
include('..\Class\Bulletin.php');
//查询表Bulletin中的公告信息
$obj = new Bulletin();
$results = $obj->GetBulletinlist();
$exist = false;
?>
<p align=center><font style='FONT-SIZE:12pt' color="#000080"><b>公告管理</b></font></p>
<table align=center border="1" cellspacing="0" width="100%" bordercolorlight="#4DA6FF" bordercolordark="#ECF5FF" style='FONT-SIZE: 9pt'>
<tr>
<td width="50%" align="center" bgcolor="#eeeeee"><strong>题目</strong></td>
<td width="30%" align="center" bgcolor="#eeeeee"><strong>时间</strong></td>
<td width="10%" align="center" bgcolor="#eeeeee"><strong>修改</strong></td>
<td width="10%" align="center" bgcolor="#eeeeee"><strong>选择</strong></td>
</tr>
<?PHP
//依次显示公告信息
while($row = $results->fetch_row())
{
$exist = true;
?>
<tr>
<td><a href="../BulletinView.php?id=<?PHP echo($row[0]); ?>" onClick="return BulletinWin(this.href)"><?PHP echo($row[1]); ?></a></td>
<td align="center"><?PHP echo($row[3]); ?></td>
<td align="center"><a href="BulletinEdit.php?id=<?PHP echo($row[0]); ?>"onClick="return BulletinWin(this.href)">修改</a></td>
<td align="center"><input type="checkbox" name="Bulletin" id="<?PHP echo($row[0]); ?>" style="font-size: 9pt"></td>
</tr>
<?PHP
}
if (!$exist)
{
print "<tr><td colspan=5 align=center>目前还没有公告。</td></tr></table>";
}
?>
其中,“修改”超链接的定义代码如下:
<a href="BulletinEdit.php?id=<%=obj.rs("Id")%>" onClick="return BulletinWin(this.href)">修改</a>
可以看到,修改公告的页面是BulletinEdit.php,参数id的值为要修改的公告编号。
删除复选框的定义代码如下:
<input type="checkbox" name="Bulletin" id="<%=obj.rs("Id")%>" style="font-size: 9pt">
公告信息后面的复选框名为Bulletin,它的id值与对应公告信息的编号相同。
JavaScript函数BulletinWin()的功能是弹出窗口,显示公告信息。代码如下:
<script language="javascript">
function BulletinWin(url) {
var
oth="toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizab le=yes,left=200,top=200";
oth = oth+",width=400,height=300";
var BulletinWin = window.open(url,"BulletinWin",oth);
BulletinWin.focus();
return false;
}
2.显示功能按钮
如果存在公告记录,则在表格下面显示“添加公告”、“全选”、“清空”和“删除”按钮,代码如下:
<input type="button" value=" 添加公告 " onclick="BulletinWin('BulletinAdd.php)"name=add>
<input type="button" value="全选" onclick="sltAll()" name=button1>
<input type="button" value="清空" onclick="sltNull()" name=button2>
<input type="submit" value="删除" name="tijiao" onclick="SelectChk()">
这些按钮对应的代码将在后面结合具体功能介绍。
11.4.2 添加公告信息
在BulletinList页面中,单击“添加公告”按钮,将调用BulletinWin()函数,在新窗口中打开BulletinAdd.php,添加公告信息,如图11-5所示。
图11-5 添加公告
定义表单myform的代码如下:
<form name="myform" method="POST" action="BulletinSave.php?action=add"
提交前需要对表单进行域校验,checkFields函数的功能就是这样的。代码如下:
<script language="javascript">
function checkFields()
{
if (myform.title.value=="") {
alert("公告题目不能为空");
myform.title.onfocus();
return false;
}
if (myform.content.value=="") {
alert("公告内容不能为空");
myform.content.onfocus();
return false;
}
return true;
}
</script>
它的主要功能是判断“公告标题”和“公告内容”是否为空,如果为空,则返回false,不允许表单数据提交。
表单数据提交后,将执行BulletinSave.php保存数据,参数action表示当前的动作,action=add表示添加记录。BulletinSave.php也可以用来处理修改公告信息的数据。
BulletinSave.php的主要代码如下:
<?PHP
include('..\Class\Users.php');
include('..\Class\Bulletin.php');
session_start();
//得到动作参数,如果为add则表示创建公告,如果为update则表示更改公告
$StrAction=$_GET["action"];
//读取当前用户信息
$objUser = new Users();
$objUser->GetUsersInfo($_SESSION["UserName"]);
//设置公告信息
$objBul = new Bulletin();
//取得公告题目和内容和提交人用户名
$objBul->Title=$_POST["title"];
$objBul->Content=$_POST["content"];
$objBul->Poster=$objUser->Name;
$objBul->PostTime=strftime("%Y-%m-%d %H:%M:%S");
if ($StrAction=="add")
{
//在数据库表Board中插入新公告信息
$objBul->insert();
}
else
{
//更改此公告信息
$id=$_GET["id"];
$objBul->update($id);
}
print "<h3>公告成功保存</h3>";
?>
</body>
<script language="javascript">
//刷新父级窗口,延迟此关闭
opener.location.reload();
setTimeout("window.close()",600);
</script>
11.4.3 修改公告信息
修改公告是单击每个公告的“修改”链接,将弹出新窗口,打开 BulletinEdit.php 页面。BulletinEdit.php 的功能是从数据库中取出指定公告的信息,用户可以对它们进行更改,然后提交数据。BulletinEdit.php中表单myform的定义代码如下:
<form name="myform" method="POST" action="BulletinSave.php?action=update&id=<%=id%>"OnSubmit="return checkFields()">
与添加公告相同的是,提交表单前同样需要进行域校验,由checkFields() 函数完成此功能。
在BulletinEdit.php中,参数id表示要修改的公告编号,action=update用于通知BulletinSave.php要执行更新数据的操作,BulletinSave.php可以处理添加数据和更新数据,而添加数据和更新数据对应的SQL语句不同。因此,提交数据时需要指定是添加数据还是更新数据。
从数据库中读取并显示公告信息的代码如下:
<?PHP
//从数据库中取得此公告信息
//读取参数id
$id=$_GET["id"];
//根据参数id读取指定的公告信息
include('..\Class\Bulletin.php');
$obj = new Bulletin();
$obj->GetBulletinInfo($id);
//如果记录集为空,则显示没有此公告
if($obj->Id==0)
{
exit("没有此公告");
}
else
{
//下面内容是在表格中显示公告内容
?>
<form name="myform" method="POST" action="BulletinSave.php?action=update&id=<? echo($id); ?>" OnSubmit="return checkFields()">
<table border="0" width="100%" cellspacing="1">
<tr>
<td width="100%" bgcolor="#FFFFFF"><span class="STYLE1">公告标题
<input type="text" name="title" size="20" value="<?echo($obj->Title); ?>">
</span></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF"><span class="STYLE1"> 公告内容</span></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF"><textarea rows="12" name="content"cols="55"><?PHP echo($obj->Content); ?></textarea></td>
</tr>
</table>
<p align="center"><input type="submit" value="提交" name="B1">
<input type="reset" value="重写" name="B2"></p>
<?
}
?>
表单数据提交后,将执行 BulletinSave.php 保存数据。BulletinSave.php 的内容请参见 11.4.2小节。
11.4.4 删除公告信息
在删除公告之前,需要选中相应的复选框。下面介绍几个与选择复选框相关的 JavaScript函数。
1.选择全部复选框
在BulletinList.php中,定义“全选”按钮的代码如下:
<input type="button" value="全选" onclick="sltAll()" name=button1>
当单击“全选”按钮时,将执行sltAll()函数,代码如下:
function sltAll()
{
var nn = self.document.all.item("Bulletin");
for(j=0;j<nn.length;j++) {
self.document.all.item("Bulletin",j).checked = true;
}
}
self对象指当前页面,self.document.all.item("Bulletin")返回当前页面中Bulletin复选框的数量。程序通过for循环语句将所有的Bulletin复选框值设置为true。
2.全部清除选择
在BulletinList.php中,定义“清空”按钮的代码如下:
<input type="button" value="清空" onclick="sltNull()" name=button2>
当单击“清空”按钮时,将执行sltNull()函数,代码如下:
function sltNull()
{
var nn = self.document.all.item("Bulletin");
for(j=0;j<nn.length;j++) {
self.document.all.item("Bulletin",j).checked = false;
}
}
3.生成并提交删除编号列表
在BulletinList.php中,定义“删除”按钮的代码如下:
<input type="submit" value="删除" name="tijiao" onclick="SelectChk()">
当单击“删除”按钮时,将执行SelectChk()函数,代码如下:
function SelectChk()
{
var s = false; //用来记录是否存在被选中的复选框
var Bulletinid, n=0;
var strid, strurl;
var nn = self.document.all.item("Bulletin"); //返回复选框Bulletin的数量
for (j=0; j<nn.length; j++) {
if (self.document.all.item("Bulletin",j).checked) {
n = n + 1;
s = true;
Bulletinid = self.document.all.item("Bulletin",j).id+""; //转换为字符串
//生成要删除公告编号的列表
if(n==1) {
strid = Bulletinid;
}
else {
strid = strid + "," + Bulletinid;
}
}
}
strurl = "BulletinDelt.php?id=" + strid;
if(!s) {
alert("请选择要删除的公告!");
return false;
}
if (confirm("你确定要删除这些公告吗?")) {
form1.action = strurl;
form1.submit();
}
}
程序对每个复选框进行判断,如果复选框被选中,则将复选框的id值转换为字符串,并追加到变量strid中。因为复选框的id值与对应的公告编号相同,所以最后strid中保存的是以逗号分隔的待删除的公告编号。
以strid的值为参数执行BulletinDelt.php,就可以删除选中的记录了。相关的代码如下:
<?PHP
//从数据库中批量删除公告信息
//读取要删除的公告编号
$id=$_GET["id"];
include('..\Class\Bulletin.php');
$obj = new Bulletin();
$obj->delete($id);
?>
删除后将提示成功删除信息。
11.4.5 查看公告信息
单击公告超级链接,将在新窗口中执行BulletinView.php,查看公告信息,如图11-6所示。
BulletinView.php保存在2shou目录下(因为普通用户也需要使用它浏览公告,所以没有保存在admin目录下),显示公告的代码如下:
<?PHP
include('Class\Bulletin.php');
//从数据库中取得此公告信息
//读取参数id
$id=$_GET["id"];
//根据参数id读取指定的公告信息
$obj = new Bulletin();
$results = $obj->GetBulletinInfo($id);
//如果记录集为空,则显示没有此公告
if($obj->Id==0)
{
exit("没有此公告");
}
else
{
//下面的代码用于显示公告内容
?>
图11-6 查看公告信息