(1)因為短消息系統必須存在于要求登錄會(huì )員系統中,所以需要一個(gè)簡(jiǎn)單的用戶(hù)注冊和登錄。
(2)每位用戶(hù)擁有屬于自己的收件箱和發(fā)件箱。
(3)發(fā)送的消息在對方登錄時(shí)應該獲得提醒前去查閱。
(4)批量刪除消息的功能(其實(shí)是不顯示而已)。
(5)群發(fā)消息功能(可以對幾個(gè)用戶(hù)發(fā)出同樣的消息)。
(6)用戶(hù)可以自定義好友組。
為了可以在本機對所開(kāi)發(fā)的Web程序進(jìn)行測試、預覽,我們需要在本地磁盤(pán)上對開(kāi)發(fā)目錄做“Web共享”操作。
(1)在Windows 2000/XP中,單擊“開(kāi)始→設置→控制面板”菜單項,在出現的對話(huà)框中雙擊“添加或刪除程序”圖標,在出現的對話(huà)框中單擊“添加/刪除Windows組件”按鈕,然后在出現的對話(huà)框中單擊“Internet信息服務(wù)”選項,單擊“下一步”按鈕,將Windows XP安裝光盤(pán)置入光驅?zhuān)撮_(kāi)始安裝和配置“Internet信息服務(wù)”組件。安裝完成,單擊“完成”按鈕即可。
注意:在Windows 98中,需要安裝PWS(Personal Web Server,個(gè)人Web服務(wù))。
(2)在本地磁盤(pán)上建立目錄“Smail”,如C:\smail,用于存放“短消息系統”所有的文件。
(3)右鍵單擊該目錄,在出現的菜單中選擇“屬性”命令,在出現的對話(huà)框中單擊“Web共享”選項卡,單擊“共享這個(gè)文件夾”選項,然后在出現的對話(huà)框中單擊“目錄瀏覽”選項即可。
完成后你可以通過(guò)http://localhost/Smail來(lái)訪(fǎng)問(wèn)存在于該目錄中的文件。
這里,我們使用Access 2003作為站點(diǎn)的后臺數據庫,在前面建立的“Smail”目錄中建立一個(gè)名字為“Smail”的數據庫,根據需要的功能,我們在庫中建立3個(gè)數據表。
(1)用戶(hù)信息表:需要用戶(hù)登錄自然要有存儲用戶(hù)信息的數據表,下面是一個(gè)簡(jiǎn)單的用戶(hù)信息表結構。
| 字段名 | 數據類(lèi)型 | 長(cháng)度 | 默認值 | 備注 |
| UID | 自動(dòng)編號 | 長(cháng)整型 | - | 設置為“主鍵” |
| 用戶(hù) | 文本 | 20 | - | |
| 密碼 | 文本 | 12 | - |
注意:在設計完“用戶(hù)信息表”后直接在表中加入了一些用戶(hù)名作為系統開(kāi)發(fā)過(guò)程中測試使用。
(2)短消息內容表:用于存放短消息的內容以及相關(guān)信息。
| 字段名 | 數據類(lèi)型 | 長(cháng)度 | 默認值 | 備注 |
| SID | 自動(dòng)編號 | 長(cháng)整型 | - | 設置為“主鍵” |
| 發(fā)件人 | 文本 | 20 | - | 對應用戶(hù)信息表中的用戶(hù)名 |
| 發(fā)件時(shí)間 | 日期/時(shí)間 | - | Now() | 當發(fā)件內容提交時(shí)讀取服務(wù)器系統時(shí)間 |
| 消息內容 | 備注 | - | - | 消息內容存放字段 |
| 發(fā)件顯示 | 是/否 | - | True | 值為“True”表示顯示,“False”表示不顯示 |
| 收件人 | 文本 | 20 | - | 對應用戶(hù)信息表中的用戶(hù)名 |
| 收件時(shí)間 | 日期/時(shí)間 | - | - | 收件人閱讀消息內容的時(shí)間 |
| 收件顯示 | 是/否 | - | True | 值為“True”表示顯示,“False”表示不顯示 |
(3)好友組信息表:由于希望實(shí)現方便的群發(fā)功能,因此創(chuàng )建該表用來(lái)記錄用戶(hù)常用的發(fā)件對象集合。
| 字段名 | 數據類(lèi)型 | 長(cháng)度 | 默認值 | 備注 |
| ZID | 自動(dòng)編號 | 長(cháng)整型 | - | 設置為“主鍵” |
| 組名 | 文本 | 20 | - | 用戶(hù)自定義的組名稱(chēng) |
| 組成員 | 文本 | 200 | - | 組中的成員名字,之間用“,”分隔 |
| 組屬于 | 文本 | 20 | - | 該組屬于的用戶(hù) |
(1)啟動(dòng)Dreamweaver MX 2004,在歡迎頁(yè)面上單擊“Dreamweaver Site…”(Dreamweaver站點(diǎn))選項,啟動(dòng)創(chuàng )建站點(diǎn)向導。
(2)在“Basic”(基本)模式下建立站點(diǎn),首先輸入站點(diǎn)名稱(chēng)“短消息系統”。單擊“Next”按鈕。
(3)在出現的對話(huà)框中,詢(xún)問(wèn)當前站點(diǎn)使用何種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)開(kāi)發(fā)。單擊“Yes,I want to......”選項,然后選擇“ASP VBScript”選項。單擊“Next”按鈕。
(4)在出現的對話(huà)框中,詢(xún)問(wèn)對測試文件存放、預覽等選項,一般我們均在本地測試系統,這里選擇前面建立的目錄即可,如C:\smail。單擊“Next”按鈕。
(5)在出現的對話(huà)框中,詢(xún)問(wèn)當前站點(diǎn)的測試路徑,我們按照先前定義的“Web共享”目錄名輸入“http://localhost/Smail/”后單擊“Test URL”(測試URL)按鈕,系統提示通過(guò)測試,單擊“確定”按鈕。單擊“Next”按鈕。
(6)在出現的對話(huà)框中,詢(xún)問(wèn)你完成后的頁(yè)面是否及時(shí)更新到其他機器中,該選項主要針對團隊開(kāi)發(fā)設立,讓你的同事可以隨時(shí)了解你開(kāi)發(fā)過(guò)程中的改動(dòng),單擊“No”選項。單擊“Next”按鈕。
(7)在出現的對話(huà)框中,顯示站點(diǎn)定義完畢的一些信息,直接單擊“Done”(完成)按鈕,完成“Smail”站點(diǎn)的建立。
在Dreamweaver中進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā),必須先要與數據庫鏈接。在歡迎窗口上選擇“ASP VBScript”選項創(chuàng )建一個(gè)新文件。單擊“Application”(應用程序)工作面板,單擊“Database”(數據庫)選項卡,然后單擊“+”按鈕,選擇“Custom Connection String”(自定義連接字符串)命令,在出現的對話(huà)框中進(jìn)行鏈接設置。其中:
“Connection name”(連接名稱(chēng)):Smail。
“Connection string”(連接字符串): Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Smail\smail.mdb。
注意:這里的數據源位置C:\Smail\smail.mdb,即是你前面存放數據庫的位置,需要根據你自己的具體情況修改。
“Dreamweaver should connect”(Dreamweaver應連接):Using driver on this machine(使用本地計算機上的驅動(dòng)程序)。
完成后單擊“Test”(測試)按鈕,如果鏈接成功則會(huì )出現“Connection was made successfully”提示對話(huà)框。
根據需要的功能,我們必須先設定好需要開(kāi)發(fā)的頁(yè)面及其相應的功能。
(1)用戶(hù)注冊、登錄以及必要的信息提示。包括:
Default.asp(用戶(hù)登錄頁(yè))、Login.asp(新用戶(hù)注冊頁(yè))、LoginError.asp(新用戶(hù)注冊重名提示頁(yè))、Error.asp(登錄錯誤后轉向的錯誤提示頁(yè))、Restrict.asp(限制未登錄用戶(hù)訪(fǎng)問(wèn)的代碼頁(yè))等。
(2)實(shí)現短消息收發(fā)的主體文件。包括:
Index.asp(登錄正確后轉向的首頁(yè))、S_Take.asp(用戶(hù)的收件箱頁(yè)面)、S_Send.asp(用戶(hù)的發(fā)件箱頁(yè)面)、S_Mail.asp(用戶(hù)發(fā)送短消息的頁(yè)面)、S_Group.asp(用戶(hù)自定義組的頁(yè)面)等。
(3)對必要的細節進(jìn)行修改。包括:
修改S_Mail.asp頁(yè)以適合群發(fā)消息、修改Login.asp頁(yè)屏蔽“,"字符等操作。
凡是涉及用戶(hù)概念的系統免不了都需要制作注冊和登錄等頁(yè)面。
(1)新建Default.asp頁(yè)面,在頁(yè)面內設計一個(gè)登錄表單,如圖1所示。在Properties(屬性)面板中設置文本框名分別為“username”和“password”,其中“password”文本框的“Type”類(lèi)型設置為“password”。

