執行個體學習Dreamweaver MX ASP編程基礎2

來源:互聯網
上載者:User
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集合:

  • cookies  用於設定cookie的值。

  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學個底朝天一樣可以編出不一般的程式來。

上一頁



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。