ASP中JavaScript處理複雜表單的產生與驗證第1/3頁

來源:互聯網
上載者:User

這裡所謂的複雜表單,是指表單中包含多種不同的輸入類型,比如下拉式清單方塊、單行文本、多行文本、數值等。在經常需要更換這類表單的場合,需要有一個表單的動態產生程式。本文介紹的正是這樣一個系統,它以資料庫儲存表單定義資料,利用ASP指令碼動態產生表單HTML代碼以及驗證表單輸入的指令碼。
  一、定義資料庫表結構
  在Web上經常可以看到“每周調查”之類的表單,這就是一種需要經常更新的表單。如果有一個動態產生表單及其驗證指令碼的程式,可以大大減少製作這些表單的工作量。
  在本文的動態表單產生與驗證樣本中,我們使用一個Access資料庫來儲存有關表單的定義資訊,同時為簡單計,使用者在表單中輸入的資料也儲存到同一資料庫。定義表單需要兩個表:第一個表(Definitons)用於表單輸入欄位的定義,第二個表(Lists)儲存各個輸入欄位的附加資訊,比如挑選清單的選擇項。
  表Definitons包含如下欄位:
FieldName —— 賦予表單輸入欄位的變數名字
Label —— 即文字標籤,顯示在輸入欄位前面的提示性文字
Type —— 單個字元,該字元表示表單輸入欄位的形式和輸入值的類型
  具體如下:
  (t) 文本輸入框,即< INPUT TYPE="TEXT" >。
  (n) 文本輸入框,但要求輸入數字值。
  (m) 備忘型內容,用於注釋或其他大量文本的輸入,它是一個多行文本編輯框。
  (b) 要求輸入“是”或“否”。本實現中將用複選框來擷取這種輸入,複選框的文字標籤為“是”。如果使用者選中它,則傳回值是“on”。
  (r) 選項按鈕。
  (l) 下拉式清單方塊。
  Min —— 僅對數字型輸入值有效,在這裡給出最小值。在本例中有一個“Age”(年齡)數字型輸入框,它的最小值設定為1。
  Max —— 該欄位的值與輸入欄位形式有關。對於數字型輸入框,它表示的是允許的最大值。例如“Age”的Max值為100。對於文本輸入框,Max表示允許的最多字元個數。對於多行文本編輯框,Max表示可見地區的文本行數。
  Required —— 表示是否必須輸入。這種類型的值如果沒有輸入,則輸入驗證程式將報告錯誤。在表單中,必須輸入的值以星號標記,並以腳註的形式提示使用者該類值必須輸入。
  本文的樣本表單是一個ASP程式員調查表,在Definitons表中該表單的定義主要如下:
  FieldName Label Type Min Max Required
  Name 姓名 文本(t) - 50 否
  Age 年齡 數字(n) 1 100 否
  Sex 性別 選項按鈕(r) - - 是
  E-mail 郵件地址 文本(t) - - 是
  Language 程式設計語言 下拉式清單方塊(l) - - 否
  表Lists用於儲存輸入欄位定義的一些附加資訊,本例有“Sex”和“Languages”兩個輸入值要用到它。表Lists非常簡單,只包含如下三個欄位:
  FieldName —— 目前記錄屬於哪個表單輸入欄位
  Value —— 選擇項的值
  Label —— 使用者所看到的選擇項的提示文本
  輸入欄位“Sex”只能從兩個值選取:“男”或“女”。“Language”列出了幾種可應用於ASP環境的程式設計語言,包括:VBScript,JavaScript,C,Perl和“其他”。
  第三個表“Records”儲存使用者提交的內容,它也包含三個欄位,每個記錄對應使用者的一次提交:
  Record —— 備忘類型,以查詢字串形式儲存的使用者輸入。
  Created —— 使用者提交該表單的日期和時間。 RemoteIP —— 表單提交者的IP地址。
  在實際應用中可能要收集更多有關使用者的資訊,為簡單計,本例只記錄提交時間和使用者IP地址這兩個附加資訊。
  二、準備工作
  在完成上述資料結構和表單的定義之後,接下來就可以編寫指令碼。指令碼的任務是產生表單以及處理使用者提交的表單。
  無論是表單的產生還是處理,以下三個過程(任務)都是必不可少的:第一是確定驗證類型,在產生表單時驗證類型值通過查詢字串獲得,在處理表單時從表單隱藏欄位讀取。程式支援的表單驗證方式共有以下四種類型:不進行驗證,用戶端JavaScript驗證,伺服器端ASP指令碼驗證,用戶端和伺服器端都進行驗證(代號分別為0到3)。如果沒有在查詢字串中指定合法的驗證方式,則預設第四種驗證方式。這種驗證處理方式使得我們可以靈活地應用這個表單產生、處理系統,當用戶端禁止使用JavaScript驗證時就可以僅在伺服器端執行驗證過程。下面是確定驗證類型的代碼:
  檢查驗證類型
以下是引用片段:
  iValType = Request.QueryString("val")
  If IsNumeric(iValType) = False Then iValType = 3
  If iValType > 3 or iValType < 0 Then iValType =3
第二個任務是開啟資料庫連接,建立兩個記錄集對象:RS對象,這是本程式中的主要記錄集對象,用來操作Definitions表;RSList對象,主要用於從Lists表讀取資料。樣本程式提供兩種資料庫連接方法:使用ODBC DSN或不使用ODBC DSN(使用DSN時需要先建立名為Dynamic的DSN,使用DSN串連資料庫的代碼已經被注釋掉)。
  第三個任務是在產生(或處理)表單指令碼的前面(和後面)輸出一些靜態HTML代碼,比如< HEAD >< /HEAD >,以及在指令碼運行結束的時候釋放RS、RSList等對象佔用的資源。
  除了完成上述任務的代碼外,樣本應用中其餘ASP指令碼可能產生的頁面有兩種類型:提問表單(見)以及表單提交後出現的結果頁面(後者同時還負責使用者提交結果的記錄)。要確定究竟運行哪一部分指令碼,最簡單的方法就是檢查是否已經提交表單:如是,則處理表單;否則產生表單。
  是產生表單還是處理表單?

  If Len(Request.Form) = 0 Then
  '產生表單
  ...略...
  Else
  '處理表單
  ...略...
  End If

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.