Get input from form(從表單獲取輸入):因為頁(yè)面只有一個(gè)表單,所以默認即為“form1”。
Username field(用戶(hù)名字段):username。對應用戶(hù)名的文本框username。
Password field(密碼字段):password。對應密碼的文本框password。
Validate using connection(使用連接驗證):使用我們已經(jīng)建立的“smail”。
Table(表格):用戶(hù)信息表。
Username column(用戶(hù)名列):用戶(hù)名。
Password column(密碼列):密碼。
If login succeeds, go to(如果登錄成功,轉到):index.asp。
Go to precious URL (if it exists)(轉到前一個(gè)URL(如果它存在)):選中。這是一個(gè)比較實(shí)用的選項,比如你在頁(yè)面A使用了“Restrict Access To Page”限制對頁(yè)訪(fǎng)問(wèn)的服務(wù)器行為后,該頁(yè)面需要用戶(hù)登錄后才可訪(fǎng)問(wèn),而用戶(hù)沒(méi)有經(jīng)過(guò)登錄直接鏈接到頁(yè)面A,那么就會(huì )被轉到default.asp頁(yè)要求登錄。選中該選項,在登錄完成后則不前往index.asp頁(yè),而是直接轉向頁(yè)面A。
If login fails, go to(如果登錄失敗,轉到):Error.asp。
Restrict access based on(基于以下項限制訪(fǎng)問(wèn)):Username and password。這里可以設置你的登錄是否還需要用戶(hù)等級概念,如果需要則選擇“Username, password, and access level”(用戶(hù)名、密碼和訪(fǎng)問(wèn)級別)選項,并且在“Get level from”(獲取級別自)選項中選擇從哪個(gè)字段來(lái)獲得等級標準。設置完畢后即完成登錄驗證。
這里簡(jiǎn)要的說(shuō)明一下登錄驗證的原理,我們分析源碼后可以得知該頁(yè)是根據用戶(hù)名、密碼與數據庫中“用戶(hù)信息表”的匹配來(lái)決定登錄的用戶(hù)是否為合法用戶(hù),從而產(chǎn)生一個(gè)名為“MM_Username”的Session變量,只要合法用戶(hù)登錄后并且在變量的生命周期內,這個(gè)變量就代表登錄的用戶(hù)名,如果你選擇的是區分等級的用戶(hù)登錄,則還會(huì )有一個(gè)區別等級的Session變量“MM_UserAuthorization”。
(3)為了避免用戶(hù)沒(méi)有在表單內輸入必要的信息就單擊“登錄”按鈕,還需要對表單進(jìn)行一個(gè)簡(jiǎn)單的驗證。選中“登錄”按鈕,單擊“Tag<input>”(<input>標簽)工作面板(或按Shift+F3組合鍵),單擊“Behaviors”(行為)選項卡,單擊“+”按鈕,選擇“Validate Form”(檢查表單行為)命令,在出現的對話(huà)框中,將兩個(gè)文本框欄中的“Value”(值)選項設置為“Required”(必需的)選項,以進(jìn)行必填驗證。
(4)最后在登錄頁(yè)建立一個(gè)到Login.asp注冊頁(yè)的鏈接,完成該頁(yè)。
(1)新建Login.asp頁(yè)面,單擊“Application”(應用程序)工作面板,單擊“Server Behaviors”(服務(wù)器行為)選項卡,單擊“+”按鈕,選擇“Insert Record”(插入記錄)選項,在出現的菜單中選擇“Record Insertion Form Wizard”(插入記錄表單向導)命令。在出現的對話(huà)框中進(jìn)行設置:
Connection(連接):smail。
Insert into table(插入到表格):用戶(hù)信息表。
After inserting, go to(插入后,轉向):default.asp。
在選擇需插入的數據表后,Dreamweaver會(huì )將該數據表中的所有字段都顯示在“Form fields”(表單字段)列表內供選擇設置。我們在這里需要選中“UID”項,然后單擊“-”按鈕將其刪除(因為該字段是自動(dòng)編號類(lèi)型的,不可插入)。選中用戶(hù)名時(shí),在對話(huà)框下方的項目中將出現默認的值,你可以對其進(jìn)行修改:
Label(文本):對應選中字段在頁(yè)面中顯示的文本。
Display as(顯示為):對應選中字段在頁(yè)面中出現供插入數據的控件。
Submit as(提交為):對應選中字段提交的數據類(lèi)型。
Default value(默認值):插入數據的控件上顯示的默認值。在這里我們按下表設定:
| 字段名 | Label | Display as | Submit as | Default value |
| 用戶(hù)名 | 用戶(hù)名 | Text field | Text | - |
| 密碼 | 密碼 | Password field | Text | - |
完成后確定返回,頁(yè)面上會(huì )自動(dòng)插入表單和輸入數據用的控件。
(2)對生成的表單進(jìn)行簡(jiǎn)單修改后,我們需要作避免相同用戶(hù)名注冊的操作。單擊“Application”(應用程序)選項卡,單擊“User Authentication”(用戶(hù)身份驗證)按鈕,在出現的菜單中選擇“Check New Username”(檢查新用戶(hù)名)命令,在出現的對話(huà)框中進(jìn)行設置:
Username field(驗證用戶(hù)名):因為輸入姓名的文本框控件是由服務(wù)器行為自動(dòng)生成的,所以選擇對應用戶(hù)名的文本框控件名“Element”。
If already exists, go to(如果輸入的用戶(hù)名已經(jīng)存在,轉向):LoginError.asp。
完成設定后返回,最后需要對表單輸入做必填驗證,該操作與Default.asp頁(yè)面的表單驗證一樣,這里不作過(guò)多說(shuō)明。
該頁(yè)是在注冊新用戶(hù)時(shí),遇到重名后轉向的提示頁(yè),所以只需要在頁(yè)面上輸入提示信息,并給出返回注冊頁(yè)的鏈接即可。
新建LoginError.asp頁(yè)面,單擊“Application”(應用程序)工作面板,單擊“Binding”(綁定)選項卡,單擊“+”按鈕選中“Request Variable”(請求變量)選項,在出現的對話(huà)框中進(jìn)行設置:
Type(類(lèi)型):Request.QueryString,即URL變量。
Name(名稱(chēng)):RequserName。該變量名由Login.asp頁(yè)面中“Check New Username”服務(wù)器行為創(chuàng )建,當注冊的用戶(hù)名重復時(shí),該行為將輸入值命名為“RequserName”,通過(guò)URL傳遞到LoginError.asp頁(yè),這里只是做了一個(gè)承接的作用。
完成后將該變量拖入到頁(yè)面相應位置即可。如圖2所示。

