在訪問管理頁(yè)面之前必須經(jīng)過身份驗(yàn)證。本實(shí)現(xiàn)中我們用圖3所示的secure.htm頁(yè)面供管理員輸入身份識(shí)別碼,若用戶輸入值非空則用Cookies來(lái)保存它。執(zhí)行管理任務(wù)的頁(yè)面是admin.asp,每當(dāng)用戶試圖訪問這個(gè)頁(yè)面,下面的代碼將檢查這個(gè)Cookies與用戶身份識(shí)別碼(這里是123456)是否匹配,如匹配失敗則將該用戶重定向到輸入身份識(shí)別碼的secure.htm頁(yè)面。 < % strPW1 = Request.Form("txtPW") if strPW1 < > "" then Response.Cookies("PassWord") = strPW1 end if 'strPW1 < > "" strPW2 = Request.Cookies("PassWord") If strPW2 < > "123456" Then Response.Redirect("secure.htm") End if 'strPW2 < > "123456" %> 一旦管理員的身份驗(yàn)證通過,他們能夠通過Admin.asp執(zhí)行的操作包括: 查看Guests表中的所有記錄 編輯或 刪除指定的記錄 向所有郵件列表中的用戶發(fā)送郵件 管理頁(yè)面admin.asp如圖4所示。顯示Guests表的記錄時(shí)先從數(shù)據(jù)庫(kù)提取這些記錄,然后使用一個(gè)For Each ... Next結(jié)構(gòu)遍歷記錄集的字段集合,提取字段名字并設(shè)置表格的表頭。在這個(gè)頁(yè)面中我們不再顯示Guest_ID字段,但每個(gè)用戶記錄的前面都加上了一個(gè)“刪除”和“編輯”功能的鏈接。用戶名字字段Guest_Name與郵件字段Guest_Email被轉(zhuǎn)換為mailto鏈接,單擊名字可以單獨(dú)向該用戶發(fā)送郵件。其它要格式化的字段還包括是否發(fā)送郵件(Mail_List)以及用戶留言(Guest_Comment)。生成表頭的代碼為: ' 從數(shù)據(jù)庫(kù)選取記錄 strSQL_Select = "SELECT Guests.Guest_ID, Guests.Guest_Email, " & _ " Guests.Guest_Name, Guests.Mail_List, " & _ " Guests.Guest_Comment, Guests.Sign_Date " & _ " FROM Guests ORDER BY Guests.Guest_Name; " Set oConn=Server.CreateObject("ADODB.Connection") oConn.Open strDSNPath Set rsGbook = oConn.Execute(strSQL_Select) if rsGbook.BOF = True and rsGbook.EOF = True then ...數(shù)據(jù)庫(kù)空提示,略... else rsGbook.MoveFirst %> < table BORDER="0" cellpadding="5" cellspacing="2" align="center"> < tr> < % for each Head in rsGbook.Fields if Head.Name = "Guest_ID" then %> ..."刪除"與"編輯"表頭,略... < % else %> < td VALIGN="middle" align="center">< font face=Arial size=2> < % select case Head.Name case "Guest_Name" Response.Write "名 字" case "Mail_List" Response.Write "郵件列表" case "Guest_Comment" Response.Write "留 言" end select %> < /font>< HR>< /td> < % end if 'Head.Name = "Guest_ID" next %> < /tr> 為在表格的其余位置顯示用戶注冊(cè)記錄,我們用兩個(gè)嵌套的循環(huán)遍歷所有記錄的所有字段,即在一個(gè)Do While ...循環(huán)里面嵌入一個(gè)For Each ... Next 循環(huán)。數(shù)據(jù)的格式化工作放在For Each ... Next循環(huán)內(nèi)。其實(shí)現(xiàn)代碼類如: < % Do While Not rsGbook.EOF %> < tr> < % For Each Field in rsGbook.Fields if Field.Name = "Guest_ID" then %> < td VALIGN="middle" ALIGN="center"> ...刪除功能的鏈接,略... < /td> < td VALIGN="middle" ALIGN="center"> ...編輯功能的鏈接,略... < /td> < % else %> < td VALIGN="middle" align="center"> < % if isNull(Field) then Response.Write " " else if Field.Name = "Guest_Name" then Response.Write ...用戶名字的mailto鏈接,略... elseif Field.Name = "Mail_List" then ...輸出"是"或"否",略... elseif Field.Name = "Guest_Comment" then ...輸出用戶留言,略... end if 'Field.Name end if 'isNull(Field)%> < /td> < % end if 'Field.Name = "Guest_ID" Next rsGbook.MoveNext %> < /tr> < % loop %> < /table> 現(xiàn)在我們已經(jīng)把數(shù)據(jù)庫(kù)記錄顯示在表格中了。單擊表格中的圖形鏈接可以訪問edit_record.asp和delete_record.asp,這兩個(gè)文件分別提供記錄的編輯和刪除功能。首先我們來(lái)看看刪除功能的實(shí)現(xiàn): < % iGuestID = Request.Querystring("ID") if iGuestID < > "" then '從數(shù)據(jù)庫(kù)刪除由ID標(biāo)識(shí)的記錄 strSQL_Delete = "DELETE FROM Guests " & _ " WHERE Guest_ID=" & iGuestID Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open strDSNPath on error resume next oConn.Execute strSQL_Delete oConn.Close Set oConn = Nothing if err.number < > 0 then Response.Redirect("admin.asp?Error_Del=True") else Response.Redirect("admin.asp?Error_Del=False") end if else Response.Redirect("admin.asp") end if 'iGuestID < > "" %> 上述代碼與unsubscribe.asp中的代碼非常相似,實(shí)際上兩者完成的任務(wù)也很類似。這里的ID是必須的,它標(biāo)識(shí)了要求刪除的記錄。實(shí)際的刪除任務(wù)通過DELETE SQL命令完成。 更新記錄頁(yè)面edit_record.asp所用的代碼稍微復(fù)雜一點(diǎn),其界面如圖5所示。這里要用到兩個(gè)SQL語(yǔ)句:第一個(gè)SQL SELECT語(yǔ)句從數(shù)據(jù)庫(kù)選取需要編輯的記錄;第二個(gè)SQL UPDATE語(yǔ)句將管理員編輯結(jié)果保存到數(shù)據(jù)庫(kù)。這里我們不再具體分析實(shí)現(xiàn)過程,請(qǐng)參見本文所附代碼及其注釋。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!