第七章 Doking's BLOG使用者登入頁面的實作
已完成使用者的註冊,使用者現在可以登入網站中,發表筆記、筆記回應。
使用者登錄,經過驗證正確,頁面換了個使用者登入後的面貌。
(1)開啟範本bkblog.dwt.aspx,在左邊欄插入表格yhtab,並設計如圖7-1黑色圈所示。
(2)插入關於YH表查詢的資料集yhlog,以驗證使用者登入的正確。
①將資料集yhlog設為篩選,如圖7-2所示。
圖7-1 表格yhtab的設計圖
圖7-2 插入資料集yhlog
②點選「進階」按鈕,切換到進階資料集模式,如圖7-3所示。
圖7-3 插入資料集yhlog
③點選參數“+”,跳出“編輯參數”對話框,填寫名稱為“@Logpas”,類型選擇“WChar”,如圖7-4所示。
圖7-4 新增參加Logpass
④點選“建立”按鈕,跳出“產生值”對話框,名稱為“Logpass”,來源選擇“表單變數”,如圖7-5所示。
圖7-5 生成值對話框
⑤點選「確定」儲存設置,一直回到資料集yhlog對話框。修改SQL語句,修改結果如圖7-6所示。
圖7-6 對資料集yhlog進行修改
(3)在<html>標籤之前,插入如圖7-7紅色圈所示的程式碼。
圖7-7 定義函數uselog
(4)拖曳模板bkblog.dwt.aspx中的資料集yhlog下的欄位YHNAME到頁面任何位置,再拖曳資料集yhlog下的欄位YHID在其後,程式碼如下:
<%# yhlog.FieldValue("YHNAME", Container) %><%# yhlog.FieldValue("YHID", Container) %>
把上面程式碼改為:
<%# uselog(yhlog.FieldValue("YHNAME", Container),yhlog .FieldValue("YHID", Container)) %>
(5)插入關於ZT表查詢的資料集bjre,傳回該使用者發表的學習筆記總數。
①將資料集設為“篩選”,篩選欄位為:YHID,篩選方式為:輸入值,如圖7-8所示。
圖7-8 插入資料集bjre
②點選“進階”,切換到進階資料集模式,將SQL修改成如圖7-9所示。
圖7-9 修改資料集bjre
③點選「編輯」按鈕,在文字域中把YHID改為session(”USEID」),結果如圖7-10所示。
圖7-10 編輯資料集bire的參數
④按「確定」鍵,再按「確定」鍵完成資料集bire。
(6)插入關於HF表格查詢的資料集plre,傳回該使用者發表的學習筆記總數。除了查詢表不同外,其他設定與資料集bjre相同(可以先複製貼上資料集plre,再進行修改)。
(7)拖曳資料集bjre下的欄位Eprl100到表格yhtab中的「發表筆記:」之後;拖曳資料集plre下的欄位Eprl100到表格yhtab中的「發表回應:」之後。
(8)把遊標移到表格yhtab中的“使用者資料”之前,點選ASP.NET快捷選單下的“綁定資料”,結果如圖7-11所示。
圖7-11 插入綁定資料
保持遊標在圖71紅色垂直線的位置,輸入:session(“USENAME”)
(9)返回設計視圖,並為表格yhtab中的“發表新筆記”建立超級連結:.. /ztfb.aspx
給表格yhtab中的「修改資料」建立超級連結:../yhsg.aspx
結果如圖7-12所示。
圖7-12 表格yhtab的修改
(10)選擇表格yhtab,返回程式碼視圖,按“Ctrl+X”或在【編輯】選單中選擇“剪下”,老方法:把它貼到新建立的記事本或Word文檔中。
(11)回到設計視圖,選擇表格logtab,把遊標移至如圖7-13所示的紅色垂直線的位置。
圖7-13 移至遊標所在位置
(12)輸入代碼,如圖7-14紅色圈所示。
圖7-14 在標籤<form>之前插入程式碼
(13)把遊標移到Yhlogfrm結束標籤</form>之後,輸入程式碼,如圖7-15紅圈所示。
圖7-15 標籤</form>之後插入程式碼
(14)把第7步驟剪下的表格yhtab貼在程式碼<%end if%>程式碼之前,<% else %>之後。
(15)保存模板bkblog.dwt.aspx。打開所有基本於bkblog.dwt.aspx範本建立的網頁,分別在【伺服器行為】中把bkblog.dwt.aspx範本中新加入的資料集yhlog、bjre、plre,複製、貼上過來。再插入如第3步驟的程式碼,就OK了!
(16)在IE瀏覽器中瀏覽index.aspx,使用者登入前如圖7-16所示,使用者登入成功如圖7-17所示。記得ASP.NET是不支援gb2312程式傳輸,要進行修改,上一章已經說過了,以後不再哆嗦。
圖7-16 用戶登入前
圖7-17 使用者登入後
提醒:為了方便讀者學習,教學分成模組來寫。實際上一開始就得在模板中所有功能做好,特別是在模板必須插入的數據集及頁頭載入程序,因為這些在後期修改後不能更新網頁。
使用者登入後,就可以對 各學習筆記發表回覆訊息。
(1)開啟hf.aspx,插入表單yhplfrm,再插入表格Hftab,在表格中插入伺服器文字方塊控制項,ID為HFNAME;插入伺服器文字區域控件,ID為HFTEXT;插入「發佈」按鈕,ID為plbottom,將其設為停用,結果如圖7-18所示。
圖7-18 表格Hftab的有關設計
(3)綁定資料session(“usename”)到表格Hftab中的「姓名:」之後(方法如7.1第8步驟綁定「使用者資訊」前的使用者名稱)。
(4)拖曳資料集Ztre下的欄位ZTNAME到文字方塊HFNAME,在文字方塊HFNAME的屬性視窗中,將初始值:
<%# Ztre.FieldValue("ZTNAME", Container) %>
改為:
<%# “RE:”&Ztre.FieldValue("ZTNAME", Container) %>
(5)選擇按鈕plbottom,右鍵選擇狀態列< input # plbottom>,在彈出快捷選單中選擇“編輯標籤”,如圖7-19所示。
圖7-19 選擇< input # plbottom>快速編輯標籤
(6)在彈出的< input # plbottom>快捷編輯標籤中把:
disabled=”true”
改為:
disabled=<%# iif((session("USENAME ")<>nothing),false,true) %>
結果如圖7-20所示。
圖7-20 快速< input # plbottom>編輯標籤
即設按鈕plbottom,當使用者登入前為停用,使用者登入後為可用。
(4)新增插入記錄伺服器行為,提交值來自表單yhplfrm,選擇插入表格為HF,其他設定如圖7-21所示。
圖7-21 新增插入記錄伺服器行為
在圖7-21中,可以看到欄位HFID、HFTIME、YHID、ZTID沒有取得值。欄位HFID是自動編號,資料庫會自動為記錄新增數值;欄位HFTIME在Access中已設預設值為date(),所以資料庫會自動為新增加的記錄新增當天日期。那欄位YHID就是登入使用者的ID碼,欄位ZTID就是要發表的筆記ID。所以要把登入使用者的ID碼加入到欄位YHID中,要發表的筆記ID碼加入到欄位ZTID中。
(5)回到程式碼視圖,找到插入記錄(dkconn,HF)的程式碼,如圖7-22黑色已選取部分。
圖7-22 找出插入記錄(dkconn,HF)的代碼
(6)把代碼:
CommandText='<%# "INSERT INTO HF (HFNAME, HFTEXT) VALUES (?, ?,)" %>'
改為:
CommandText ='<%# "INSERT INTO HF (HFNAME, HFTEXT, ZTID, YHID) VALUES (?, ?, ?, ?)" %>'
(7) 依序加入參數:
<Parameter Name="@ZTID" Value= '<%# Ztre.FieldValue("ZTID", Container) %>' Type="Integer" />
<Parameter Name="@YHID" Value='<%# SESSION("USEID") %>' Type=" Integer" />
結果如圖7-23所示。
圖7-23 插入記錄(dkconn,HF)代碼的修改結果
(8)在發布回覆訊息前,得對回覆標題和回覆的內容進行驗證,防止發布空標題或空內容的回覆訊息。參考6.2節插入RequiredFieldValidato驗證控制項方法,分別為文字方塊HFNAME、文字區域控制項HFTEXT新增RequiredFieldValidato驗證控制項。
(9)用戶發布回覆訊息時,還得給學習筆記的回覆總數自動增加1,也就是給ZT表下的HFZS欄位自動增加1。
①在【伺服器行為】面板中,插入「更新記錄」伺服器行為,設更新表格為ZT,暫時設提交值,來自表單yhplfrm,暫時設:'HFZS'從'HFTEXT'取得值(作為'Integer') ;暫時設:'ZTID'將'HFTEXT' 用作'Integer'來選擇記錄
②為什麼全是暫時的?那是為了先讓Dreamweaver自動產生一些程式碼,後方便修改。先切換程式碼視圖,找到更新記錄(dkconn,ZT)的原始程式碼,找出其中的程式碼:
<Parameter Name="@HFZS" Value='<%# IIf((Request.Form("HFTEXT") <> Nothing ), Request.Form("HFTEXT"), "") %>' Type="Integer" />
<Parameter Name="@ZTID" Value='<%# IIf((Request.Form("HFTEXT") < > Nothing), Request.Form("HFTEXT"), "") %>' Type="Integer" />
把它改為:
<Parameter Name="@HFZS" Value='<%# Ztre.FieldValue(" HFZS", Container)+1 %>' Type="Integer" />
<Parameter Name="@ZTID" Value='<%# session("ztanw") %>' Type="Integer" />
(10)保存hf.aspx。
使用者登入後,除了可以發表回覆訊息外,還可以發表新的學習筆記。
(1)新建由模板bkblog.dwt.aspx產生動態網頁ztfb.aspx,在mainbody可編輯區域中插入一列五行的表格ztfb。
(2)新增資料集zthb,設篩選為YHID,並設參數為階段變數USENAME,其設計如圖7-24所示。
圖7-24 新增資料集zthb
(3)拖曳資料集下的相關欄位到表格ztfb中,方法參考第4.2節的方法。
(4)開啟hf.aspx,複製表單yhplfrm,把它貼到網頁ztfb.aspx中的表格zthb的第五行,清空文字方塊HFNAME,並進行必要的修改,結果如圖7-25所示。
圖7-25 表格ztfb的設計
(2)把文字方塊HFNAME改名為ZTNAME,文字區域HFTEXT改名為ZTTEXT。
(3)設表格zthb的第一、二、三行為資料集zthb的重複區域,再在表格的第四行插入資料集導覽。
(4)插入清單/選單LMID,點選其屬性視窗中的清單值,在彈出的清單值對話方塊中,輸入項目標籤為:設計項目;值為:1,按「確定」鍵,如圖7- 26所示。
圖7-26 LMID列表值對話框
(5)保持列表/選單LMIDl在選,切換到代碼視圖,找到列表/選單LMID的原代碼,拖曳資料集menuda下的欄位LMID,取代value等於號碼的資料1 ,如圖7-27所示。
圖7-27 拖曳資料集menuda下的欄位LMID
(6)拖曳資料集menuda下的欄位LM,取代“設計項目”,結果如圖7-28所示。
圖7-28 拖曳資料集menuda下的欄位LM
(7)選擇圖7-3-5紅色圈中的程式碼,並定義它為資料集menuda的重複區域,結果如圖7-29所示。
圖7-29 定義清單中的資料集menuda重複區域
(8)加入「插入記錄」伺服器行為,其設定如圖7-30所示。
圖7-30 新增「插入記錄」伺服器行為
(9)切換到程式碼視圖,找到插入記錄(
dkconn,ZT)的原始程式碼,找到代碼: CommandText='<%# "INSERT INTO ZT (LMID, ZTNAME, ZYTEXT ) VALUES (?, ?, ?)" %>'
改為:
CommandText='<%# "INSERT INTO ZT (LMID, ZTNAME, ZYTEXT,YHID) VALUES (?, ?, ?, ?)" %>'
( 10)新增參數:
<Parameter Name="@YHID" Value='<%# session("USEID") %>' Type="Integer" />
結果如圖7-31所示。
圖7-31 插入記錄(dkconn,ZT)修改的原始程式碼
修改使用者資料頁面設計與使用者註冊頁面設計基本相同。
(1)打開註冊頁面yhlogok.aspx,把它另存為yhsg.aspx,並進行適當的修改,結果如圖7-32所示。
圖7-32 yhsg.aspx頁面設計
(2)刪除「插入記錄(dkconn,YH)」伺服器行為,新增資料集yhsg,如圖7-33所示。
圖7-33 插入資料集yhsg
(3)綁定資料集yhsg下的相關欄位到對應的文字方塊中,結果如圖7-34所示。
圖7-34 綁定動態文字到有關文字方塊中
(4)新增更新記錄伺服器行為,暫時設:'YHID'將'YHNAME'用作'Integer'來選擇記錄,結果如圖7-35所示。
圖7-35 新增更記錄伺服器行為
(5)在更記錄的原始程式碼中,找到程式碼:
<Parameter Name="@YHID" Value='<%# IIf((Request.Form("YHNAME") <> Nothing), Request.Form("YHNAME"), "") %>' Type="Integer" />
改為:
<Parameter Name="@YHID" Value='<%# IIf((Not Session( "USEID") Is Nothing), Session("USEID"), "") %>' Type="Integer" />
(6) 儲存yhsg.aspx。