ASP系列講座(十五)使用HTML 表格
作者:Eve Cole
更新時間:2009-05-30 19:58:48
使用ASP Request 對象,您可以建立一個簡單且強大的腳本來收集和處理HTML 表格資料。在本主題中,您將不僅學會如何建立基本的表格處理腳本,而且還將獲得用於驗證Web 伺服器和使用者瀏覽器上的表格資訊的一些有用技術。
關於HTML 表格
HTML 表格是收集Web 資訊最常用的方法,是在Web 頁上提供使用者介面控制項的特殊的HTML 標記的排列。文字方塊、按鈕和複選框都是典型的控件,這些控件使用戶和Web 頁面實現交互,並且將資訊提交給Web 伺服器。
下面的HTML 範例產生一個表格,在表格中,使用者可以輸入姓名、年齡並包含一個將這些資訊提交給Web 伺服器的按鈕。此表格也包含了一個隱含的控制項(Web 瀏覽器不顯示),可以用該控制項向Web 瀏覽器傳遞附加資訊。
<FORM METHOD="POST" ACTION="myfile.asp">
<INPUT TYPE="text" NAME="firstname">
<INPUT TYPE="text" NAME="lastname">
<INPUT TYPE="text" NAME="age">
<INPUT TYPE="hidden" NAME="userstatus" VALUE= "new">
<INPUT TYPE="submit" VALUE="Enter">
</FORM>
處理ASP 輸入的表格在表格向Web 伺服器提交資訊時,使用者的Web 瀏覽器請求以HTML <FORM > 標記的ACTION 屬性所指定的.asp 檔案(在前面的範例中,該檔案稱為Myfile.asp )。 .asp 檔案包含了處理表格值(如顯示結果表或從資料庫查詢資訊)的腳本。
可以透過三種途徑用.asp 檔案收集HTML 表格的值
靜態的.htm 檔案可以包含一個將其數值郵件送給.asp 檔案的表格。
.asp 檔案可以建立一個將其資訊郵件送給另一個.asp 檔案的表格。
.asp 檔案可以建立一個將其資訊郵件送給自己的表格,即包含該表格的檔案。
前兩個方法的操作方式相同,當表格與網關程式互動時,除ASP 之外,可以包含讀取和回應使用者選擇的命令。
建立一個包含表格定義且傳送訊息給自身的.asp 檔案較複雜,但卻是有很強功能的處理表格的方法。此過程在驗證表格輸入中演示。
取得表格輸入
ASP Request 物件提供了兩個集合,在很大程度上簡化了檢索附加在URL 請求上的表格資訊的任務。
QueryString 集合
QueryString 集合取得作為跟在請求的URL 的問號後面的文字傳遞給Web 伺服器的值。透過使用HTTP GET 方法或手動將表格的值加到URL,表格的值可以被附加在請求的URL 之後。
例如,如果先前的表格範例使用GET 方法(ACTION = "GET") 且使用者鍵入Jeff、Smith 和30,那麼下面的URL 請求將會傳送給伺服器:
http://scripts/Myfile.asp?firstname=Jeff&lastname=Smith&age=30&userstatus=new
Myfile.asp 包含下面的表格處理腳本:
Hello, <%= Request.QueryString("firstname") %> <%= Request.QueryString("lastname") %>.
You are <%= Request.QueryString("age") %> years old.
<%
If Request.QueryString("userstatus") = "new user" then
Response.Write"This is your first visit to this Web site!"
End if
%>
在這種情況下,Web 伺服器將傳回下面的文字給使用者的Web 瀏覽器:
Hello, Jeff Smith. You are 30 years old. This is your first visit to this Web site!
QueryString 集合有一個可選參數,可用來存取顯示在請求正文中的多個值中的一個。也可以使用Count 屬性計算一個特殊類型的值的出現次數。
例如,表格包含一個多項目的列錶框可以提交下面的請求:
http://list.asp?food=apples&food=olives&food=bread
您也可以使用下面的命令去對多個值計數:
Request.QueryString("food").Count
如果想要顯示多個值的類型,List.asp 應包含下面的腳本;
<%Total = Request.QueryString("food").Count%>
<%For i = 1 to Total%>
<%= Request.QueryString("food")(i) %> <BR>
<%Next%>
上述腳本將顯示:
apples
olives
bread
Form 集合當使用HTTP GET 方法去向Web 伺服器傳遞長而複雜的表格值時,將可能會遺失資訊。大多數的Web 伺服器傾向於嚴格控制URL 查詢字串的長度,以便用GET 方法傳送的冗長的表格值被截斷。如果您需要從表格傳送大量資訊到Web 伺服器,就必須使用HTTP POST 方法。此法用於在HTTP 請求正文中發送表格數據,而且發送的字元的數量可以無限多。也可以使用ASP Request 物件的Form 集合檢索以POST 方法傳送的值。
Form 集合與QueryString 集合儲存數值的方式相同。例如,如果使用者以一長串名稱填入表格,您就可以用下面的腳本檢索這些名稱:
<% For i = 1 to Request.Form.Count %>
<% =Request.Form("names")(i) %>
<% Next %>
驗證表格輸入好的表格處理腳本在處理資料前,應先驗證輸入表格的資訊是否有效。驗證腳本可以檢驗使用者輸入到表格的資訊類型是否正確。例如,如果您的Web 網站包含一個表格,該表格允許使用者計算財務訊息,那麼在處理結果之前,需要驗證使用者確實輸入了數值資訊而不是文字。
一個非常方便的驗證表格輸入的方法是建立一個向自身傳遞訊息的表格。在這種情況下,.asp 檔案包含可取得資訊的表格。例如,下面的腳本透過向自身傳遞訊息來驗證使用者是否在"age" 表格欄位中輸入了數值:
<% If Isnumeric(Request.QueryString("Age")) then %>
<p>Hello, your age is <%=Request.QueryString("age")%>
<%Else %>
<p>Please enter a numerical age.
<%End If %>
<FORM METHOD= "POST" ACTION="verify.asp" >
Name: <INPUT TYPE="text" NAME="Name" >
Age: <INPUT TYPE="text" NAME="Age" >
<INPUT TYPE="submit" VALUE="Enter">
</FORM>
在這個例子中,腳本也在包含表格的相同Verify.asp 檔案中。表格透過在ACTION 屬性中指定Verify.asp 向自身傳送訊息。
您也可以建立客戶端腳本來檢驗使用者是否輸入了有效的資訊。驗證使用者在Web 瀏覽器上的輸入除了更迅速地向使用者提示表格項目錯誤外,還可以減少Web 伺服器的網路流量。下面的腳本運行在使用者的Web 瀏覽器上,在將資訊提交到Web 伺服器之前,驗證使用者資訊。
<SCRIPT LANGUAGE="VBScript">
<!--
Sub btnEnter_OnClick
Dim TheForm
Set TheForm = Document.MyForm
If IsNumeric(TheForm.Age.Value) Then
TheForm.submit
Else
Msgbox "Please enter a numerical age."
End if
End Sub
//-->
</SCRIPT>
<FORM METHOD= "POST" NAME= MyForm ACTION="myfile.asp" >
Name: <INPUT TYPE="text" NAME="Name" >
Age: <INPUT TYPE="text" NAME="Age" >
<INPUT TYPE="button" NAME="btnEnter" VALUE="Enter">
</FORM>