7.4.2 新闻发布系统
新闻发布系统在因特网中应用比较广泛,本小节重点介绍如何使用ASP和Access数据库技术实现新闻发布系统的。
本系统用到的文件如下:
(1)数据库文件db2.mdb和样式表文件app2.css;
(2)index.asp:为主页面,主要用于显示信息、标题、作者、日期和时间;
(3)addNews.asp:添加新闻页;
(4)editNews.asp:编辑新闻页;
(5)lookNews.asp:新闻内容页。
下面依次介绍各文件。
1. 数据库文件db2.mdb和样式表文件app2.css
db2.mdb是Access数据库,其数据表news有ID(主键)、title、content、type、keys、publisher、times等字段,各字段名称、数据类型及说明如图7-29所示。
样式表文件app2.css用来规范网页样式,其代码如下。
------------------------------清单 app2.css-------------------------
body{background:#FFFFe9;font-size:9pt;font-family:宋体}
td{font-size:10.5pt;;font-family:宋体;}
p{font-size:10.5pt}
li{font-size:10.5pt;line-height:30px;}
textarea.smallarea{font-size:9pt;background-color:white;color:rgb(0, 0,128);}
input.buttonface{font-size:9pt;background-color:E8D8B0;}
A{text-decoration:none;color:navy}
A:hover{color:ff8a00;text-decoration:underline;}
--------------------------------------------------------------------
图7-29 news数据表的结构
2. 主网页index.asp
----------------------------清单 index.asp--------------------------
<HTML><LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="app2.CSS">
<Script language="JavaScript">
//打开新窗口函数NewsWindow
function NewsWindow(id)
{
window.open('LookNews.asp?id='+id,'infoWin',
'height=400,width=600,scrollbars=yes,resizable=yes');
}
</Script>
</HEAD><BODY>
<%
set conn=server.createobject("ADODB.CONNECTION")
conn.open "DBQ=" & server.mappath("db2.mdb")&";DRIVER={Microsoft
Access Driver (∗.mdb)};"
set rs = server.createobject("ADODB.RECORDSET")
sql = "SELECT ∗ FROM news ORDER BY ID DESC"
rs.open sql,conn,1,1
If rs.eof and rs.bof then
Response.write "<p>目前还没有任何新闻</p>"
Else
%>
<P><STRONG>新闻概况</STRONG><TABLE BORDER=1 BORDERCOLORDARK=#FFFFEC
BORDERCOLORLIGHT=#5E5E00 CELLPADDING=1 CELLSPACING=0 WIDTH="100%">
<TR BGCOLOR=CCCCCC ALIGN=CENTER><TD>标题</TD><TD>作者</TD><TD>日期
</TD></TR>
<%
cc = 1 '当前页
if not isempty(request("page"))then
pagecount=cint(request("page"))
else
pagecount=1
end if
rs.PageSize=10
rs.AbsolutePage=pagecount
For iPage = 1 To rs.PageSize
If rs.EOF Then Exit For
'不同行之间以不同颜色显示
if cc mod 2=1 then
Response.Write "<tr bgcolor=#E7E7E7>"
else
Response.Write "<tr BGCOLOR=#F4F4F4>"
end if
%>
<td><a
href="javascript:NewsWindow(<%=rs("ID")%>)"><u><%=rs("title")%></
u></a></td>
<td><%=rs("publisher")%> </td><td><%=rs("times")%>
<%
'如果是今天的新闻,加上new标记
if DateDiff("d",rs("times"),date())<1 then Response.Write "<font
color=ff0000>new</font>"
Response.Write "</td></tr>"
cc = cc + 1
rs.movenext
Next
Response.Write "</table><p>共"&rs.recordcount&"条新闻"
if rs.PageCount>1 Then
If pagecount<>1 Then
Response.Write "<A HREF=index.asp?Page=1>[首页]</A>"
Response.Write "<A HREF=index.asp?Page="&(pagecount-1)&">[前
页]</A>"
End If
If pagecount<>rs.PageCount Then
Response.Write "<A HREF=index.asp?Page="&(pagecount+1)&">[后
页]</A>"
Response.Write "<A HREF=index.asp?Page="&rs.PageCount&">[尾
页]</A>"
End If
End If
end if
rs.close
conn.close
%>
<p align=center><a href="EditNews.asp">编辑新闻</a></p>
--------------------------------------------------------------------
调试结果如图7-30所示。
图7-30 index.asp调试结果
3. 添加新闻网页addNews.asp
--------------------------清单 addNews.asp--------------------------
<link rel="stylesheet" type="text/css" href="app2.css">
<%
'id为一隐藏标记,用于判断是第一次进入页面,还是提交到该页面
id=Request("id")
'如果title不为空,则添加记录
if Request.form("title")<>"" then
set conn=server.createobject("ADODB.CONNECTION")
conn.open "DBQ="+server.mappath("db2.mdb")+";DRIVER={Microsoft
Access Driver (∗.mdb)};"
title=Trim(request.form("title"))
sql="select ∗ from news where "
if id<>"" then
sql=sql&"id="&id
else
sql=sql&"title='"&title&"'"
end if
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql,conn,1,3
if rs.eof or rs.bof then
rs.addnew
end if
rs("title")= Request.form("title")
rs("content")= Request.form("body")
rs("type")= Request.form("type")
rs("keys")= Request.form("keys")
rs("publisher")= Request.form("writer")
rs.Update
rs.close
conn.close
set rs=nothing
set conn=nothing
end if
if id <> "" then
set conn=server.createobject("ADODB.CONNECTION")
conn.open "DBQ="+server.mappath("db2.mdb")+";DRIVER={Microsoft Access
Driver (∗.mdb)};"
sql="select ∗ from news where id="&id
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql,conn,1,1
if not rs.eof then
title1=rs("title")
content=rs("content")
keys=rs("keys")
write=rs("publisher")
end if
rs.close
conn.close
end if
%>
<form name=form1 method="post" action="addnews.asp">
<input value="<%=id%>" type=hidden name=id>
<P align="center">标题:<INPUT size=85 name=title
value=<%=title1%>></P>
<P align="center">内容:<TEXTAREA cols=73 name=body
rows=15><%=content%> </TEXTAREA></P>
<P align="center">关键字:<INPUT size=25 name=keys value=<%=keys%>>
作者:
<INPUT size=25 name=writer value=<%=write%>>
类型:
<select span style="font-size:10.5pt" name="type">
<option value="0">文本</option>
<option value="1">链接</option>
</select>
<p align="center">
<INPUT class=buttonface type=submit value=" 确 定 ">
<INPUT class=buttonface type=reset value=" 清 除 "></p>
</form>
<P align="right"><a href="editnews.asp">编辑新闻</a> <a
href="index.asp">查看新闻</a>
</BODY>
</HTML>
--------------------------------------------------------------------
调试结果如图7-31所示。
图7-31 Addnews.asp的调试结果
4. 编辑新闻网页editNews.asp
---------------------------清单 editNews.asp------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新闻内容页</title>
<link rel="stylesheet" type="text/css" href="app2.css">
<script language="JavaScript">
function NewsWindow(id)
{
window.open('LookNews.asp?id='+id,'infoWin',
'height=400,width=600,scrollbars=yes,resizable=yes');
}
</script>
</head>
<body>
<%
set conn = Server.CreateObject("ADODB.CONNECTION")
conn.open "DBQ=" & Server.Mappath("db2.mdb")& ";DRIVER={Microsoft
Access Driver (∗.mdb)};"
set rs = Server.CreateObject("adodb.recordset")
if request("del")<>"" then conn.Execute("DELETE ∗ FROM news WHERE id="
& request("del"))
sql="SELECT ∗ FROM news ORDER BY ID DESC"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
Response.write "<p>还 没 有 任 何 新 闻</p>"
else
if not isempty(request("page"))then
pagecount = cint(request("page"))
else
pagecount = 1
end if
rs.PageSize = 10
rs.AbsolutePage = pagecount
%>
<p><strong>全部新闻</strong><table width=100%>
<%For iPage = 1 To rs.PageSize
If rs.EOF Then Exit For
id=rs("ID")%>
<tr><td><a
href="javascript:NewsWindow(<%=id%>)"><u><%=rs("title")%></u>
</a>--<%=rs("publisher")%>【<%=rs("times")%>】
</td><td align=right><a href=AddNews.asp?id=<%=id%>>编辑</a>
<a href=editnews.asp?del=<%=id%>>删除</a></td></tr>
<%
rs.movenext
Next
Response.Write "</table><p>共" & rs.recordcount & "条记录<br>"
if rs.PageCount>1 Then
If pagecount<>1 Then
Response.Write "〖<A
HREF=editnews.asp?Page=1&boardid="&request("boardid")&">首页</A>〗"
Response.Write "〖<A HREF=editnews.asp?Page="&(pagecount-1)&">前页
</A>〗"
End If
If pagecount<>rs.PageCount Then
Response.Write "〖<A HREF=editnews.asp?Page="&(pagecount+1)&">后页
</A>〗"
Response.Write "〖<A HREF=editnews.asp?Page="&rs.PageCount&">尾页
</A>〗"
End If
End If
end if
rs.close
conn.close
%>
<p align=right><a href=AddNews.asp>添加新闻</a> <a href="index.asp">查看新闻</a></p>
--------------------------------------------------------------------
调试结果如图7-32所示。
图7-32 editNews.asp调试结果
5. 查看新闻内容的网页lookNews.asp代码
--------------------------清单 lookNews.asp-------------------------
<html>
<head>
<title>新闻</title>
<link rel="stylesheet" type="text/css" href="app2.css">
</head>
<%
id=trim(request("id"))
set conn=server.createobject("ADODB.CONNECTION")
conn.open "DBQ="+server.mappath("db2.mdb")+";DRIVER={Microsoft Access
Driver (∗.mdb)};"
set rs=server.createobject("adodb.recordset")
sql="SELECT ∗ from news where ID="&id
rs.open sql,conn,1,1
if rs.eof then
response.write "错误的ID号"
rs.close
set rs=nothing
conn.close
set conn=nothing
Response.end
else%>
<table width="100%" HEIGHT=100% border="1" cellspacing="0"
cellpadding="0" bordercolorlight="#000000"
bordercolordark="#FFFFFF">
<tr bgcolor="#FAD185">
<td height=20 align=center><b><%=rs("title")%></b></td>
</tr>
<tr>
<td valign=top>
<%'如果type=0,代表是文本类型信息,若type=1,代表是链接信息%>
<%if rs("type")=0 then%>
<p><%=replace(rs("content"),chr(13)&chr(10),"<p>")%>
<%else%>
<iframe id=BoardTitle name=newscon style="HEIGHT:100%; VISIBILITY:
inherit; WIDTH:100%; Z-INDEX: 2" scrolling=auto frameborder=0
src="<%=rs("content")%>" ></iframe></td>
<%end if%>
</tr>
</table>
<br><b>相关新闻:</b><ul>
<%
sql="SELECT ∗ from news where ID<>"&id&" and keys='"&rs("keys")&"' order
by ID desc"
rs.close
rs.open sql,conn,1,1
do while not rs.eof
%>
<li><a
href=looknews.asp?id=<%=rs("ID")%>><u><%=rs("title")%></u></a>--<
%=rs("publisher")%>
【<%=rs("times")%>】
<%
rs.movenext
loop
rs.close
conn.close
end if
%></ul>
</html>
--------------------------------------------------------------------
调试结果如图7-33所示。
图7-33 lookNews.asp调试结果
本节中的两个应用实例,即用户注册、登录、注销系统和新闻发布系统是分别编写的。实际上可以将两者结合起来,做成一个先登录验证身份,再发布新闻的网站系统,这要用到Session或Cookies来暂存用户身份确认情况。请读者思考如何完成这一组合。
将本节学习过的实例和第5章学习过的JavaScript行为,嵌入第2章、第4章学过的网页布局设计时,能够制作出既有优秀外观,又有良好交互功能的动态网站。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。