dreamweaver|編程
執行個體四、結合DW MX伺服器行為在伺服器端檢驗表單的合法性
雖然大家可以使用DW MX的“行為”的檢查表單產生JS代碼來檢查使用者提交的表單資料是否合法,但這是在用戶端執行的,我們的使用者千奇百樣,如果使用較低版本的瀏覽器可能會使用戶端檢驗失敗,把不合法的資訊插入到資料庫中。這是不允許的。下面我們利用上面學習的request對象和判斷語句添加到DW MX“伺服器行為”代碼中,實現伺服器端檢驗表單,以杜絕不合法的表單資訊。
建立一個ASP頁,用ACCESS建立一個資料表,設計兩個欄位:“uers”、“pws”,設這兩個欄位為必要欄位。用“自定字串”串連資料庫。在頁面中插入表單、三個文本域、一個按扭,表單方法為:“POST”,按扭類型為“提交表單”,三個文本網域名稱稱對應如下:
用 戶 名:uers
密 碼:pws
重複密碼:pws2
現在,要求這三項為必填項,並且“密碼”必須等於“重複密碼”,否則告訴操作者,輸入有誤,請返回!。操作步驟以下:
執行個體三(3)
1、插入“插入記錄”伺服器行為,按“F12”鍵預覽頁面,能正常插入記錄。
2、找到以下幾句代碼:
<% ' *** Insert Record: set variables If (CStr(Request("MM_insert")) = "form1") Then MM_editConnection = MM_new_STRING MM_editTable = "use" MM_editRedirectUrl = "" MM_fieldsStr = "uers|value|pws|value" MM_columnsStr = "Cuse|',none,''|pws|',none,''" ' create the MM_fields and MM_columns arrays MM_fields = Split(MM_fieldsStr, "|") MM_columns = Split(MM_columnsStr, "|") .......... 插入記錄代碼.... %> |
在上面這句“If (CStr(Request("MM_insert")) = "form1") Then”下面輸入以下代碼:
if request.Form("uers")="" then response.write"對不起!請輸入使用者名稱!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws")="" then response.write"對不起!請輸入密碼!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws2")="" then response.write"對不起!請輸入重複密碼!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws")<>request.form("pws2") then response.write"對不起!兩輸入的密碼不相符!請<a href='untitled-5.asp'>返回!</a>" response.end end if 形如: If (CStr(Request("MM_insert")) = "form1") Then '手寫代碼始 if request.Form("uers")="" then response.write"對不起!請輸入使用者名稱!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws")="" then response.write"對不起!請輸入密碼!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws2")="" then response.write"對不起!請輸入重複密碼!請<a href='untitled-5.asp'>返回!</a>" response.end elseif request.form("pws")<>request.form("pws2") then response.write"對不起!兩輸入的密碼不相符!請<a href='untitled-5.asp'>返回!</a>" response.end end if'手寫代碼結束 MM_editConnection = MM_new_STRING MM_editTable = "use" MM_editRedirectUrl = "" MM_fieldsStr = "uers|value|pws|value" MM_columnsStr = "Cuse|',none,''|pws|',none,''" |
本例中,除了request對象外,我們用到了response對象的write方法輸出提示資訊,和end方法來結束指令碼執行,阻止response.end以後的代碼繼續執行,這樣就輪不到資料插入那一段代碼了。
好了,關於判斷語句的介紹就到這兒了,你可要掌握這點內容,在設計論壇時,它大有用處。
二、response對象——向用戶端輸出資料
前面介紹的例子有用到了Response對象的write方法向用戶端輸出資料和和end方法結束指令碼執行。本節將詳細介紹它。
response對象與request對象工作原理相反,response對象是把由request對象從用戶端接收過來的資料進行加工處理後,再把“加工“好的“成品”輸出給用戶端瀏覽器。
response對象文法格式:
response[(集合)|屬性|方法]
先試試response對象的神奇魅力。
1、response.write方法的使用——向直接用戶端瀏覽器輸出資料
執行個體一、使用response對象向用戶端輸出資料資訊
建立ASP頁,在<body></body>標籤內輸入以下語句:
<%response.write("歡迎學習response對象執行個體!") %>
完整代碼:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>無標題文檔</title> </head> <body> <%response.write("歡迎學習response對象執行個體!") %> </body> </html> |
按“F12”鍵試試,是不是把文字顯示出來?
response.writ方法還可以輸出字串的結果或函數,如果是變數的話,就要先定義和賦值。response.write可輸出HTML標準格式代碼。
執行個體二、使用response.write輸出當前系統時間及HTML超連結
在建立檔案的<body>和</body>標籤間輸入下面代碼:
<p> <%response.write (now()) %> </p> <p> <% response.write("<a href='index.asp'>開啟首頁</a>")%> |
這裡的<a href='index.asp'>開啟首頁</a>是標準的HTML格式,不過'index.asp'用的是單引號,以避免與ASP指令碼衝突混淆。
按“F12”試試效果。
註:常用的時間函數:
now() 擷取當前系統日期和時間,ASP輸出可以這樣寫:<%=now()%>
Year(now()) 擷取年份, ASP輸出:<%=Year(now())%>
Month(now()) 擷取當前月份,ASP輸出:<%=Month(now())%>
day(now()) 擷取當天數,ASP輸出:<%=day(now())%>
Minute(now()) 擷取分鐘數,ASP輸出:<%=Minute(now())%>
Second(now()) 擷取秒鐘數,ASP輸出:<%=Second(now())%>
date() 擷取當前系統日期,格式為:2004-2-28
time() 擷取當前系統時間,格式為:22:24:59
用response.write方法輸出字串資訊時,“()”集合內必須在英文方式下的一對“""”雙引號。如果是函數和數字類資料就不用了,如:
文本字串輸出:<% response.write ("輸出文本資訊")%>
函數輸出:<% response.write (now())%>
數字輸出:<% response.write (1142568147)%>
還可用“&”來正確區分數字或函數和文本混合輸出:
<% yy="這裡輸出變數的值了"'賦值給變數“yy”,如果是文本加“""”
response.write ( now()&" 這兒輸出文本"&" "&yy ) %>
2、response.redirect方法——連結到新網址
如果希望使用者能在瀏覽器連結到另外一個網址的話,response.redirect方法可實現此功能。也許有些朋友會想到用js代碼也能實現這個功能呀!不過,我們是在伺服器端執行的,不受用戶端瀏覽器版本影響。
執行個體三、“友情連結”的頁面
建立一個ASP頁,插入表單、列表/菜單、按扭,表單方法為“GET”,“列表/菜單”名稱為“url”,“目標”為“_blank”,動作選擇它自己。如下圖:
列表/菜單的值和標籤如下:
在<html>標籤上方輸入以下代碼:
<% select case request.QueryString("url") case "1" response.Redirect("http://www.163.com") case "2" response.Redirect("http://www.sina.com") case "3" response.Redirect("http://www.sohu.com") case "4" response.Redirect("http://www.6to23.com") end select %> |
完整的代碼以下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% select case request.QueryString("url") case "1" response.Redirect("http://www.163.com") case "2" response.Redirect("http://www.sina.com") case "3" response.Redirect("http://www.sohu.com") case "4" response.Redirect("http://www.6to23.com") end select %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>無標題文檔</title> </head> <body> <form action="Untitled-6.asp" method="get" name="form1" target="_blank"> <select name="url" id="url"> <option value="1">網易</option> <option value="2">新浪</option> <option value="3">搜狐</option> <option value="4">中國學生網</option> </select> <input type="submit" name="Submit" value="提交"> </form> </body> </html> |
按“F12”鍵,選擇你想去的網站吧!
3、使response.write方法實現迴圈輸出
這裡要涉及到一個VBScript指令碼語言,很簡單的,卻很有用,以後我們要做記錄集分頁的時候,要用到它。
for...next迴圈語句結構:
for 變數=起始值 to 終值 step 步長值
迴圈體
next
下面做一個小例子:
執行個體五、迴圈輸出字元數
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>無標題文檔</title> </head> <body> <% for y=1 to 50%> <%response.Write("字") %> <%next%> </body> </html> |
按“F12”鍵預覽,執行結果如下:
可見,它把一個字重複50次後輸出,如果沒有設定步長值,將按預設值(為1)處理。設定步長值:
<% for y=1 to 50 step 2%>
<%response.write(y)%>
<%next%>
執行結果如下:
可見,輸出是以“2”為步進的。
還可以改:
<%response.Write("字") %>
為:
<%response.write(y)%>
看看執行結果以下:
它把從“1”開始迴圈以1為步進值輸出直至“50”終始。
我們就只先學這個迴圈語句。還有其它的do...loop、do while...loop、do until...loop、while...wend迴圈結構這裡就不講了,也許我們暫時會用不到手工接觸這些東西。
4、response對象屬性
response對象有下屬性:
- buffer 伺服器緩衝。
- charset 將字元集合名稱附加到response對象中的content-type標題的後面。
- contenttype 指定伺服器響應的HTTP內容類型。
- expires 指定在瀏覽器上緩衝儲存頁面到期時間。
- expiresabsolute 指定在瀏覽器上緩衝儲存頁面的確切到期時間。
response對象方法:
- write 向用戶端直接輸出資訊。
- redirect 轉向地址。
- end 停止程式執行。
- flush 用於立即發送伺服器緩衝區中的輸出,必須設定response.buffer=true,否則報錯。
- clear清除伺服器緩衝區中的所有HTML輸出。
response集合:
response.cookies集合文法格式:
response.cookies(變數名稱)[(key)|屬性]=等於寫入的資訊
“變數名稱”則是指定cookies的名稱,以便頁面可以讀取不同的cookies裡的資料。
三、session對象——伺服器特定使用者會話
“session”對象在DW MX的協助文檔中稱為“階段變數”,當我們在頁面插入“登陸使用者”和“限制對頁的訪問”伺服器行為後,它就是利用session對象來識別使用者是否登陸。當建立該會話後,伺服器對該頁面進行跟蹤,並分配記憶體儲存session會話資訊。session會話資訊只有建立它的使用者才能看到。
執行個體一、使用request.form方法將資訊儲存在session會話中
建立ASP頁,在<HTML>標籤上方輸入這句代碼:
<%session("MM")=request.Form("y")%>
在<body>和</body>間輸入以下代碼:
<form action="Untitled-6.asp" method="post" name="form1"> <select name="y" id="y"> <option value="網易">網易</option> <option value="新浪">新浪</option> <option value="搜狐">搜狐</option> <option value="中國學生網">中國學生網</option> </select> <input type="submit" name="Submit" value="提交"> </form> <p><%= Session("MM") %></p> |
其中,<%= Session("MM") %>為讀取session變數的值顯示在頁面上。
按“F12”鍵預覽執行結果。
如果用request.QueryString方法數資料存放區於session對象中的話,將<%session("MM")=request.Form("y")%>
改為:
<%session("MM")=request.QueryString("y")%>
即可。
1、session.adandon方法
session對象只有一個方法,即abandon方法,它的作用是刪除所有儲存在session對象的資料,並釋訪這些資源。如果未明確地調用adandon方法,當會話逾時(IIS伺服器預設逾時時間為900秒,這由空間伺服器商決定),伺服器將刪除這些會話,以釋放資源。
文法以下:
<%session.adandon%>
DW MX的“登出使用者”代碼剖析
<% ' *** Logout the current user. MM_logoutRedirectPage = "index.asp" Session.Contents.Remove("MM_Username") Session.Contents.Remove("MM_UserAuthorization") If (MM_logoutRedirectPage <> "") Then Response.Redirect(MM_logoutRedirectPage) %> |
這段代碼中就使用到的是Session.Contents.Remove屬性來指定要刪除的某個session變數,如果不指定“Contents.Remove”而使用“adandon”的話,它會把該頁面建立的所有會話刪除,但有時我們只需要刪除其中一個或幾個會話,而保留其它的工作階段狀態。
刪除多個會話:
Session.Contents.Remove("MM_Username")
Session.Contents.Remove("MM_UserAuthorization")
...
下面是DW MX的“限制對頁的訪問”伺服器行為產生的程式碼:
<% ' *** Restrict Access To Page: Grant or deny access to this page MM_authorizedUsers="" MM_authFailedURL="yesno.asp" MM_grantAccess=false If Session("MM_Username") <> "" Then If (true Or CStr(Session("MM_UserAuthorization"))="") Or _ (InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then MM_grantAccess = true End If End If If Not MM_grantAccess Then MM_qsChar = "?" If (InStr(1,MM_authFailedURL,"?") >= 1) Then MM_qsChar = "&" MM_referrer = Request.ServerVariables("URL") if (Len(Request.QueryString()) > 0) Then MM_referrer = MM_referrer & "?" & Request.QueryString() MM_authFailedURL = MM_authFailedURL & MM_qsChar & "accessdenied=" & Server.URLEncode(MM_referrer) Response.Redirect(MM_authFailedURL) End If %> |
其中這句“If Session("MM_Username") <> "" Then”就是用來判斷“MM_Username”會話變數是否有值,否則由“Response.Redirect(MM_authFailedURL)”轉向出錯頁。
其實我們可以寫個更簡單的:
<% if session("MM_Uesrname")="" then response.Redirect("出錯頁.asp") response.end end if %> |
該段代碼判斷“MM_Uesrname”session變數是否為空白,是的話,用response.Redirect("出錯頁.asp")方法將使用者帶到“出錯頁.asp”,並用response.end方法來停上所有指令碼處理,所以這段代碼最好放在頁面頭部。
也可以把
response.Redirect("index.asp")
改為:
response.write("對不起!請登陸!")
這樣直接在同一個頁面完成錯誤提示,不用那麼的頁轉來轉去,以便於網站檔案管理。
好了,如果能熟練地使用以上三個ASP內建的基本對象,就可以對DW MX的伺服器行為進行修改,達到我們的目的。還有其它的一些對象這裡就不講了,因為DW MX的伺服器行為能為我們產生這些代碼,不必你從頭到尾把ASP學個底朝天一樣可以編出不一般的程式來。
上一頁