(1)因?yàn)槎滔⑾到y(tǒng)必須存在于要求登錄會(huì)員系統(tǒng)中,所以需要一個(gè)簡(jiǎn)單的用戶注冊(cè)和登錄。
(2)每位用戶擁有屬于自己的收件箱和發(fā)件箱。
(3)發(fā)送的消息在對(duì)方登錄時(shí)應(yīng)該獲得提醒前去查閱。
(4)批量刪除消息的功能(其實(shí)是不顯示而已)。
(5)群發(fā)消息功能(可以對(duì)幾個(gè)用戶發(fā)出同樣的消息)。
(6)用戶可以自定義好友組。
為了可以在本機(jī)對(duì)所開發(fā)的Web程序進(jìn)行測(cè)試、預(yù)覽,我們需要在本地磁盤上對(duì)開發(fā)目錄做“Web共享”操作。
(1)在Windows 2000/XP中,單擊“開始→設(shè)置→控制面板”菜單項(xiàng),在出現(xiàn)的對(duì)話框中雙擊“添加或刪除程序”圖標(biāo),在出現(xiàn)的對(duì)話框中單擊“添加/刪除Windows組件”按鈕,然后在出現(xiàn)的對(duì)話框中單擊“Internet信息服務(wù)”選項(xiàng),單擊“下一步”按鈕,將Windows XP安裝光盤置入光驅(qū),即開始安裝和配置“Internet信息服務(wù)”組件。安裝完成,單擊“完成”按鈕即可。
注意:在Windows 98中,需要安裝PWS(Personal Web Server,個(gè)人Web服務(wù))。
(2)在本地磁盤上建立目錄“Smail”,如C:\smail,用于存放“短消息系統(tǒng)”所有的文件。
(3)右鍵單擊該目錄,在出現(xiàn)的菜單中選擇“屬性”命令,在出現(xiàn)的對(duì)話框中單擊“Web共享”選項(xiàng)卡,單擊“共享這個(gè)文件夾”選項(xiàng),然后在出現(xiàn)的對(duì)話框中單擊“目錄瀏覽”選項(xiàng)即可。
完成后你可以通過(guò)http://localhost/Smail來(lái)訪問(wèn)存在于該目錄中的文件。
這里,我們使用Access 2003作為站點(diǎn)的后臺(tái)數(shù)據(jù)庫(kù),在前面建立的“Smail”目錄中建立一個(gè)名字為“Smail”的數(shù)據(jù)庫(kù),根據(jù)需要的功能,我們?cè)趲?kù)中建立3個(gè)數(shù)據(jù)表。
(1)用戶信息表:需要用戶登錄自然要有存儲(chǔ)用戶信息的數(shù)據(jù)表,下面是一個(gè)簡(jiǎn)單的用戶信息表結(jié)構(gòu)。
字段名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 默認(rèn)值 | 備注 |
UID | 自動(dòng)編號(hào) | 長(zhǎng)整型 | - | 設(shè)置為“主鍵” |
用戶 | 文本 | 20 | - | |
密碼 | 文本 | 12 | - |
注意:在設(shè)計(jì)完“用戶信息表”后直接在表中加入了一些用戶名作為系統(tǒng)開發(fā)過(guò)程中測(cè)試使用。
(2)短消息內(nèi)容表:用于存放短消息的內(nèi)容以及相關(guān)信息。
字段名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 默認(rèn)值 | 備注 |
SID | 自動(dòng)編號(hào) | 長(zhǎng)整型 | - | 設(shè)置為“主鍵” |
發(fā)件人 | 文本 | 20 | - | 對(duì)應(yīng)用戶信息表中的用戶名 |
發(fā)件時(shí)間 | 日期/時(shí)間 | - | Now() | 當(dāng)發(fā)件內(nèi)容提交時(shí)讀取服務(wù)器系統(tǒng)時(shí)間 |
消息內(nèi)容 | 備注 | - | - | 消息內(nèi)容存放字段 |
發(fā)件顯示 | 是/否 | - | True | 值為“True”表示顯示,“False”表示不顯示 |
收件人 | 文本 | 20 | - | 對(duì)應(yīng)用戶信息表中的用戶名 |
收件時(shí)間 | 日期/時(shí)間 | - | - | 收件人閱讀消息內(nèi)容的時(shí)間 |
收件顯示 | 是/否 | - | True | 值為“True”表示顯示,“False”表示不顯示 |
(3)好友組信息表:由于希望實(shí)現(xiàn)方便的群發(fā)功能,因此創(chuàng)建該表用來(lái)記錄用戶常用的發(fā)件對(duì)象集合。
字段名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 默認(rèn)值 | 備注 |
ZID | 自動(dòng)編號(hào) | 長(zhǎng)整型 | - | 設(shè)置為“主鍵” |
組名 | 文本 | 20 | - | 用戶自定義的組名稱 |
組成員 | 文本 | 200 | - | 組中的成員名字,之間用“,”分隔 |
組屬于 | 文本 | 20 | - | 該組屬于的用戶 |
(1)啟動(dòng)Dreamweaver MX 2004,在歡迎頁(yè)面上單擊“Dreamweaver Site…”(Dreamweaver站點(diǎn))選項(xiàng),啟動(dòng)創(chuàng)建站點(diǎn)向?qū)А?/p>
(2)在“Basic”(基本)模式下建立站點(diǎn),首先輸入站點(diǎn)名稱“短消息系統(tǒng)”。單擊“Next”按鈕。
(3)在出現(xiàn)的對(duì)話框中,詢問(wèn)當(dāng)前站點(diǎn)使用何種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)開發(fā)。單擊“Yes,I want to......”選項(xiàng),然后選擇“ASP VBScript”選項(xiàng)。單擊“Next”按鈕。
(4)在出現(xiàn)的對(duì)話框中,詢問(wèn)對(duì)測(cè)試文件存放、預(yù)覽等選項(xiàng),一般我們均在本地測(cè)試系統(tǒng),這里選擇前面建立的目錄即可,如C:\smail。單擊“Next”按鈕。
(5)在出現(xiàn)的對(duì)話框中,詢問(wèn)當(dāng)前站點(diǎn)的測(cè)試路徑,我們按照先前定義的“Web共享”目錄名輸入“http://localhost/Smail/”后單擊“Test URL”(測(cè)試URL)按鈕,系統(tǒng)提示通過(guò)測(cè)試,單擊“確定”按鈕。單擊“Next”按鈕。
(6)在出現(xiàn)的對(duì)話框中,詢問(wèn)你完成后的頁(yè)面是否及時(shí)更新到其他機(jī)器中,該選項(xiàng)主要針對(duì)團(tuán)隊(duì)開發(fā)設(shè)立,讓你的同事可以隨時(shí)了解你開發(fā)過(guò)程中的改動(dòng),單擊“No”選項(xiàng)。單擊“Next”按鈕。
(7)在出現(xiàn)的對(duì)話框中,顯示站點(diǎn)定義完畢的一些信息,直接單擊“Done”(完成)按鈕,完成“Smail”站點(diǎn)的建立。
在Dreamweaver中進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)開發(fā),必須先要與數(shù)據(jù)庫(kù)鏈接。在歡迎窗口上選擇“ASP VBScript”選項(xiàng)創(chuàng)建一個(gè)新文件。單擊“Application”(應(yīng)用程序)工作面板,單擊“Database”(數(shù)據(jù)庫(kù))選項(xiàng)卡,然后單擊“+”按鈕,選擇“Custom Connection String”(自定義連接字符串)命令,在出現(xiàn)的對(duì)話框中進(jìn)行鏈接設(shè)置。其中:
“Connection name”(連接名稱):Smail。
“Connection string”(連接字符串): Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Smail\smail.mdb。
注意:這里的數(shù)據(jù)源位置C:\Smail\smail.mdb,即是你前面存放數(shù)據(jù)庫(kù)的位置,需要根據(jù)你自己的具體情況修改。
“Dreamweaver should connect”(Dreamweaver應(yīng)連接):Using driver on this machine(使用本地計(jì)算機(jī)上的驅(qū)動(dòng)程序)。
完成后單擊“Test”(測(cè)試)按鈕,如果鏈接成功則會(huì)出現(xiàn)“Connection was made successfully”提示對(duì)話框。
根據(jù)需要的功能,我們必須先設(shè)定好需要開發(fā)的頁(yè)面及其相應(yīng)的功能。
(1)用戶注冊(cè)、登錄以及必要的信息提示。包括:
Default.asp(用戶登錄頁(yè))、Login.asp(新用戶注冊(cè)頁(yè))、LoginError.asp(新用戶注冊(cè)重名提示頁(yè))、Error.asp(登錄錯(cuò)誤后轉(zhuǎn)向的錯(cuò)誤提示頁(yè))、Restrict.asp(限制未登錄用戶訪問(wèn)的代碼頁(yè))等。
(2)實(shí)現(xiàn)短消息收發(fā)的主體文件。包括:
Index.asp(登錄正確后轉(zhuǎn)向的首頁(yè))、S_Take.asp(用戶的收件箱頁(yè)面)、S_Send.asp(用戶的發(fā)件箱頁(yè)面)、S_Mail.asp(用戶發(fā)送短消息的頁(yè)面)、S_Group.asp(用戶自定義組的頁(yè)面)等。
(3)對(duì)必要的細(xì)節(jié)進(jìn)行修改。包括:
修改S_Mail.asp頁(yè)以適合群發(fā)消息、修改Login.asp頁(yè)屏蔽“,"字符等操作。
凡是涉及用戶概念的系統(tǒng)免不了都需要制作注冊(cè)和登錄等頁(yè)面。
(1)新建Default.asp頁(yè)面,在頁(yè)面內(nèi)設(shè)計(jì)一個(gè)登錄表單,如圖1所示。在Properties(屬性)面板中設(shè)置文本框名分別為“username”和“password”,其中“password”文本框的“Type”類型設(shè)置為“password”。
Get input from form(從表單獲取輸入):因?yàn)轫?yè)面只有一個(gè)表單,所以默認(rèn)即為“form1”。
Username field(用戶名字段):username。對(duì)應(yīng)用戶名的文本框username。
Password field(密碼字段):password。對(duì)應(yīng)密碼的文本框password。
Validate using connection(使用連接驗(yàn)證):使用我們已經(jīng)建立的“smail”。
Table(表格):用戶信息表。
Username column(用戶名列):用戶名。
Password column(密碼列):密碼。
If login succeeds, go to(如果登錄成功,轉(zhuǎn)到):index.asp。
Go to precious URL (if it exists)(轉(zhuǎn)到前一個(gè)URL(如果它存在)):選中。這是一個(gè)比較實(shí)用的選項(xiàng),比如你在頁(yè)面A使用了“Restrict Access To Page”限制對(duì)頁(yè)訪問(wèn)的服務(wù)器行為后,該頁(yè)面需要用戶登錄后才可訪問(wèn),而用戶沒(méi)有經(jīng)過(guò)登錄直接鏈接到頁(yè)面A,那么就會(huì)被轉(zhuǎn)到default.asp頁(yè)要求登錄。選中該選項(xiàng),在登錄完成后則不前往index.asp頁(yè),而是直接轉(zhuǎn)向頁(yè)面A。
If login fails, go to(如果登錄失敗,轉(zhuǎn)到):Error.asp。
Restrict access based on(基于以下項(xiàng)限制訪問(wèn)):Username and password。這里可以設(shè)置你的登錄是否還需要用戶等級(jí)概念,如果需要?jiǎng)t選擇“Username, password, and access level”(用戶名、密碼和訪問(wèn)級(jí)別)選項(xiàng),并且在“Get level from”(獲取級(jí)別自)選項(xiàng)中選擇從哪個(gè)字段來(lái)獲得等級(jí)標(biāo)準(zhǔn)。設(shè)置完畢后即完成登錄驗(yàn)證。
這里簡(jiǎn)要的說(shuō)明一下登錄驗(yàn)證的原理,我們分析源碼后可以得知該頁(yè)是根據(jù)用戶名、密碼與數(shù)據(jù)庫(kù)中“用戶信息表”的匹配來(lái)決定登錄的用戶是否為合法用戶,從而產(chǎn)生一個(gè)名為“MM_Username”的Session變量,只要合法用戶登錄后并且在變量的生命周期內(nèi),這個(gè)變量就代表登錄的用戶名,如果你選擇的是區(qū)分等級(jí)的用戶登錄,則還會(huì)有一個(gè)區(qū)別等級(jí)的Session變量“MM_UserAuthorization”。
(3)為了避免用戶沒(méi)有在表單內(nèi)輸入必要的信息就單擊“登錄”按鈕,還需要對(duì)表單進(jìn)行一個(gè)簡(jiǎn)單的驗(yàn)證。選中“登錄”按鈕,單擊“Tag<input>”(<input>標(biāo)簽)工作面板(或按Shift+F3組合鍵),單擊“Behaviors”(行為)選項(xiàng)卡,單擊“+”按鈕,選擇“Validate Form”(檢查表單行為)命令,在出現(xiàn)的對(duì)話框中,將兩個(gè)文本框欄中的“Value”(值)選項(xiàng)設(shè)置為“Required”(必需的)選項(xiàng),以進(jìn)行必填驗(yàn)證。
(4)最后在登錄頁(yè)建立一個(gè)到Login.asp注冊(cè)頁(yè)的鏈接,完成該頁(yè)。
(1)新建Login.asp頁(yè)面,單擊“Application”(應(yīng)用程序)工作面板,單擊“Server Behaviors”(服務(wù)器行為)選項(xiàng)卡,單擊“+”按鈕,選擇“Insert Record”(插入記錄)選項(xiàng),在出現(xiàn)的菜單中選擇“Record Insertion Form Wizard”(插入記錄表單向?qū)?命令。在出現(xiàn)的對(duì)話框中進(jìn)行設(shè)置:
Connection(連接):smail。
Insert into table(插入到表格):用戶信息表。
After inserting, go to(插入后,轉(zhuǎn)向):default.asp。
在選擇需插入的數(shù)據(jù)表后,Dreamweaver會(huì)將該數(shù)據(jù)表中的所有字段都顯示在“Form fields”(表單字段)列表內(nèi)供選擇設(shè)置。我們?cè)谶@里需要選中“UID”項(xiàng),然后單擊“-”按鈕將其刪除(因?yàn)樵撟侄问亲詣?dòng)編號(hào)類型的,不可插入)。選中用戶名時(shí),在對(duì)話框下方的項(xiàng)目中將出現(xiàn)默認(rèn)的值,你可以對(duì)其進(jìn)行修改:
Label(文本):對(duì)應(yīng)選中字段在頁(yè)面中顯示的文本。
Display as(顯示為):對(duì)應(yīng)選中字段在頁(yè)面中出現(xiàn)供插入數(shù)據(jù)的控件。
Submit as(提交為):對(duì)應(yīng)選中字段提交的數(shù)據(jù)類型。
Default value(默認(rèn)值):插入數(shù)據(jù)的控件上顯示的默認(rèn)值。在這里我們按下表設(shè)定:
字段名 | Label | Display as | Submit as | Default value |
用戶名 | 用戶名 | Text field | Text | - |
密碼 | 密碼 | Password field | Text | - |
完成后確定返回,頁(yè)面上會(huì)自動(dòng)插入表單和輸入數(shù)據(jù)用的控件。
(2)對(duì)生成的表單進(jìn)行簡(jiǎn)單修改后,我們需要作避免相同用戶名注冊(cè)的操作。單擊“Application”(應(yīng)用程序)選項(xiàng)卡,單擊“User Authentication”(用戶身份驗(yàn)證)按鈕,在出現(xiàn)的菜單中選擇“Check New Username”(檢查新用戶名)命令,在出現(xiàn)的對(duì)話框中進(jìn)行設(shè)置:
Username field(驗(yàn)證用戶名):因?yàn)檩斎胄彰奈谋究蚩丶怯煞?wù)器行為自動(dòng)生成的,所以選擇對(duì)應(yīng)用戶名的文本框控件名“Element”。
If already exists, go to(如果輸入的用戶名已經(jīng)存在,轉(zhuǎn)向):LoginError.asp。
完成設(shè)定后返回,最后需要對(duì)表單輸入做必填驗(yàn)證,該操作與Default.asp頁(yè)面的表單驗(yàn)證一樣,這里不作過(guò)多說(shuō)明。
該頁(yè)是在注冊(cè)新用戶時(shí),遇到重名后轉(zhuǎn)向的提示頁(yè),所以只需要在頁(yè)面上輸入提示信息,并給出返回注冊(cè)頁(yè)的鏈接即可。
新建LoginError.asp頁(yè)面,單擊“Application”(應(yīng)用程序)工作面板,單擊“Binding”(綁定)選項(xiàng)卡,單擊“+”按鈕選中“Request Variable”(請(qǐng)求變量)選項(xiàng),在出現(xiàn)的對(duì)話框中進(jìn)行設(shè)置:
Type(類型):Request.QueryString,即URL變量。
Name(名稱):RequserName。該變量名由Login.asp頁(yè)面中“Check New Username”服務(wù)器行為創(chuàng)建,當(dāng)注冊(cè)的用戶名重復(fù)時(shí),該行為將輸入值命名為“RequserName”,通過(guò)URL傳遞到LoginError.asp頁(yè),這里只是做了一個(gè)承接的作用。
完成后將該變量拖入到頁(yè)面相應(yīng)位置即可。如圖2所示。
該錯(cuò)誤提示頁(yè)面主要是登錄錯(cuò)誤而轉(zhuǎn)向的頁(yè)面,在頁(yè)面上說(shuō)明并加上重新轉(zhuǎn)到Default.asp頁(yè)登錄的鏈接即可。
在制作Login.asp頁(yè)面時(shí)已經(jīng)講到,用戶登錄系統(tǒng)后會(huì)自動(dòng)創(chuàng)建Session變量“MM_Username”,那么只要在該變量?jī)?nèi)檢查到它的存在就可以認(rèn)為用戶已經(jīng)成功登錄了?,F(xiàn)在我們創(chuàng)建一段檢查該變量的代碼,然后將代碼置入需要登錄才可訪問(wèn)的頁(yè)面中就可以限制未登錄用戶的訪問(wèn)了。
(1)新建Restrict.asp頁(yè)面,單擊“Application”(應(yīng)用程序)工作面板,單擊“Server Behaviors”(服務(wù)器行為)選項(xiàng)卡,單擊“+”按鈕,選擇“User Authentication”(用戶身份驗(yàn)證)選項(xiàng),在出現(xiàn)的菜單中選擇“Restrict Access To Page”(限制對(duì)頁(yè)的訪問(wèn))命令,在出現(xiàn)的對(duì)話框中進(jìn)行設(shè)置:
Restrict based on(驗(yàn)證包括的項(xiàng)目):Username and password,僅驗(yàn)證用戶名和密碼。
If access denied, go to(如果拒絕訪問(wèn),則轉(zhuǎn)向):Default.asp。
(2)完成設(shè)定后我們轉(zhuǎn)到源代碼窗口,因?yàn)榇隧?yè)面將被包含到其他頁(yè)面,所以這里只需要“Restrict Access To Page”生成的ASP代碼即可,而其他的都可以刪除。
首先刪除<%@LANGUAGE=″VBSCRIPT″ CODEPAGE=″936″%>一句。然后刪除ASP代碼以后的全部HTML代碼,完成后即可存盤。
其實(shí),你也可以在每個(gè)頁(yè)面都使用這個(gè)“Restrict Access To Page”來(lái)為登錄用戶限定訪問(wèn),不過(guò)為了代碼的簡(jiǎn)潔、易懂,可以將常用代碼存為一頁(yè),然后使用包含頁(yè)的方法來(lái)置入到所有登錄后才能訪問(wèn)的頁(yè)面中。你只需要在頁(yè)面源碼窗口頂部加入代碼即可。
該頁(yè)為收件箱頁(yè)面,任何發(fā)送給登錄用戶的消息都可在此瀏覽。收件箱根據(jù)用戶登錄后的“Session”變量在“短消息內(nèi)容表”的“收件人”字段中比對(duì),符合的就屬于該用戶的收件箱。
(1)新建S_Take.asp頁(yè)面,在頁(yè)面建立靜態(tài)元素,如圖3所示。
(2)單擊“Application”(應(yīng)用程序)工作面板,單擊“Binding”(綁定)選項(xiàng)卡,單擊“+”按鈕選中“Recordset(Query)”(記錄集)選項(xiàng),在出現(xiàn)的對(duì)話框中建立記錄集:
Name(名稱):SM1。
Connection(連接):smail。
Table(數(shù)據(jù)表):短消息內(nèi)容表。
Columns(字段):All。
Filter(過(guò)濾條件):收件人、=、Session Variable、MM_Username。
Sort(排序):SID、Descending。
完成前面的設(shè)定后,單擊“Advanced”(高級(jí))按鈕,在出現(xiàn)的對(duì)話框中的“SQL”區(qū)域中添加過(guò)濾代碼“AND 收件顯示 = True”,然后修改代碼為:
SELECT *
FROM 短消息內(nèi)容表。
WHERE 收件人 = ‘MMColParam‘ AND 收件顯示 = True
ORDER BY SID DESC
該代碼表示記錄集篩選的不只是收件人,并且“收件顯示”字段值必須為True,這樣做是為了在后面可以過(guò)濾已經(jīng)刪除的消息。單擊“確定”按鈕完成記錄集建立。
(3)在“Application”工作面板中單擊“Binding”(綁定)選項(xiàng)卡,單擊“+”按鈕,選擇“Session Variable”(創(chuàng)建變量)選項(xiàng),在出現(xiàn)的對(duì)話框中設(shè)置“Name”值為“MM_Username”,在站點(diǎn)中建立一個(gè)Session變量,該類型變量在你站點(diǎn)內(nèi)的任何以登錄頁(yè)面上都可以使用。使用時(shí)只需要選擇需要替換的文字后單擊“insert”按鈕即可。
選擇頁(yè)面上的“某某人”文字,然后選擇該變量后單擊“insert”按鈕,用戶登錄后的名字就可在此顯示出來(lái)。
(4)在“Application”工作面板中單擊“Binding”(綁定)選項(xiàng)卡,然后將記錄集“SM1”展開,拖動(dòng)動(dòng)態(tài)數(shù)據(jù)到相應(yīng)的頁(yè)面位置,對(duì)于復(fù)選框設(shè)定“Name”為“DELID”,將動(dòng)態(tài)數(shù)據(jù)“SID”綁定到“Checked Value”項(xiàng)目中。然后選擇動(dòng)態(tài)數(shù)據(jù)所在的行,應(yīng)用“Server Behavior”下的“Repeat Region”(重復(fù)區(qū)域)服務(wù)器行為,在出現(xiàn)的對(duì)話框中選擇“SM1”記錄集和默認(rèn)每頁(yè)顯示10條記錄,完成后如圖4所示。
(6)增加刪除信息的Command。前面說(shuō)過(guò),當(dāng)你不需要收件箱中的某條消息時(shí),應(yīng)該將其刪除(其實(shí)是不顯示而已)。在“Application”工作面板中單擊“Binding”(綁定)選項(xiàng)卡,單擊“+”按鈕,選中“Command(Store Procedure)”(存儲(chǔ)過(guò)程)選項(xiàng)。在出現(xiàn)的對(duì)話框中設(shè)置建立名稱為“Command1”的命令。其中“SQL”域和“Variables”變量域中的代碼表示由表單獲得“DELID”參數(shù)放入變量“MM_DEL”,然后根據(jù)該變量來(lái)修改“短消息內(nèi)容表”中的“收件顯示”字段值為False。確定后轉(zhuǎn)到“代碼”窗口,找到以下兩段代碼:
代碼段1:
?。?
if(Request.QueryString ("DelID") <> "") then Command1__MM_Del = Request.QueryString ("DelID")
%>
代碼段2:
?。?
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_smail_STRING
Command1.CommandText = "UPDATE 短消息內(nèi)容表 SET 發(fā)件顯示 = False WHERE SID in (" + Replace(Command1__MM_Del, "‘","‘‘") +")"
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
%>
上述兩段代碼是剛才Command操作產(chǎn)生的,我們需要修改一下后放在其他代碼的上方,讓其在打開該頁(yè)面時(shí)首先執(zhí)行該段代碼。
?。?
if(Request.QueryString ("DelID") <>"") then
Command1__MM_Del = Request.QueryString ("DelID")
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_smail_STRING
Command1.CommandText = "UPDATE 短消息內(nèi)容表 SET 發(fā)件顯示 = False WHERE SID in (" + Replace(Command1__MM_Del, "‘","‘‘") + ") "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
Response.Redirect "S_Take.asp"
End If
%>
修改后的代碼表示,如果表單參數(shù)“DELID”不為空,那么就根據(jù)“SID”字段決定哪些記錄需要修改“收件顯示”字段為False,完成后重新加載該頁(yè),否則就跳過(guò)該段修改代碼。
提交表單還需要設(shè)置“Action”(動(dòng)作)為提交到本頁(yè)“S_Take.asp”;數(shù)據(jù)傳遞“Method”模式為“GET”,表示從URL傳遞參數(shù)。
(7)增加閱讀消息時(shí)間的Command。當(dāng)有消息到達(dá)時(shí),你必須要將當(dāng)前時(shí)間寫入到“收件時(shí)間”字段中。我們可以在頁(yè)面上再加一個(gè)Command,將屬于登錄用戶并且“收件時(shí)間”為空的記錄都寫入當(dāng)前時(shí)間。你可以按照上述方法在對(duì)話框中設(shè)置Command,“SQL”區(qū)域代碼如下:
UPDATE 短消息內(nèi)容表
SET 收件時(shí)間 = Now()
WHERE 收件人 = ‘MM_name‘ and 收件時(shí)間 is null
變量“MM_name”由Session變量“MM_Username”獲得,它與建立“SM1”記錄集是一樣的,然后在源碼窗口中整合代碼,將其移動(dòng)到記錄集的結(jié)束代碼段:
?。?
SM1.Close()
Set SM1 = Nothing
%>
整合后代碼如下:
<%
UpCmd__MM_name = Session("MM_Username")
set UpCmd = Server.CreateObject("ADODB.Command")
UpCmd.ActiveConnection = MM_smail_STRING
UpCmd.CommandText = "UPDATE 短消息內(nèi)容表 SET 收件時(shí)間 = Now() WHERE 收件人 = ‘" + Replace(UpCmd__MM_name, "‘", "‘‘") + "‘ and 收件時(shí)間 is null "
UpCmd.CommandType = 1
UpCmd.CommandTimeout = 0
UpCmd.Prepared = true
UpCmd.Execute()
%>
該代碼表示將當(dāng)前登錄用戶的Session變量存入“UpCmd_MM_name”變量,根據(jù)當(dāng)前用戶和收件時(shí)間為空的記錄來(lái)修改“收件時(shí)間”等于當(dāng)前時(shí)間。
經(jīng)過(guò)以上步驟,完成收件箱頁(yè)面的制作。
發(fā)件箱保留所有的發(fā)送信息,實(shí)現(xiàn)原理和收件箱基本相同,下面簡(jiǎn)單介紹其實(shí)現(xiàn)方法。
(1)建立靜態(tài)頁(yè)面。其結(jié)構(gòu)與S_Take.asp頁(yè)面類似,這里的“閱讀”是指顯示當(dāng)收件人閱讀這條消息的時(shí)間。如圖5所示。
提交表單與上述設(shè)置相同,,設(shè)置“Action”為提交到本頁(yè)“S_Send.asp”,“Method”為“GET”。完成后如圖7所示。
?。?
If(Request.QueryString("DELID") <> "") Then
Command1__MM_DEL = Request.QueryString("DELID")
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_Smail_STRING
Command1.CommandText = "UPDATE 短消息內(nèi)容表 SET 發(fā)件顯示 = False WHERE SID in (" + Replace(Command1__MM_DEL, "‘","‘‘") + ") "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
Response.Redirect "S_Send.asp"
End If
%>
同樣,將這段代碼放在頁(yè)面頂端,完成該頁(yè)。
該頁(yè)面為發(fā)送消息的頁(yè)面,需要在數(shù)據(jù)庫(kù)中插入收件人、消息內(nèi)容和發(fā)件人信息。
單擊“Application”(應(yīng)用程序)工作面板,單擊“+”按鈕,選擇“Insert Record”(插入記錄)選項(xiàng),在出現(xiàn)的菜單中選擇“Record Insertion Form Wizard”(插入記錄表單向?qū)?命令。在出現(xiàn)的對(duì)話框中進(jìn)行設(shè)置。
Connection(連接):smail。
Insert into table(插入到表格):短消息內(nèi)容表。
After inserting, go to(插入后,轉(zhuǎn)向):S_Send.asp。
在“Form fields”(表單字段)列表我們只保留需要插入記錄的字段,其他字段選擇后單擊“-”按鈕刪除。另外對(duì)“消息內(nèi)容”字段的“Display as”屬性設(shè)定為“Text atea”,對(duì)“發(fā)件人”字段的“Default value”屬性設(shè)為“<%=Session(″MM_Username″)%>”,表示從Session變量直接獲取,其他的一些設(shè)置如前述操作。
完成插后在頁(yè)面上加入一些鏈接信息即可。如圖8所示。
該頁(yè)面為用戶登錄正確的轉(zhuǎn)向頁(yè),短消息系統(tǒng)作為論壇或者社區(qū)中的一個(gè)模塊,在該頁(yè)面只需要存在鏈接,如果有新的消息到達(dá)即出現(xiàn)提醒信息即可。
首先,你需要建立記錄集判斷用戶是否有新的消息到來(lái)。該判斷很簡(jiǎn)單,在數(shù)據(jù)庫(kù)中過(guò)濾“收件人”屬于當(dāng)前用戶并且“收件時(shí)間”為空的記錄,如果存在這樣的記錄,那么顯示提示信息。記錄集建立如圖9所示。
在出現(xiàn)的對(duì)話框中選擇“Recordset”記錄集為“SM1”,完成后確定返回頁(yè)面。這樣,當(dāng)你登錄到該頁(yè),如果數(shù)據(jù)庫(kù)中存在收件人為用戶本人,并且“收件時(shí)間”還為空的信息,那么記錄集就會(huì)返回記錄,你的提示信息就會(huì)顯示在頁(yè)面上。
經(jīng)過(guò)上述操作,短消息系統(tǒng)已經(jīng)可以正常運(yùn)行了,不過(guò)對(duì)于論壇或者社區(qū)的管理員來(lái)說(shuō),有時(shí)需要把一條消息同時(shí)發(fā)送給幾個(gè)人甚至幾十個(gè)人,一條條操作是很麻煩的。下面,讓我們來(lái)建立用戶組,實(shí)現(xiàn)短消息群發(fā)的功能。
建立S_Group.asp頁(yè)面,在這個(gè)頁(yè)面中,我們需要有增加組、刪除組和給組內(nèi)用戶發(fā)消息的鏈接等功能。先建立框架,準(zhǔn)備好動(dòng)態(tài)數(shù)據(jù)存放的位置。如圖10所示。
接下來(lái)的操作與前面發(fā)送消息頁(yè)面一樣,使用“Application”中的“Record Insertion Form Wizard”插入記錄表單,在出現(xiàn)的對(duì)話框中設(shè)置:
Connection:smail。
Insert into table:好友組信息表。
After inserting, go to:S_Group.asp。
在“Form fields”中,我們刪除“ZID”字段,保留其余3個(gè)。“組名”和“組成員”使用默認(rèn)的屬性即可,對(duì)“組屬于”字段的“Display as”屬性設(shè)定為“Hidden field”(隱藏域),“Default value”屬性設(shè)為“<%=Session(″MM_Username″)%>”表示從該好友組屬于當(dāng)前登錄用戶。
完成后表單上注明在輸入“組成員”文本框中用戶名之間需要用半角逗號(hào)分隔,這主要是為了后面對(duì)每個(gè)用戶發(fā)送消息時(shí),讓程序知道如何區(qū)別用戶名。接下來(lái),我們需要實(shí)現(xiàn)刪除記錄的功能,選擇“刪除”文字綁定鏈接:
S_Group.asp?DELID=<%=(SMG.Fields.Item("ZID").Value)%>
上述代碼表示,鏈接到本頁(yè)并傳遞“DELID”參數(shù),而參數(shù)值由記錄集中的“ZID”獲得。
刪除數(shù)據(jù)的代碼還是由Command來(lái)實(shí)現(xiàn),操作方法與前面一樣,不過(guò)這次是刪除記錄的操作所以其中的“Type”應(yīng)該選擇“Delete”,完成后同樣需要進(jìn)行合并和移動(dòng)到頁(yè)面前端。下面給出Command中的SQL代碼以及合并后的程序代碼:
SQL代碼:
DELETE FROM 好友組信息表
WHERE ZID = MM_ID
合并修改后的代碼:
?。?
If (Request.QueryString("DELID") <> "") Then
DelCommand__MM_ID = Request.QueryString("DELID")
set DelCommand = Server.CreateObject("ADODB.Command")
DelCommand.ActiveConnection = MM_Smail_STRING
DelCommand.CommandText = "DELETE FROM組信息表 WHERE ZID = " + Replace(DelCommand__MM_ID, "‘", "‘‘") + ""
DelCommand.CommandType = 1
DelCommand.CommandTimeout = 0
DelCommand.Prepared = true
DelCommand.Execute()
Response.Redirect "S_Group.asp"
End If
%>
最后在組名上做好鏈接到發(fā)送消息頁(yè)面的鏈接:
S_Mail.asp?ALL=<%=(SMG.Fields.Item("組成員").Value)%>
這里表示通過(guò)組名鏈接到發(fā)送消息的頁(yè)面并且傳遞參數(shù)“ALL”,參數(shù)值由記錄集的“組成員”獲得,也就是傳遞一個(gè)由多個(gè)用戶名組成且以英文逗號(hào)分隔的字符串。完成頁(yè)面如圖12所示。
首先獲得S_Group.asp頁(yè)傳遞過(guò)來(lái)的組成員信息,單擊收件人的文本框,在“Properties”屬性面板→“Init val”初始值中填入:
?。?= Request.QueryString("ALL") %>
表示收件人文本框值可以由URL參數(shù)“ALL”來(lái)獲得。
選擇“Command”,如圖13設(shè)置建立名稱為“Command1”的插入記錄命令(Command):
?。?
if(Request.Form("Element") <> "") then Command1__MM_Send = Request.Form("Element")
if(Request.Form("Element3") <> "") then Command1__MM_Mail = Request.Form("Element3")
if(Request.Form("Element5") <> "") then Command1__MM_Take = Request.Form("Element5")
%>
?。?
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_smail_STRING
Command1.CommandText = "INSERT INTO 短消息內(nèi)容表 (發(fā)件人, 消息內(nèi)容, 收件人) VALUES (‘" + Replace(Command1__MM_Send, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Mail, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Take, "‘", "‘‘") + "‘ ) "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
%>
修改成以下代碼并放在頁(yè)面頂部就可以根據(jù)多用戶來(lái)發(fā)送消息了。
?。?
If (CStr(Request("MM_insert")) = "form1") Then
DIM Str_Take
Str_Take = (Request.Form("Element5"))
If (InStr((Str_Take),",") > (0)) Then
If (Right(Str_Take,1)) = "," Then Str_Take = StrReverse(Replace(StrReverse(Str_Take),",","",1,1))
if(Request.Form("Element") <> "") then Command1__MM_Send = Request.Form("Element")
if(Request.Form("Element3") <> "") then Command1__MM_Mail = Request.Form("Element3")
For EACH Command1__MM_Take IN (Split(Str_Take,","))
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_Smail_STRING
Command1.CommandText = "INSERT INTO 短消息內(nèi)容表 (發(fā)件人, 消息內(nèi)容, 收件人) VALUES (‘" + Replace(Command1__MM_Send, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Mail, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Take, "‘", "‘‘") + "‘) "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
NEXT
Response.Redirect "S_Send.asp"
End If
End If
%>
以上代碼看起來(lái)好像很復(fù)雜,其實(shí)分解一下就很容易理解了,下面對(duì)添加的語(yǔ)句逐條說(shuō)明:
<%
If (CStr(Request("MM_insert")) = "form1") Then
因?yàn)樘峤挥涗浀谋韱问怯蒁reamweaver自動(dòng)生成,表單中會(huì)存在一個(gè)名為“MM_insert”隱藏域,值包含提交的表單名,所以這里以變量“MM_insert”是否存在來(lái)判斷表單是否提交,如果變量值等于“form1”那么表示表單已經(jīng)被提交,繼續(xù)執(zhí)行下面的代碼:
DIM Str_Take
聲明變量Str_Take
Str_Take = (Request.Form("Element5"))
設(shè)置變量Str_Take從表單參數(shù)中獲得收件人的值
If (InStr((Str_Take),",") > (0)) Then
利用InStr函數(shù)獲得半角逗號(hào)字符在收件人變量中的位置,如果大于0表示存在該字符,也就是說(shuō)明該信息是多用戶收取的,那么繼續(xù)執(zhí)行下面的代碼:
注意:下面做的一步是判斷用戶名后是否存在多余的半角逗號(hào)字符,因?yàn)樾稳?#8220;用戶1,用戶2,”這樣的字符串在后面數(shù)組分隔中會(huì)認(rèn)為是三個(gè)用戶從而多出一條收件人為空的記錄,所以要作下面一個(gè)去除操作。
If (Right(Str_Take,1)) = "," Then Str_Take = StrReverse(Replace(StrReverse(Str_Take),",","",1,1))
如果收件人變量中右起第一個(gè)字符為半角逗號(hào)字符那么先用StrReverse函數(shù)將字符串的字符順序顛倒過(guò)來(lái),再利用Replace函數(shù)從第一個(gè)字符開始搜索半角逗號(hào),搜索到后替換成空值并且只替換一次,最后再將該字符串順序顛倒回來(lái)。上來(lái)描述得好像有些復(fù)雜,其實(shí)就是將形如“用戶1,用戶2,”這樣的字符串最后一個(gè)半角逗號(hào)去除。
if(Request.Form("Element") <> "") then Command1__MM_Send = Request.Form("Element")
if(Request.Form("Element3") <> "") then Command1__MM_Mail = Request.Form("Element3")
上面使用Command代碼獲得發(fā)件人和短消息內(nèi)容,還有一個(gè)獲得收件人信息的代碼已經(jīng)用變量Str_Take替代了。
For EACH Command1__MM_Take IN (Split(Str_Take,","))
利用Split函數(shù)以半角逗號(hào)將收件人變量分隔存入數(shù)組,使用數(shù)組循環(huán)語(yǔ)句進(jìn)行插入記錄代碼的循環(huán)。
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_Smail_STRING
Command1.CommandText = "INSERT INTO dbo.短消息表 (發(fā)件人, 消息內(nèi)容, 收件人) VALUES (‘" + Replace(Command1__MM_Send, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Mail, "‘", "‘‘") + "‘,‘" + Replace(Command1__MM_Take, "‘", "‘‘") + "‘) "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
以上Command插入代碼不變。
NEXT
數(shù)組中的循環(huán)結(jié)束后跳出循環(huán)。
Response.Redirect "S_Send.asp"
完成插入后前往發(fā)件箱頁(yè)面查看剛剛發(fā)送的短消息。
End If
End If
%>
以上操作完成后頁(yè)面會(huì)根據(jù)是收件人的信息來(lái)決定由哪段代碼來(lái)進(jìn)行插入操作,不過(guò)其結(jié)果是一樣的都是在數(shù)據(jù)庫(kù)中插入記錄。當(dāng)然你可以刪除以前的插入代碼而都使用現(xiàn)在的Command代碼來(lái)做到,這里就不講解了。圖14測(cè)試群發(fā)后轉(zhuǎn)到的發(fā)件箱頁(yè)面:
最后還有一個(gè)小問(wèn)題,由于群發(fā)是根據(jù)半角逗號(hào)來(lái)區(qū)分用戶名的,所以用戶名的注冊(cè)需要屏蔽這個(gè)字符,可以在注冊(cè)時(shí)用個(gè)簡(jiǎn)單的JS來(lái)避免。
先刪除“注冊(cè)”按鈕上已有的表單驗(yàn)證,然后在源碼窗口的<head></head>標(biāo)簽內(nèi)寫入以下JS語(yǔ)句:
<script language="javascript">
?。?--
function MM_CheckForm()
{
if (document.form1.Element.value.indexOf(‘,‘) != -1||document.form1.Element.value == ""||document.form1.Element2.value == "") { alert("用戶名和密碼不可為空\(chéng)n用戶名不可包含“,”字符");
return false ; }
}
//-->
?。?script>
代碼表示當(dāng)用戶名和密碼文本框輸入為空時(shí)或者用戶名文本框內(nèi)包含了“,”半角逗號(hào)標(biāo)記時(shí),表單不可提交,并彈出消息框進(jìn)行提示。
然后在提交表單的“注冊(cè)”按鈕上修改代碼成為如下:
?。糹nput name="Submit" type="submit" onClick="return MM_CheckForm(this.form);" value="注冊(cè)">
完成后你可以在頁(yè)面上測(cè)試一下這個(gè)JS可以是否成功提示錯(cuò)誤信息,另外提醒一下不要忘了將“Restrict.asp”限制訪問(wèn)的代碼加入到需要登錄頁(yè)面的每個(gè)頁(yè)面頂部。
現(xiàn)在的新消息提醒設(shè)定是在登錄Index.asp頁(yè)時(shí)顯示文字,你也可以改成圖片或者聲音提示,并且將代碼存成一個(gè)頁(yè)面在其它頁(yè)中調(diào)用,加上設(shè)定自動(dòng)刷新時(shí)間,如此就可以隨時(shí)都獲得短消息了。
系統(tǒng)的開發(fā)是具有多樣性的,你可以根據(jù)需要來(lái)實(shí)現(xiàn)不同的功能,前提就是明確需求、理清思路,然后再動(dòng)手。
最后要說(shuō)的是雖然Macromedia公司給我們提供了強(qiáng)大的視窗操作界面,不過(guò)對(duì)于開發(fā)完整、靈活的系統(tǒng)不熟悉代碼還是不行的,我們主張?jiān)贒reamweaver MX 2004的界面下構(gòu)建網(wǎng)頁(yè)框架和大致的程序代碼,對(duì)于細(xì)節(jié)上的還是多修改源碼和做好注釋,否則滿地的找插件也解決不了你的問(wèn)題。
聯(lián)系客服