該錯誤提示頁(yè)面主要是登錄錯誤而轉向的頁(yè)面,在頁(yè)面上說(shuō)明并加上重新轉到Default.asp頁(yè)登錄的鏈接即可。
在制作Login.asp頁(yè)面時(shí)已經(jīng)講到,用戶(hù)登錄系統后會(huì )自動(dòng)創(chuàng )建Session變量“MM_Username”,那么只要在該變量?jì)葯z查到它的存在就可以認為用戶(hù)已經(jīng)成功登錄了?,F在我們創(chuàng )建一段檢查該變量的代碼,然后將代碼置入需要登錄才可訪(fǎng)問(wèn)的頁(yè)面中就可以限制未登錄用戶(hù)的訪(fǎng)問(wèn)了。
(1)新建Restrict.asp頁(yè)面,單擊“Application”(應用程序)工作面板,單擊“Server Behaviors”(服務(wù)器行為)選項卡,單擊“+”按鈕,選擇“User Authentication”(用戶(hù)身份驗證)選項,在出現的菜單中選擇“Restrict Access To Page”(限制對頁(yè)的訪(fǎng)問(wèn))命令,在出現的對話(huà)框中進(jìn)行設置:
Restrict based on(驗證包括的項目):Username and password,僅驗證用戶(hù)名和密碼。
If access denied, go to(如果拒絕訪(fǎng)問(wèn),則轉向):Default.asp。
(2)完成設定后我們轉到源代碼窗口,因為此頁(yè)面將被包含到其他頁(yè)面,所以這里只需要“Restrict Access To Page”生成的ASP代碼即可,而其他的都可以刪除。
首先刪除<%@LANGUAGE=″VBSCRIPT″ CODEPAGE=″936″%>一句。然后刪除ASP代碼以后的全部HTML代碼,完成后即可存盤(pán)。
其實(shí),你也可以在每個(gè)頁(yè)面都使用這個(gè)“Restrict Access To Page”來(lái)為登錄用戶(hù)限定訪(fǎng)問(wèn),不過(guò)為了代碼的簡(jiǎn)潔、易懂,可以將常用代碼存為一頁(yè),然后使用包含頁(yè)的方法來(lái)置入到所有登錄后才能訪(fǎng)問(wèn)的頁(yè)面中。你只需要在頁(yè)面源碼窗口頂部加入代碼即可。
該頁(yè)為收件箱頁(yè)面,任何發(fā)送給登錄用戶(hù)的消息都可在此瀏覽。收件箱根據用戶(hù)登錄后的“Session”變量在“短消息內容表”的“收件人”字段中比對,符合的就屬于該用戶(hù)的收件箱。
(1)新建S_Take.asp頁(yè)面,在頁(yè)面建立靜態(tài)元素,如圖3所示。

