ASP中JavaScript處理復(fù)雜表單的生成與驗(yàn)證第1/3頁(yè)
更新時(shí)間:2007年03月25日 00:00:00 作者:
這里所謂的復(fù)雜表單,是指表單中包含多種不同的輸入類型,比如下拉列表框、單行文本、多行文本、數(shù)值等。在經(jīng)常需要更換這類表單的場(chǎng)合,需要有一個(gè)表單的動(dòng)態(tài)生成程序。本文介紹的正是這樣一個(gè)系統(tǒng),它以數(shù)據(jù)庫(kù)保存表單定義數(shù)據(jù),利用ASP腳本動(dòng)態(tài)生成表單HTML代碼以及驗(yàn)證表單輸入的腳本。
一、定義數(shù)據(jù)庫(kù)表結(jié)構(gòu)
在Web上經(jīng)??梢钥吹健懊恐苷{(diào)查”之類的表單,這就是一種需要經(jīng)常更新的表單。如果有一個(gè)動(dòng)態(tài)生成表單及其驗(yàn)證腳本的程序,可以大大減少制作這些表單的工作量。
在本文的動(dòng)態(tài)表單生成與驗(yàn)證示例中,我們使用一個(gè)Access數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)有關(guān)表單的定義信息,同時(shí)為簡(jiǎn)單計(jì),用戶在表單中輸入的數(shù)據(jù)也保存到同一數(shù)據(jù)庫(kù)。定義表單需要兩個(gè)表:第一個(gè)表(Definitons)用于表單輸入域的定義,第二個(gè)表(Lists)保存各個(gè)輸入域的附加信息,比如選擇列表的選擇項(xiàng)。
表Definitons包含如下字段:
FieldName —— 賦予表單輸入域的變量名字
Label —— 即文本標(biāo)簽,顯示在輸入域前面的提示性文字
Type —— 單個(gè)字符,該字符表示表單輸入域的形式和輸入值的類型
具體如下:
(t) 文本輸入框,即< INPUT TYPE="TEXT" >。
(n) 文本輸入框,但要求輸入數(shù)字值。
(m) 備注型內(nèi)容,用于注釋或其他大量文本的輸入,它是一個(gè)多行文本編輯框。
(b) 要求輸入“是”或“否”。本實(shí)現(xiàn)中將用復(fù)選框來(lái)獲取這種輸入,復(fù)選框的文本標(biāo)簽為“是”。如果用戶選中它,則返回值是“on”。
(r) 單選按鈕。
(l) 下拉列表框。
Min —— 僅對(duì)數(shù)字型輸入值有效,在這里給出最小值。在本例中有一個(gè)“Age”(年齡)數(shù)字型輸入框,它的最小值設(shè)定為1。
Max —— 該字段的值與輸入域形式有關(guān)。對(duì)于數(shù)字型輸入框,它表示的是允許的最大值。例如“Age”的Max值為100。對(duì)于文本輸入框,Max表示允許的最多字符個(gè)數(shù)。對(duì)于多行文本編輯框,Max表示可見(jiàn)區(qū)域的文本行數(shù)。
Required —— 表示是否必須輸入。這種類型的值如果沒(méi)有輸入,則輸入驗(yàn)證程序?qū)?bào)告錯(cuò)誤。在表單中,必須輸入的值以星號(hào)標(biāo)記,并以腳注的形式提示用戶該類值必須輸入。
本文的示例表單是一個(gè)ASP程序員調(diào)查表,在Definitons表中該表單的定義主要如下:
FieldName Label Type Min Max Required
Name 姓名 文本(t) - 50 否
Age 年齡 數(shù)字(n) 1 100 否
Sex 性別 單選按鈕(r) - - 是
E-mail 郵件地址 文本(t) - - 是
Language 編程語(yǔ)言 下拉列表框(l) - - 否
表Lists用于保存輸入域定義的一些附加信息,本例有“Sex”和“Languages”兩個(gè)輸入值要用到它。表Lists非常簡(jiǎn)單,只包含如下三個(gè)字段:
FieldName —— 當(dāng)前記錄屬于哪個(gè)表單輸入域
Value —— 選擇項(xiàng)的值
Label —— 用戶所看到的選擇項(xiàng)的提示文本
輸入域“Sex”只能從兩個(gè)值選?。骸澳小被颉芭??!癓anguage”列出了幾種可應(yīng)用于ASP環(huán)境的編程語(yǔ)言,包括:VBScript,JavaScript,C,Perl和“其他”。
第三個(gè)表“Records”保存用戶提交的內(nèi)容,它也包含三個(gè)字段,每個(gè)記錄對(duì)應(yīng)用戶的一次提交:
Record —— 備注類型,以查詢字符串形式保存的用戶輸入。
Created —— 用戶提交該表單的日期和時(shí)間。 RemoteIP —— 表單提交者的IP地址。
在實(shí)際應(yīng)用中可能要收集更多有關(guān)用戶的信息,為簡(jiǎn)單計(jì),本例只記錄提交時(shí)間和用戶IP地址這兩個(gè)附加信息。
二、準(zhǔn)備工作
在完成上述數(shù)據(jù)結(jié)構(gòu)和表單的定義之后,接下來(lái)就可以編寫腳本。腳本的任務(wù)是生成表單以及處理用戶提交的表單。
無(wú)論是表單的生成還是處理,以下三個(gè)過(guò)程(任務(wù))都是必不可少的:第一是確定驗(yàn)證類型,在生成表單時(shí)驗(yàn)證類型值通過(guò)查詢字符串獲得,在處理表單時(shí)從表單隱藏域讀取。程序支持的表單驗(yàn)證方式共有以下四種類型:不進(jìn)行驗(yàn)證,客戶端JavaScript驗(yàn)證,服務(wù)器端ASP腳本驗(yàn)證,客戶端和服務(wù)器端都進(jìn)行驗(yàn)證(代號(hào)分別為0到3)。如果沒(méi)有在查詢字符串中指定合法的驗(yàn)證方式,則默認(rèn)第四種驗(yàn)證方式。這種驗(yàn)證處理方式使得我們可以靈活地應(yīng)用這個(gè)表單生成、處理系統(tǒng),當(dāng)客戶端禁止使用JavaScript驗(yàn)證時(shí)就可以僅在服務(wù)器端執(zhí)行驗(yàn)證過(guò)程。下面是確定驗(yàn)證類型的代碼:
檢查驗(yàn)證類型
以下是引用片段:
iValType = Request.QueryString("val")
If IsNumeric(iValType) = False Then iValType = 3
If iValType > 3 or iValType < 0 Then iValType =3
第二個(gè)任務(wù)是打開(kāi)數(shù)據(jù)庫(kù)連接,創(chuàng)建兩個(gè)記錄集對(duì)象:RS對(duì)象,這是本程序中的主要記錄集對(duì)象,用來(lái)操作Definitions表;RSList對(duì)象,主要用于從Lists表讀取數(shù)據(jù)。示例程序提供兩種數(shù)據(jù)庫(kù)連接方法:使用ODBC DSN或不使用ODBC DSN(使用DSN時(shí)需要先創(chuàng)建名為Dynamic的DSN,使用DSN連接數(shù)據(jù)庫(kù)的代碼已經(jīng)被注釋掉)。
第三個(gè)任務(wù)是在生成(或處理)表單腳本的前面(和后面)輸出一些靜態(tài)的HTML代碼,比如< HEAD >< /HEAD >,以及在腳本運(yùn)行結(jié)束的時(shí)候釋放RS、RSList等對(duì)象占用的資源。
除了完成上述任務(wù)的代碼外,示例應(yīng)用中其余ASP腳本可能生成的頁(yè)面有兩種類型:提問(wèn)表單(見(jiàn)上圖)以及表單提交后出現(xiàn)的結(jié)果頁(yè)面(后者同時(shí)還負(fù)責(zé)用戶提交結(jié)果的記錄)。要確定究竟運(yùn)行哪一部分腳本,最簡(jiǎn)單的方法就是檢查是否已經(jīng)提交表單:如是,則處理表單;否則生成表單。
是生成表單還是處理表單?
If Len(Request.Form) = 0 Then
'生成表單
...略...
Else
'處理表單
...略...
End If
一、定義數(shù)據(jù)庫(kù)表結(jié)構(gòu)
在Web上經(jīng)??梢钥吹健懊恐苷{(diào)查”之類的表單,這就是一種需要經(jīng)常更新的表單。如果有一個(gè)動(dòng)態(tài)生成表單及其驗(yàn)證腳本的程序,可以大大減少制作這些表單的工作量。
在本文的動(dòng)態(tài)表單生成與驗(yàn)證示例中,我們使用一個(gè)Access數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)有關(guān)表單的定義信息,同時(shí)為簡(jiǎn)單計(jì),用戶在表單中輸入的數(shù)據(jù)也保存到同一數(shù)據(jù)庫(kù)。定義表單需要兩個(gè)表:第一個(gè)表(Definitons)用于表單輸入域的定義,第二個(gè)表(Lists)保存各個(gè)輸入域的附加信息,比如選擇列表的選擇項(xiàng)。
表Definitons包含如下字段:
FieldName —— 賦予表單輸入域的變量名字
Label —— 即文本標(biāo)簽,顯示在輸入域前面的提示性文字
Type —— 單個(gè)字符,該字符表示表單輸入域的形式和輸入值的類型
具體如下:
(t) 文本輸入框,即< INPUT TYPE="TEXT" >。
(n) 文本輸入框,但要求輸入數(shù)字值。
(m) 備注型內(nèi)容,用于注釋或其他大量文本的輸入,它是一個(gè)多行文本編輯框。
(b) 要求輸入“是”或“否”。本實(shí)現(xiàn)中將用復(fù)選框來(lái)獲取這種輸入,復(fù)選框的文本標(biāo)簽為“是”。如果用戶選中它,則返回值是“on”。
(r) 單選按鈕。
(l) 下拉列表框。
Min —— 僅對(duì)數(shù)字型輸入值有效,在這里給出最小值。在本例中有一個(gè)“Age”(年齡)數(shù)字型輸入框,它的最小值設(shè)定為1。
Max —— 該字段的值與輸入域形式有關(guān)。對(duì)于數(shù)字型輸入框,它表示的是允許的最大值。例如“Age”的Max值為100。對(duì)于文本輸入框,Max表示允許的最多字符個(gè)數(shù)。對(duì)于多行文本編輯框,Max表示可見(jiàn)區(qū)域的文本行數(shù)。
Required —— 表示是否必須輸入。這種類型的值如果沒(méi)有輸入,則輸入驗(yàn)證程序?qū)?bào)告錯(cuò)誤。在表單中,必須輸入的值以星號(hào)標(biāo)記,并以腳注的形式提示用戶該類值必須輸入。
本文的示例表單是一個(gè)ASP程序員調(diào)查表,在Definitons表中該表單的定義主要如下:
FieldName Label Type Min Max Required
Name 姓名 文本(t) - 50 否
Age 年齡 數(shù)字(n) 1 100 否
Sex 性別 單選按鈕(r) - - 是
E-mail 郵件地址 文本(t) - - 是
Language 編程語(yǔ)言 下拉列表框(l) - - 否
表Lists用于保存輸入域定義的一些附加信息,本例有“Sex”和“Languages”兩個(gè)輸入值要用到它。表Lists非常簡(jiǎn)單,只包含如下三個(gè)字段:
FieldName —— 當(dāng)前記錄屬于哪個(gè)表單輸入域
Value —— 選擇項(xiàng)的值
Label —— 用戶所看到的選擇項(xiàng)的提示文本
輸入域“Sex”只能從兩個(gè)值選?。骸澳小被颉芭??!癓anguage”列出了幾種可應(yīng)用于ASP環(huán)境的編程語(yǔ)言,包括:VBScript,JavaScript,C,Perl和“其他”。
第三個(gè)表“Records”保存用戶提交的內(nèi)容,它也包含三個(gè)字段,每個(gè)記錄對(duì)應(yīng)用戶的一次提交:
Record —— 備注類型,以查詢字符串形式保存的用戶輸入。
Created —— 用戶提交該表單的日期和時(shí)間。 RemoteIP —— 表單提交者的IP地址。
在實(shí)際應(yīng)用中可能要收集更多有關(guān)用戶的信息,為簡(jiǎn)單計(jì),本例只記錄提交時(shí)間和用戶IP地址這兩個(gè)附加信息。
二、準(zhǔn)備工作
在完成上述數(shù)據(jù)結(jié)構(gòu)和表單的定義之后,接下來(lái)就可以編寫腳本。腳本的任務(wù)是生成表單以及處理用戶提交的表單。
無(wú)論是表單的生成還是處理,以下三個(gè)過(guò)程(任務(wù))都是必不可少的:第一是確定驗(yàn)證類型,在生成表單時(shí)驗(yàn)證類型值通過(guò)查詢字符串獲得,在處理表單時(shí)從表單隱藏域讀取。程序支持的表單驗(yàn)證方式共有以下四種類型:不進(jìn)行驗(yàn)證,客戶端JavaScript驗(yàn)證,服務(wù)器端ASP腳本驗(yàn)證,客戶端和服務(wù)器端都進(jìn)行驗(yàn)證(代號(hào)分別為0到3)。如果沒(méi)有在查詢字符串中指定合法的驗(yàn)證方式,則默認(rèn)第四種驗(yàn)證方式。這種驗(yàn)證處理方式使得我們可以靈活地應(yīng)用這個(gè)表單生成、處理系統(tǒng),當(dāng)客戶端禁止使用JavaScript驗(yàn)證時(shí)就可以僅在服務(wù)器端執(zhí)行驗(yàn)證過(guò)程。下面是確定驗(yàn)證類型的代碼:
檢查驗(yàn)證類型
以下是引用片段:
iValType = Request.QueryString("val")
If IsNumeric(iValType) = False Then iValType = 3
If iValType > 3 or iValType < 0 Then iValType =3
第二個(gè)任務(wù)是打開(kāi)數(shù)據(jù)庫(kù)連接,創(chuàng)建兩個(gè)記錄集對(duì)象:RS對(duì)象,這是本程序中的主要記錄集對(duì)象,用來(lái)操作Definitions表;RSList對(duì)象,主要用于從Lists表讀取數(shù)據(jù)。示例程序提供兩種數(shù)據(jù)庫(kù)連接方法:使用ODBC DSN或不使用ODBC DSN(使用DSN時(shí)需要先創(chuàng)建名為Dynamic的DSN,使用DSN連接數(shù)據(jù)庫(kù)的代碼已經(jīng)被注釋掉)。
第三個(gè)任務(wù)是在生成(或處理)表單腳本的前面(和后面)輸出一些靜態(tài)的HTML代碼,比如< HEAD >< /HEAD >,以及在腳本運(yùn)行結(jié)束的時(shí)候釋放RS、RSList等對(duì)象占用的資源。
除了完成上述任務(wù)的代碼外,示例應(yīng)用中其余ASP腳本可能生成的頁(yè)面有兩種類型:提問(wèn)表單(見(jiàn)上圖)以及表單提交后出現(xiàn)的結(jié)果頁(yè)面(后者同時(shí)還負(fù)責(zé)用戶提交結(jié)果的記錄)。要確定究竟運(yùn)行哪一部分腳本,最簡(jiǎn)單的方法就是檢查是否已經(jīng)提交表單:如是,則處理表單;否則生成表單。
是生成表單還是處理表單?
If Len(Request.Form) = 0 Then
'生成表單
...略...
Else
'處理表單
...略...
End If
相關(guān)文章
ASP下實(shí)現(xiàn)自動(dòng)采集程序及入庫(kù)的代碼
ASP下實(shí)現(xiàn)自動(dòng)采集程序及入庫(kù)的代碼...2007-03-03asp執(zhí)行帶參數(shù)的sql語(yǔ)句實(shí)例
這篇文章主要介紹了asp執(zhí)行帶參數(shù)的sql語(yǔ)句實(shí)例,參數(shù)化SQL語(yǔ)句可以有效的防止SQL注入漏洞,需要的朋友可以參考下2014-08-08asp base64 utf-8為了兼容asp.net的base64
asp base64 utf-8為了兼容asp.net的base642009-07-07用asp實(shí)現(xiàn)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上MDB access數(shù)據(jù)庫(kù)文件的方法
用asp實(shí)現(xiàn)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上MDB access數(shù)據(jù)庫(kù)文件的方法...2007-11-11把網(wǎng)頁(yè)中的(電話,qq等數(shù)字)生成圖片的ASP程序
下面的代碼可以將網(wǎng)頁(yè)中一些防止別人直接復(fù)制或采集的不錯(cuò)的隱藏部分?jǐn)?shù)字信息,例如電話可以起到防止別人搜索。2008-11-11ASP 包含文件中的路徑問(wèn)題和使用單一數(shù)據(jù)庫(kù)連接文件的解決方案
全站只需要用一個(gè)數(shù)據(jù)庫(kù)連接文件的實(shí)現(xiàn)函數(shù)代碼2009-03-03