ASP與Form一起工作
上次我們說ASP的目的是讓頁面與使用者互動,那麼,怎樣得到使用者的資訊呢?當然是用Form,不論是CGI,IDC,JAVA,還是其他的什麼技術,都是通過嵌在WWW頁面中的Form來讓瀏覽器的使用者輸入資訊,然後,Form的提交動作,把資料傳給了伺服器,伺服器再把資料傳給CGI或是其他的什麼程式.既然Form如此重要,那麼這次就讓我們來看一看在ASP中,怎樣子獲得使用者在Form中輸入的資料,同時,我們還將學到ASP是怎樣將結果返回到WWW頁面的.
首先,我們建立一個Form,他的HTML代碼如下:
<HTML>
<HEAD><TITLE>定單</TITLE></HEAD>
<BODY>
<H2>定單Form例子</H2>
<P>
請向我們提供以下資訊,然後單擊"提交":
<FORM METHOD="POST" ACTION="response.asp">
<P>
姓: <INPUT NAME="fname" SIZE="48">
<P>
名: <INPUT NAME="lname" SIZE="48">
<P>
稱呼: <INPUT NAME="title" TYPE=RADIO VALUE="先生">先生
<INPUT NAME="title" TYPE=RADIO VALUE="女士">女士
<P><INPUT TYPE=SUBMIT VALUE="提交"><INPUT TYPE=RESET VALUE="清除">
</FORM>
</BODY>
</HTML>
這個表單是一個簡單的定單例子,它接收客戶的姓名,稱呼,然後用POST方法將資料提交.我們知道,表單(Form)提交資料常有兩種方法,一種是GET,一種是POST,對於GET提交的資料,WWW伺服器將把資料放在環境變數QUERY_STRING中,對於POST方法,資料被送到WWW伺服器的STDOUT中,然後CGI從自己的STDIN中讀取.傳統的CGI方法必須自己處理這些資料.可是在ASP中,採用了物件導向的思想,所有從瀏覽器來的資料都被封裝進了對象Request中.Request有方法Form和Querystring,分別返回用POST方法和GET方法提交的資料.我們要得到表單提交的資料,只需用
Request.Form("表單網域名稱") 或
Request.Querystring("查詢參數名")
就可以了.
好了,接下來就讓我們建立.asp檔案Response.asp來處理上面的表單提交的資料吧,這裡,我們只是簡單的將使用者提交的資料返回給使用者.
<HTML>
<HEAD></HEAD>
<BODY>
<%
Title = Request.Form("title")
LastName = Request.Form("lname")
If Title = "先生" Then
%>
<%= LastName %>先生
<% ElseIf Title = "女士" Then %>
<%= LastName %>女士
<% Else %>
<%= Request.Form("fname") & " " & LastName %>
<% End If %>
</BODY>
</HTML>
恩,上面這段代碼有些難懂吧,不要怕,一會兒之後,你就會說,好簡單啊.那,我們來分析一下它吧.首先,他的開頭和結尾都和普通的HTML代碼沒有什麼兩樣,關鍵是中間.如果略去定界符<%和%>,然後將前面沒有東西的等號換成 Print ,它就變成了:
Title=Request.Form("title")
LastName=Request.Form("lname")
If Title="先生" Then
print LastName 先生
ElseIf Title="女士" Then
print LastName 女士
Else
print Request.Form("fname")&" "& LastName
End If
這是不是VB?很簡單吧?
有一點說明的是,.asp檔案中,不在定界符之內的字元,當成普通的HTML解釋.如上面的"先生","女士".ASP自己的輸出用一個等號加上對象名來實現(當然,ASP的代碼在定界符之內).如上面的<%=LastName%>.其實,在.asp檔案中,任何對象要作用到定界符之外就要用這種形式:<%=對象名%>.
至於IF..THEN判斷分支,就不用我解釋了吧:)
上面我們用<%=對象名%>來實現ASP向頁面的資料輸出,使得.asp檔案看起來比較接近HTML檔案,下面我們用另一種方法來實現:
<HTML>
<HEAD></HEAD>
<BODY>
<%
Title = Request.Form("title")
LastName = Request.Form("lname")
If Title = "先生" Then
Response.Write LastName & "先生"
ElseIf Title = "女士" Then
Response.Write LastName & "女士"
Else
Response.Write Request.Form("fname") & " " & LastName
End If %>
</BODY>
</HTML>
除了開頭和結尾,這看起來是不是更像一個VB程式?對了,我們用了另一個ASP內建對象Response的Write方法來輸出資料.
到底用哪一種方法,那要看你的喜歡了,不過,要是有許多格式控制指令,都當成串用Write來輸出,確實很麻煩的.我偏愛第一種方法:)
上面我們學了用ASP處理用POST方法提交的資料,那麼,對於用GET方法提交的資料,又怎樣處理呢?其實,處理都是一樣的,只不過取得表單資料的方法不同罷了,比如我們要取得"title"的值,就用:
Request.Querystring("title")
對於如下方法調用.asp檔案,也要用這種方法處理:
<a href="response.asp?title=先生&fname=張&lname=三">xxxxx</a>
(其實,表單的GET方法最後也被轉換成了這種形式.)
大家一定要注意,用什麼方法調用的.asp檔案,就應當用相應的方法接收查詢資料,不然,你老是被報告查詢參數為空白,我就遇到過許多次^_^