(2)單擊“Application”(應用程序)工作面板,單擊“Binding”(綁定)選項卡,單擊“+”按鈕選中“Recordset(Query)”(記錄集)選項,在出現的對話(huà)框中建立記錄集:
Name(名稱(chēng)):SM1。
Connection(連接):smail。
Table(數據表):短消息內容表。
Columns(字段):All。
Filter(過(guò)濾條件):收件人、=、Session Variable、MM_Username。
Sort(排序):SID、Descending。
完成前面的設定后,單擊“Advanced”(高級)按鈕,在出現的對話(huà)框中的“SQL”區域中添加過(guò)濾代碼“AND 收件顯示 = True”,然后修改代碼為:
SELECT *
FROM 短消息內容表。
WHERE 收件人 = ‘MMColParam‘ AND 收件顯示 = True
ORDER BY SID DESC
該代碼表示記錄集篩選的不只是收件人,并且“收件顯示”字段值必須為T(mén)rue,這樣做是為了在后面可以過(guò)濾已經(jīng)刪除的消息。單擊“確定”按鈕完成記錄集建立。
(3)在“Application”工作面板中單擊“Binding”(綁定)選項卡,單擊“+”按鈕,選擇“Session Variable”(創(chuàng )建變量)選項,在出現的對話(huà)框中設置“Name”值為“MM_Username”,在站點(diǎn)中建立一個(gè)Session變量,該類(lèi)型變量在你站點(diǎn)內的任何以登錄頁(yè)面上都可以使用。使用時(shí)只需要選擇需要替換的文字后單擊“insert”按鈕即可。
選擇頁(yè)面上的“某某人”文字,然后選擇該變量后單擊“insert”按鈕,用戶(hù)登錄后的名字就可在此顯示出來(lái)。
(4)在“Application”工作面板中單擊“Binding”(綁定)選項卡,然后將記錄集“SM1”展開(kāi),拖動(dòng)動(dòng)態(tài)數據到相應的頁(yè)面位置,對于復選框設定“Name”為“DELID”,將動(dòng)態(tài)數據“SID”綁定到“Checked Value”項目中。然后選擇動(dòng)態(tài)數據所在的行,應用“Server Behavior”下的“Repeat Region”(重復區域)服務(wù)器行為,在出現的對話(huà)框中選擇“SM1”記錄集和默認每頁(yè)顯示10條記錄,完成后如圖4所示。

