摘要
本文概述了ACCESS數據庫及其相關的一些知識,著重論述ACCESS數據庫和ASP的中間技術,構建一個簡單的留言板。具體的實現是構造一個留言板系統,能很方便的和同學溝通和交流。留言板具有功能強大、使用方便的特點。用戶以個人的身份進入,查看留言,以及在留言板中寫下自已要留言的內容。管理員可根椐管理員用戶名和密碼進入,進行適當的修改和刪除。
???? 在此設計中,主要的技術有:ASP,HTML,ADO等,用到的運行環境(操作系統,服務器)有WINDOWS98,PWS,和IE 5.0等,將它們集成在一個INTRANET(模擬INTERNET)的環境中,從而實現了設計。
【關鍵詞】留言板 網絡數據庫 ASP HTML
4.1 用戶、管理員瀏覽模塊
(圖4.1)
此模塊的功能是用戶和管理員都能利用該模塊瀏覽所有的留言內容,此模塊不用注冊即可使用,每頁由7條記錄組成,具有翻頁功能,具體的設計步驟如下(此模塊的圖片如圖3.1)。
下面的ASP代碼實現顯示表stu中的內容:
<%response.buffer=true%>
<html>
<head>
<title>留言板</title>
</head>
<%'========================顯示數據庫表stu中的信息=======================
?? sql="select * from lyb "
? set rs=server.createobject("ADODB.Recordset")
? rs.Open sql,conn,1
? numzhuce=rs.RecordCount
? page=request.querystring("page")?????????? '接收上一頁、下一頁的頁號
???? if len(page)>0 and isnumeric(page) then
?????????? page=int(page)
???? else
?????????? page=1
???? end if
???? if not rs.eof? then
????????? size=7
?????? ? rs.PageSize=size?????????? '每頁記錄數
????????? TotlePage=rs.PageCount???? '總頁數
??????? TotlePage=int(numzhuce/size)
?????? ? if (numzhuce mod size)>0 then TotlePage=TotlePage+1? '總頁數
?????? ? if page<1 or page>TotlePage then
?????????? ? page=1
?????????? ? rs.AbsolutePage=page? '當前頁
?????? ? else
?????? ????? rs.AbsolutePage=page? '當前頁
????????? end if
??? ????? num=1??????????????????? '循環變量初值
%>
以上的內容分別把接收到的數據放在變量中,下面的代碼的功能是顯示出這些信息。
<td width="545" height="91" valign="top">
???? <font size="2">
?????? <%while not rs.eof and num<=size%>
?????? <font color="#FF00FF">
?????? [留言主題]</font><%=rs("主題")%><br>
??? <font color="#FF00FF">
??? [留言內容]</font><%=rs("內容")%><br>
???                                      ?????????????????????????????????
??? <%=rs("昵稱")%> ??????????????????????????????
??? [<%=rs("時間")%>] <br>
??? <font color="#0000FF">
??? +---------------------------------------------------------------------+</font> <br>
??? <%rs.movenext
??????????? num=num+1
wend
rs.close
set rs=nothing%>
??????? </font>
?????? </td>
? </tr>
? <tr>
??? <td width="545" height="91" valign="top">
<font size="2">
<a href="lyb.asp?page=1">[第一頁]</a>
? <% select case page
???? case 1:??????????? '只有下一頁
???????? if totlepage>1? then
%>
????????? <a href="lyb.asp?page=2">[下一頁]</a>[第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]
????????? <% else %>
????????? 第<%=page%>頁/共<%=TotlePage%>頁</font>
????????? <% end if %>
???? <% case TotlePage:??? '只有上一頁%>
????????? <a href="lyb.asp?page=<%=page-1%>">[上一頁]</a>[第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]?
????? <% case else:? %>
????????? <a href="lyb.asp?page=<%=page-1%>">[上一頁]</a>
????????? <a href="lyb.asp?page=<%=page+1%>">[下一頁]</a>
????????? [第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]?
????? <%? end select %>
</font>
<%end if%>
??? </td>
此模塊用到了RecordCount、request.querystring等方法以及一些翻頁的技巧。由于篇幅限制,這里只給出了一部分比較重要的代碼,其它的簡略。
4.2 用戶留言及修改模塊
?? 該模塊的功能是,用戶可以在這里把自己的留言寫在這里,如果其它用戶瀏覽里,就可以看到此用戶的留言(模塊的縮略圖如下3.2)。
(圖4.2)
??? ?該模塊由留言昵稱、留言QQ、電子信箱、個人網站、留言主題和留言內容組成,其中后面有帶星號的為必填項,其它的為選填項,寫完之后單擊寫好了,即可提交,按返回上頁,直接返回到首頁。此頁中用到了表單提交的一些技術,相關代碼如下:
<script language="javascript">
function presub1(f) {
if(f.t1.value=="")
{
? alert("昵稱不能為空");
? return false;}
else if(f.t5.value=="")
{
? alert("主題不能為空");
? return false;}
? else if(f.s1.value=="")
{
? alert("請輸入正文內容");
? return false;}
else
? return true;
}
</script>
??? ?以上這段程序的功能是利用JAVA腳本進行本地驗證,當用戶的表單里填入空值或者不正確值的時候給出相應的提示。無需通過服務器。
??? <form method="post" οnsubmit="return presub1(this)" action="xly1.asp">
??? ?這句代碼的功能是將整個表單以post方式發送到xly1.asp文件里。
4.3 用戶注冊模塊
??? 此模塊的功能是用戶可以在這里注冊成為會員,有一些比普通用戶更有一些權限。下圖是注冊的縮略圖。
(圖4.3)
該模塊的具體設計和代碼如下:
<script language="javascript">
function presub1(f) {
if(f.yhm.value=="")
{
? alert("用戶名不能為空");
? return false;}
else if(f.kl.value=="")
{
? alert("密碼不能為空");
? return false;}
? else if(f.kl.value!=f.qrkl.value)
{
? alert("兩次輸入密碼不一致");
? return false;}
else if(f.zjhm.value=="")
{
? alert("請輸入證件號碼");
? return false;}
else
? return true;
}
</script>
以上程序是本地驗證,要求輸入的內容不能為空或者內容不合法。
<%
set rs=server.createobject("adodb.recordset")
rs.open "select * from news","dsn=ql;"
yhm=request("yhm")
kl=request("kl")
qrkl=request("qrkl")
zjhm=request("zjhm")
lxfs=request("lxfs")
dh=request("dh")
dw=request("dw")
%>
<html>
<head>
<title>注冊信息</title>
</head>
<body>
<table border="1" width="100%" height="334">
? <tr>
??? <td width="14%" height="61"></td>
??? <td width="86%" height="61">您注冊的信息:</td>
? </tr>
? <tr>
??? <td width="14%" height="261"></td>
??? <td width="86%" height="261" valign="top"><%=request("yhm")%><p>
??? <%=request("kl")%><p>
??? <%=request("qrkl")%><p>
??? <%=request("zjhm")%><p>
??? <%=request("lxfs")%><p>
??? <%=request("dh")%><p>
??? <%=request("dw")%><p>
??? </td>
? </tr>
</table>
</body>
</html>
以上程序把注冊信息發送到服務器的數據庫,并在屏幕上顯示出來。
4.4 管理員登陸模塊
(圖4.4)
該模塊的功能是管理員可以在這里登陸,可以在線的管理這些留言,管理員有特殊的權限,做普通用戶不可以做的事情,比如,可以將留言刪。(該模塊的縮略圖如3.3)具體的實現和代碼如下:
<%response.buffer=true%>
<%response.expires=0%>
這兩名話的作用是打開內存中的緩沖區。
<script language="javascript">
function presub(f) {
if(f.usname.value=="")
{
? alert("請輸入用戶名");
? return false;}
else if(f.uspas.value=="")
{
? alert("請輸入密碼");
? return false;}
? else
? return true;
}
</script>
以上這段程序的功能是利用JAVA腳本進行本地驗證,當管理員輸入的用戶名和密碼為空值或者不正確值的時候給出相應的提示
4.5 管理員回復與刪除留言模塊
??? ?此模塊的功能是管理員可以進入,并且可以進行增加和刪除等功能,(此模塊的縮略圖如3.4)具體的實現方和代碼如下:
(圖4.5)
當用戶點刪除時,彈出提示,詢問是否刪除,如果確定點是,否則點取消。
<%response.buffer=true%>
<%
set rs=server.createobject("adodb.recordset")
rs.open "select * from lyb","dsn=stu;"
%>
<%set cn=server.createobject("adodb.connection")
cn.open"dsn=stu;"
%>
定義緩沖區和連接數據源。
<!--#include file="conn.asp"-->
<%
?????? username=request.querystring("username")
???
?????? if trim(username)<>"" then
??????? sql="delete? from lyb where 昵稱='"& username? & "'"
??????? cn.execute sql??
?????? end if
%>
<%'***************************************顯示數據庫表stu中的信息***************************************
?? sql="select * from lyb "
? set rs=server.createobject("ADODB.Recordset")
? rs.Open sql,conn,1
? numzhuce=rs.RecordCount
? page=request.querystring("page")?????????? '接收上一頁、下一頁的頁號
???? if len(page)>0 and isnumeric(page) then
?????????? page=int(page)
???? else
?????????? page=1
???? end if
???? if not rs.eof? then
????????? size=7
?????? ? rs.PageSize=size?????????? '每頁記錄數
????????? TotlePage=rs.PageCount???? '總頁數
??????? TotlePage=int(numzhuce/size)
?????? ? if (numzhuce mod size)>0 then TotlePage=TotlePage+1? '總頁數
?????? ? if page<1 or page>TotlePage then
?????????? ? page=1
?????????? ? rs.AbsolutePage=page? '當前頁
?????? ? else
?????? ????? rs.AbsolutePage=page? '當前頁
????????? end if
??? ????? num=1??????????????????? '循環變量初值
%>
把總頁數和每頁的內容分別賦給變量。
<% ' ****************************刪除確認******************************************%>
? <script language=javascript>
?? function chkdel() {
?? var talk = window.confirm("請確定是否刪除該條記錄!");
?? if (talk==false) {return false;}
? }
? </script>
確認是否刪除該記錄。
<td width="1293" height="182" valign="top">
???? ????????????? <font size="2">
?????? <%while not rs.eof and num<=size%>
???? <font color="#FF00FF">?
?????? [留言主題]</font><%=rs("主題")%>
??? <br>
??? <font color="#FF00FF">
??? [留言內容]</font><%=rs("內容")%><br>
???                                      ?????????????
??? <%=rs("昵稱")%>  [<%=rs("時間")%>]<font color="#0000FF"> <br>
??? <font color="#0000FF">
??? +---------------------------------------------------------------------+
??? <a href="lybxg.asp?username=<%=rs("昵稱")%>" οnclick="return? chkdel();" >刪除?</a>
?????? </font> <br>
??? <%rs.movenext
??????????? num=num+1
wend
rs.close
set rs=nothing%>
??????? </font></font>
??? <font size="2">
??????????? <a href="lybxg.asp?page=1">[第一頁]</a>
? <% select case page
???? case 1:??????????? '只有下一頁
???????? if totlepage>1? then
%>
????????? <a href="lybxg.asp?page=2">[下一頁]</a>[第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]
????????? <% else %>
????????? 第<%=page%>頁/共<%=TotlePage%>頁</font>
????????? <% end if %>
???? <% case TotlePage:??? '只有上一頁
%>
????????? <a href="lybxg.asp?page=<%=page-1%>">[上一頁]</a>[第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]??
????? <% case else:? %>
????????? <a href="lybxg.asp?page=<%=page-1%>">[上一頁]</a>?
????????? <a href="lybxg.asp?page=<%=page+1%>">[下一頁]</a>?
????????? [第<%=page%>頁/共<%=TotlePage%>頁][共<%=numzhuce%>條記錄]??
????? <%? end select %>
<%end if%>
??????????? </td>
4.6 其他程序模塊
??? ?以上幾節簡單的介紹了幾個模塊的一些比較重點的程序段,但是在本節中介紹一下幾個在表面上看不到的,但是卻起著相當重要的一些代碼。
<%sj=date()
aaa="'"&request("T1")&"','"&request("T2")&"','"&request("T3")&"','"&request("T4")&"','"&request("T5")&"','"&request("s1")&"','"&sj&"'"%>
<%set cn=server.createobject("adodb.connection")
cn.open"dsn=stu;"
%>
<%strsql="insert into lyb(昵稱,qq,郵箱,網站,主題,內容,時間) values("&aaa&")"
cn.execute(strsql)
%>
<%cn.close
set cn=nothing%>
<%response.redirect"lyb.asp"%>
??? ?以上這段代碼是在后臺運行的,該網頁是個空的,什么也不顯示,當用戶寫完留言的時候,把表單里所有的東西都要提交到這里,利用ASP提供的insert int 等語句把他傳送到服務器的數據庫的表格里。
<%response.buffer=true%>
<%usname=request("usname")
uspas=request("uspas")
set rs=server.createobject("adodb.recordset")
rs.open "select * from password","dsn=stu;"
%>
<html>
<head>
<body>
<%while not rs.eof
if usname=rs("用戶名") and uspas=rs("密碼") then
%>
<%response.redirect "lybxg.asp"%>
<%response.end%>
<%end if
rs.movenext
wend
rs.close
set rs=nothing%>
<%response.redirect"lybgly.asp"%>
</body>
</html>
該程序段的功能是,接收用戶名和密碼,并把用戶名和密碼發送到服務器的數據庫里驗證,如果和數據庫里的一樣,則可以登陸,否則提示用戶名或密碼錯誤。
<%
??? constr="DBQ="+server.mappath("stu.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
??? set conn=Server.CreateObject("ADODB.connection")
??? conn.open constr
%>?
連接數據源文件。