利用ASP打造網站論壇DIY -2

來源:互聯網
上載者:User
   二、構建
  1、構建主表單
  先要給出一個表單,能夠讓網友輸入註冊訊息,這些是HTML的內容,且放在一邊,我們來仔細看看具體實現註冊的ASP指令碼。
  (1)將資料中的單引號改成兩個單引號,並且在前後加上單引號
Function SqlStr( data )
SqlStr = "'" & Replace( data,"'", "''" ) & "'"
End Function
  註:這是一個自訂的函數,用來把使用者輸入中的單引號(')轉換成兩個單引號('')。在ASP中,用雙引號圍著的是字串,因而上面的"'"代表的就是只有一個單引號的字串。之所以要把一個單引號換成兩個單引號,這是因為在SQL語句中,用單引號圍起來是用來代表變數的。為了不至於混淆,就要把字串中的單引號用兩個單引號來表示。而所有的使用者輸入都要作為變數嵌入到SQL語句中的,所以這個函數是必不可少的。
  (2)存貯準備
id=Request("id")
password=Request("password")
nickname=Request("nickname")
email=Request("email")
sex=request("sex")
  註:把來自使用者輸入表單中的內容儲存在變數中,這不是必須的,但寫了更容易讀寫。
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
  因為這些內容不是必須填的,為了防止使用者沒有輸入任何內容,而造成資料庫操作上的錯誤,就必須把沒有填入欄位用空格來代替。
  (3)建立串連
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
 註:這一段是建立資料庫連接,資料庫的名稱為bbssystem.mdb,這一段中唯一要注意的是Server.MapPath函數的應用。一般來說,凡是涉及到具體的目錄的地方,都不要直接使用目錄名,而用Server.MapPath函數來代替。善用好Server.MapPath和Request.ServerVariables()等函數,能夠讓你的WEB應用具有更好的可移植性。
Set cmd = Server.CreateObject("ADODB.Command")
  (4)查詢作者是否已存在
Set cmd.ActiveConnection = conn
cmd.CommandText = "查詢作者"
ReDim param(0) ' 聲明參數數組
param(0) = CStr(id) ' Cint 不可忽略
Set rs = cmd.Execute( ,param )
  註:這一段就是用來執行預存程式的。在ADO中執行查詢的方法有很多種,但是對於預存程式就只能使用Command對象了。首先,建立了一個叫做cmd的Command對象,然後把conn連線物件設定給cmd對象的ActiveConnection屬性,把要執行的查詢名稱"查詢作者"設定給CommandText屬性,然後為查詢參數賦值。我們聲明了一個參數數組param(0),因為在"查詢作者"這個查詢中只有一個參數,所以數組就只有一個分量了。一般的,在查詢中有幾個參數,就要申明有相應分量個數的參數數組。並且參數出現的順序是個數組中分量的順序是對應的。在使用參數查詢的過程中,尤其要注意的是,參數的類型要嚴格匹配,否這就會出錯,所以上面的CStr()類型轉換函式是不可缺少的。
if not (rs.eof or rs.bof) then
response.write "錯誤,你輸入的ID號已經被佔用,請換一個再試試!"
else
sql = "Insert Into 作者表 (id, 暱稱,Email, 密碼,姓名,學校,系別,性別,電話) Values("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(nickname) & ","
sql = sql & SqlStr(email) & ","
sql = sql & SqlStr(password) & ","
sql = sql & SqlStr(name) & ",&", "
sql = sql & SqlStr(sex) & ","
sql = sql & SqlStr(phone) & ")"
conn.Execute sql
  使用一個SQL的Insert語句把資料插入到資料庫中。其實這一查詢也可以做成預存程式放在資料庫中,我偷了點懶:-)不過對比之下也可以看到預存程式的好處,執行時查詢寫起來實在是太麻煩了。
  2、構建文章顯示模組
  前面說過,一片具體的文章是分屬在看板和主體之下的。因此顯示文章也要經過看板列表和主體列表這兩頁面後,才能得到特定主題下文章的列表。
  (1)板列表的顯示頁面:
< html>
< head>
< title>看板列表< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
  (2)開啟串連,顯示看板列表
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "select * from 看板列表"
set rs=conn.execute(sql)
%>
  註:簡單的SQL查詢,把所有的看板有關訊息傳回到紀錄集RS中。下面的任務就是顯示紀錄記得內容,並在相應的看板名稱上建立顯示看板主題的串連。
< body bgcolor="#FFFFFF">
< h2 align="center">看板列表</h2>
< table width="60%" border="0"cellspacing="0" cellpadding="0"align="center">
< tr bgcolor="#FFFFCC">
< td height="35" width="25%">看板名稱</td>
< td height="35" width="21%">板主</td>
< td height="35" width="23%">主題數</td>
< td height="35" width="31%">板主登陸</td>
< /tr>
  註:這兒一部分是顯示出表格中每一列的標題,這兒我沒有用一個統一的函數來顯示RS紀錄記的內容,因為這樣可以對錶格的外觀和風格做更多的控制,使用起來雖然有點麻煩,但是卻更為靈活。
< %
do
boardid=rs("id")
boardname=rs("名稱")
boardmanager=rs("板主")
response.write "< tr>< td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
  註:這一行是重點,當點擊了各個板的名稱後,可以串連到顯示看板主題的頁面。程式碼看起來有點麻煩,我分解了給你講,你就會明白了。在點擊之後,瀏覽器請求使用的是qBoard.asp頁面,並帶有一個參數boardid,代表要顯示看板的ID號,在請求頁面和參數之間用問號(?)分隔。Boardid是前面設定了的變數,其中包含的就是對應看板的ID號。這個串連中還帶有另外一個參數boardname,用來把看板名稱傳遞給qBoard.asp頁面。在多個參數間使用"&"來分隔。這個參數不是必須的,傳遞過去是為了免得在qBorad.asp中再次用boardid來查詢看板名稱。一般來說,能夠少用資料庫操作就應當盡量的少用,這樣可以提高ASP頁面的效能。因為Response.Write語句使用字串作為參數的,所以上面的字串和變數之間使用的是"&"連接符。最後ASP頁面解釋的結果應該是像這樣的
<td>< a href=qBoard.asp?boardid=1&boardname=系統板>系統板 < /a>< td>。
response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
response.write "< td>" &rs("主題數") & "< /td>"
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">板務處理< /a></td>< /tr>"
  註:在這個表中,除了可以由串連來顯示看板主題的內容,還有一個斑竹查詢部分和板務處理部分,版主查詢可以是通過qAuthor.asp來實現的,它只是簡單的從資料庫中取出作者訊息,並顯示出來,這兒就不多說了。而板務處理是由managerlogin.asp頁面來處理的。這屬於文章審閱模組,我在後面再詳說。
rs.movenext
loop until rs.eof
%>
  註:通過一個do … loop迴圈,把紀錄集中所有的訊息都顯示了出來。
< /table>
< div align="center"><br>
  點擊看板名稱可以得到主題列表,點擊板主名稱可以察看板主訊息
< /div>
< /body>
< /html>
< %
set rs=nothing
conn.close
set conn=nothing
%>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.