(6)增加刪除信息的Command。前面說(shuō)過(guò),當你不需要收件箱中的某條消息時(shí),應該將其刪除(其實(shí)是不顯示而已)。在“Application”工作面板中單擊“Binding”(綁定)選項卡,單擊“+”按鈕,選中“Command(Store Procedure)”(存儲過(guò)程)選項。在出現的對話(huà)框中設置建立名稱(chēng)為“Command1”的命令。其中“SQL”域和“Variables”變量域中的代碼表示由表單獲得“DELID”參數放入變量“MM_DEL”,然后根據該變量來(lái)修改“短消息內容表”中的“收件顯示”字段值為False。確定后轉到“代碼”窗口,找到以下兩段代碼:
代碼段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 短消息內容表 SET 發(fā)件顯示 = False WHERE SID in (" + Replace(Command1__MM_Del, "‘","‘‘") +")"
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
%>
上述兩段代碼是剛才Command操作產(chǎn)生的,我們需要修改一下后放在其他代碼的上方,讓其在打開(kāi)該頁(yè)面時(shí)首先執行該段代碼。
?。?
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 短消息內容表 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
%>
修改后的代碼表示,如果表單參數“DELID”不為空,那么就根據“SID”字段決定哪些記錄需要修改“收件顯示”字段為False,完成后重新加載該頁(yè),否則就跳過(guò)該段修改代碼。
提交表單還需要設置“Action”(動(dòng)作)為提交到本頁(yè)“S_Take.asp”;數據傳遞“Method”模式為“GET”,表示從URL傳遞參數。
(7)增加閱讀消息時(shí)間的Command。當有消息到達時(shí),你必須要將當前時(shí)間寫(xiě)入到“收件時(shí)間”字段中。我們可以在頁(yè)面上再加一個(gè)Command,將屬于登錄用戶(hù)并且“收件時(shí)間”為空的記錄都寫(xiě)入當前時(shí)間。你可以按照上述方法在對話(huà)框中設置Command,“SQL”區域代碼如下:
UPDATE 短消息內容表
SET 收件時(shí)間 = Now()
WHERE 收件人 = ‘MM_name‘ and 收件時(shí)間 is null
變量“MM_name”由Session變量“MM_Username”獲得,它與建立“SM1”記錄集是一樣的,然后在源碼窗口中整合代碼,將其移動(dòng)到記錄集的結束代碼段:
?。?
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 短消息內容表 SET 收件時(shí)間 = Now() WHERE 收件人 = ‘" + Replace(UpCmd__MM_name, "‘", "‘‘") + "‘ and 收件時(shí)間 is null "
UpCmd.CommandType = 1
UpCmd.CommandTimeout = 0
UpCmd.Prepared = true
UpCmd.Execute()
%>
該代碼表示將當前登錄用戶(hù)的Session變量存入“UpCmd_MM_name”變量,根據當前用戶(hù)和收件時(shí)間為空的記錄來(lái)修改“收件時(shí)間”等于當前時(shí)間。
經(jīng)過(guò)以上步驟,完成收件箱頁(yè)面的制作。
發(fā)件箱保留所有的發(fā)送信息,實(shí)現原理和收件箱基本相同,下面簡(jiǎn)單介紹其實(shí)現方法。
(1)建立靜態(tài)頁(yè)面。其結構與S_Take.asp頁(yè)面類(lèi)似,這里的“閱讀”是指顯示當收件人閱讀這條消息的時(shí)間。如圖5所示。


