ASP中JavaScript处理复杂表单的生成与验证第1/3页
程序员文章站
2022-03-10 14:23:26
这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框、单行文本、多行文本、数值等。在经常需要更换这类表单的场合,需要有一个表单的动态生成程序。本文介绍的正是...
这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框、单行文本、多行文本、数值等。在经常需要更换这类表单的场合,需要有一个表单的动态生成程序。本文介绍的正是这样一个系统,它以数据库保存表单定义数据,利用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
一、定义数据库表结构
在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
1