提交表單與上述設置相同,,設置“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 短消息內容表 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è)面,需要在數據庫中插入收件人、消息內容和發(fā)件人信息。
單擊“Application”(應用程序)工作面板,單擊“+”按鈕,選擇“Insert Record”(插入記錄)選項,在出現的菜單中選擇“Record Insertion Form Wizard”(插入記錄表單向導)命令。在出現的對話(huà)框中進(jìn)行設置。
Connection(連接):smail。
Insert into table(插入到表格):短消息內容表。
After inserting, go to(插入后,轉向):S_Send.asp。
在“Form fields”(表單字段)列表我們只保留需要插入記錄的字段,其他字段選擇后單擊“-”按鈕刪除。另外對“消息內容”字段的“Display as”屬性設定為“Text atea”,對“發(fā)件人”字段的“Default value”屬性設為“<%=Session(″MM_Username″)%>”,表示從Session變量直接獲取,其他的一些設置如前述操作。
完成插后在頁(yè)面上加入一些鏈接信息即可。如圖8所示。

該頁(yè)面為用戶(hù)登錄正確的轉向頁(yè),短消息系統作為論壇或者社區中的一個(gè)模塊,在該頁(yè)面只需要存在鏈接,如果有新的消息到達即出現提醒信息即可。
首先,你需要建立記錄集判斷用戶(hù)是否有新的消息到來(lái)。該判斷很簡(jiǎn)單,在數據庫中過(guò)濾“收件人”屬于當前用戶(hù)并且“收件時(shí)間”為空的記錄,如果存在這樣的記錄,那么顯示提示信息。記錄集建立如圖9所示。

在出現的對話(huà)框中選擇“Recordset”記錄集為“SM1”,完成后確定返回頁(yè)面。這樣,當你登錄到該頁(yè),如果數據庫中存在收件人為用戶(hù)本人,并且“收件時(shí)間”還為空的信息,那么記錄集就會(huì )返回記錄,你的提示信息就會(huì )顯示在頁(yè)面上。
經(jīng)過(guò)上述操作,短消息系統已經(jīng)可以正常運行了,不過(guò)對于論壇或者社區的管理員來(lái)說(shuō),有時(shí)需要把一條消息同時(shí)發(fā)送給幾個(gè)人甚至幾十個(gè)人,一條條操作是很麻煩的。下面,讓我們來(lái)建立用戶(hù)組,實(shí)現短消息群發(fā)的功能。
建立S_Group.asp頁(yè)面,在這個(gè)頁(yè)面中,我們需要有增加組、刪除組和給組內用戶(hù)發(fā)消息的鏈接等功能。先建立框架,準備好動(dòng)態(tài)數據存放的位置。如圖10所示。


接下來(lái)的操作與前面發(fā)送消息頁(yè)面一樣,使用“Application”中的“Record Insertion Form Wizard”插入記錄表單,在出現的對話(huà)框中設置:
Connection:smail。
Insert into table:好友組信息表。
After inserting, go to:S_Group.asp。
在“Form fields”中,我們刪除“ZID”字段,保留其余3個(gè)。“組名”和“組成員”使用默認的屬性即可,對“組屬于”字段的“Display as”屬性設定為“Hidden field”(隱藏域),“Default value”屬性設為“<%=Session(″MM_Username″)%>”表示從該好友組屬于當前登錄用戶(hù)。
完成后表單上注明在輸入“組成員”文本框中用戶(hù)名之間需要用半角逗號分隔,這主要是為了后面對每個(gè)用戶(hù)發(fā)送消息時(shí),讓程序知道如何區別用戶(hù)名。接下來(lái),我們需要實(shí)現刪除記錄的功能,選擇“刪除”文字綁定鏈接:
S_Group.asp?DELID=<%=(SMG.Fields.Item("ZID").Value)%>
上述代碼表示,鏈接到本頁(yè)并傳遞“DELID”參數,而參數值由記錄集中的“ZID”獲得。
刪除數據的代碼還是由Command來(lái)實(shí)現,操作方法與前面一樣,不過(guò)這次是刪除記錄的操作所以其中的“Type”應該選擇“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è)面并且傳遞參數“ALL”,參數值由記錄集的“組成員”獲得,也就是傳遞一個(gè)由多個(gè)用戶(hù)名組成且以英文逗號分隔的字符串。完成頁(yè)面如圖12所示。

首先獲得S_Group.asp頁(yè)傳遞過(guò)來(lái)的組成員信息,單擊收件人的文本框,在“Properties”屬性面板→“Init val”初始值中填入:
?。?= Request.QueryString("ALL") %>
表示收件人文本框值可以由URL參數“ALL”來(lái)獲得。
選擇“Command”,如圖13設置建立名稱(chēng)為“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 短消息內容表 (發(fā)件人, 消息內容, 收件人) 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è)面頂部就可以根據多用戶(hù)來(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 短消息內容表 (發(fā)件人, 消息內容, 收件人) 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)好像很復雜,其實(shí)分解一下就很容易理解了,下面對添加的語(yǔ)句逐條說(shuō)明:
?。?
If (CStr(Request("MM_insert")) = "form1") Then
因為提交記錄的表單是由Dreamweaver自動(dòng)生成,表單中會(huì )存在一個(gè)名為“MM_insert”隱藏域,值包含提交的表單名,所以這里以變量“MM_insert”是否存在來(lái)判斷表單是否提交,如果變量值等于“form1”那么表示表單已經(jīng)被提交,繼續執行下面的代碼:
DIM Str_Take
聲明變量Str_Take
Str_Take = (Request.Form("Element5"))
設置變量Str_Take從表單參數中獲得收件人的值
If (InStr((Str_Take),",") > (0)) Then
利用InStr函數獲得半角逗號字符在收件人變量中的位置,如果大于0表示存在該字符,也就是說(shuō)明該信息是多用戶(hù)收取的,那么繼續執行下面的代碼:
注意:下面做的一步是判斷用戶(hù)名后是否存在多余的半角逗號字符,因為形如“用戶(hù)1,用戶(hù)2,”這樣的字符串在后面數組分隔中會(huì )認為是三個(gè)用戶(hù)從而多出一條收件人為空的記錄,所以要作下面一個(gè)去除操作。
If (Right(Str_Take,1)) = "," Then Str_Take = StrReverse(Replace(StrReverse(Str_Take),",","",1,1))
如果收件人變量中右起第一個(gè)字符為半角逗號字符那么先用StrReverse函數將字符串的字符順序顛倒過(guò)來(lái),再利用Replace函數從第一個(gè)字符開(kāi)始搜索半角逗號,搜索到后替換成空值并且只替換一次,最后再將該字符串順序顛倒回來(lái)。上來(lái)描述得好像有些復雜,其實(shí)就是將形如“用戶(hù)1,用戶(hù)2,”這樣的字符串最后一個(gè)半角逗號去除。
if(Request.Form("Element") <> "") then Command1__MM_Send = Request.Form("Element")
if(Request.Form("Element3") <> "") then Command1__MM_Mail = Request.Form("Element3")
上面使用Command代碼獲得發(fā)件人和短消息內容,還有一個(gè)獲得收件人信息的代碼已經(jīng)用變量Str_Take替代了。
For EACH Command1__MM_Take IN (Split(Str_Take,","))
利用Split函數以半角逗號將收件人變量分隔存入數組,使用數組循環(huán)語(yǔ)句進(jìn)行插入記錄代碼的循環(huán)。
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_Smail_STRING
Command1.CommandText = "INSERT INTO dbo.短消息表 (發(fā)件人, 消息內容, 收件人) 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
數組中的循環(huán)結束后跳出循環(huán)。
Response.Redirect "S_Send.asp"
完成插入后前往發(fā)件箱頁(yè)面查看剛剛發(fā)送的短消息。
End If
End If
%>
以上操作完成后頁(yè)面會(huì )根據是收件人的信息來(lái)決定由哪段代碼來(lái)進(jìn)行插入操作,不過(guò)其結果是一樣的都是在數據庫中插入記錄。當然你可以刪除以前的插入代碼而都使用現在的Command代碼來(lái)做到,這里就不講解了。圖14測試群發(fā)后轉到的發(fā)件箱頁(yè)面:

最后還有一個(gè)小問(wèn)題,由于群發(fā)是根據半角逗號來(lái)區分用戶(hù)名的,所以用戶(hù)名的注冊需要屏蔽這個(gè)字符,可以在注冊時(shí)用個(gè)簡(jiǎn)單的JS來(lái)避免。
先刪除“注冊”按鈕上已有的表單驗證,然后在源碼窗口的<head></head>標簽內寫(xiě)入以下JS語(yǔ)句:
?。約cript language="javascript">
?。?--
function MM_CheckForm()
{
if (document.form1.Element.value.indexOf(‘,‘) != -1||document.form1.Element.value == ""||document.form1.Element2.value == "") { alert("用戶(hù)名和密碼不可為空\n用戶(hù)名不可包含“,”字符");
return false ; }
}
//-->
?。?script>
代碼表示當用戶(hù)名和密碼文本框輸入為空時(shí)或者用戶(hù)名文本框內包含了“,”半角逗號標記時(shí),表單不可提交,并彈出消息框進(jìn)行提示。
然后在提交表單的“注冊”按鈕上修改代碼成為如下:
?。糹nput name="Submit" type="submit" onClick="return MM_CheckForm(this.form);" value="注冊">
完成后你可以在頁(yè)面上測試一下這個(gè)JS可以是否成功提示錯誤信息,另外提醒一下不要忘了將“Restrict.asp”限制訪(fǎng)問(wèn)的代碼加入到需要登錄頁(yè)面的每個(gè)頁(yè)面頂部。
現在的新消息提醒設定是在登錄Index.asp頁(yè)時(shí)顯示文字,你也可以改成圖片或者聲音提示,并且將代碼存成一個(gè)頁(yè)面在其它頁(yè)中調用,加上設定自動(dòng)刷新時(shí)間,如此就可以隨時(shí)都獲得短消息了。
系統的開(kāi)發(fā)是具有多樣性的,你可以根據需要來(lái)實(shí)現不同的功能,前提就是明確需求、理清思路,然后再動(dòng)手。
最后要說(shuō)的是雖然Macromedia公司給我們提供了強大的視窗操作界面,不過(guò)對于開(kāi)發(fā)完整、靈活的系統不熟悉代碼還是不行的,我們主張在Dreamweaver MX 2004的界面下構建網(wǎng)頁(yè)框架和大致的程序代碼,對于細節上的還是多修改源碼和做好注釋?zhuān)駝t滿(mǎn)地的找插件也解決不了你的問(wèn)題。
聯(lián)系客服