ASP动态生成复杂表单及验证系统实现

作者:木棉

时间:2026-10-30

浏览:70

本文介绍基于ASP和Access数据库的动态表单生成系统。通过定义字段类型、验证规则及选项数据,程序可自动生成HTML表单及客户端JavaScript验证代码。系统支持四种验证模式(无、仅客户端、仅服务器、双重验证),并演示了如何根据表单提交状态切换生成或处理逻辑,适用于频繁变动的调查或注册场景。

文章目录

动态表单生成系统概述

所谓复杂表单,是指包含多种输入类型的表单,例如下拉列表、单行文本框、多行文本框以及数值输入等。在需要频繁更换此类表单的应用场景中,开发一个能够动态生成表单的程序显得尤为重要。本文介绍的正是这样一个系统:它利用数据库存储表单定义数据,并通过ASP脚本动态生成对应的HTML表单代码以及用于验证用户输入的脚本。


数据库表结构设计

一、定义数据库表结构


在Web应用中,诸如“每周调查”之类的表单十分常见,这类表单通常需要频繁更新。如果拥有一套能够动态生成表单及其验证脚本的程序,将大幅降低制作此类表单的工作量。


在本示例的动态表单生成与验证系统中,我们采用Access数据库来存储表单的定义信息。为了简化设计,用户提交的数据也保存在同一数据库中。定义表单主要涉及两个表:第一个表(Definitions)用于定义表单中的输入域,第二个表(Lists)则保存各个输入域的附加信息,例如下拉列表的具体选项。


表Definitions包含以下字段:


FieldName —— 表单输入域对应的变量名


Label —— 显示在输入域前的提示性文本标签


Type —— 单个字符,用于标识表单输入域的形式及输入值的类型


具体类型定义如下:


(t) 文本输入框,对应HTML标签 < INPUT TYPE="TEXT" >。


(n) 文本输入框,但强制要求输入数字值。


(m) 备注型内容,用于注释或大量文本输入,表现为一个多行文本编辑框。


(b) 要求输入“是”或“否”。本实现中使用复选框来获取此类输入,复选框的标签为“是”。若用户选中该复选框,返回值为“on”。


(r) 单选按钮。


(l) 下拉列表框。


Min —— 仅对数字型输入有效,指定最小值。例如,示例中有一个“Age”(年龄)字段,其Min值设定为1。


Max —— 该字段的含义随输入域形式而异。对于数字型输入框,Max表示允许的最大值(如“Age”的Max值为100);对于文本输入框,Max表示允许的最大字符数;对于多行文本编辑框,Max表示可见区域的行数。


Required —— 标识该字段是否必填。若未输入此类值,验证程序将报错。在生成的表单中,必填字段以星号标记,并通过脚注提示用户。


本文的示例表单为“ASP程序员调查表”,其在Definitions表中的定义主要如下:


FieldName Label Type Min Max Required


Name 姓名 文本(t) - 50 否


Age 年龄 数字(n) 1 100 否


Sex 性别 单选按钮(r) - - 是


E-mail 邮件地址 文本(t) - - 是


Language 编程语言 下拉列表框(l) - - 否


表Lists用于保存输入域定义的附加信息,本例中“Sex”和“Languages”两个输入域用到了它。该表结构非常简单,仅包含以下三个字段:


FieldName —— 标识当前记录所属的表单输入域


Value —— 选择项的实际值


Label —— 用户可见的选择项提示文本


输入域“Sex”仅允许从两个值中选择:“男”或“女”。“Language”列出了几种适用于ASP环境的编程语言,包括:VBScript、JavaScript、C、Perl以及“其他”。


第三个表“Records”用于保存用户提交的内容,它包含三个字段,每条记录对应用户的一次提交:


Record —— 备注类型,以查询字符串形式保存的用户输入数据。


Created —— 用户提交表单的日期和时间。RemoteIP —— 提交者的IP地址。


在实际应用中,可能需要收集更多用户信息。为简化示例,本例仅记录提交时间和用户IP地址这两个附加信息。


ASP脚本核心逻辑与验证处理

二、准备工作


完成上述数据结构和表单定义后,接下来即可编写脚本。脚本的主要任务是生成表单以及处理用户提交的表单数据。


无论是生成表单还是处理表单,以下三个任务都是必不可少的:首先是确定验证类型。在生成表单时,验证类型通过查询字符串获取;在处理表单时,则从表单隐藏域读取。程序支持四种验证方式:不进行验证、仅客户端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,相关代码已被注释)。


第三个任务是在生成(或处理)表单脚本的前后输出一些静态HTML代码,例如< HEAD >< /HEAD >,并在脚本结束时释放RS、RSList等对象占用的资源。


除完成上述任务的代码外,示例应用中其余ASP脚本可能生成的页面有两种类型:提问表单(见上图)以及表单提交后的结果页面(后者同时负责记录用户提交结果)。确定运行哪部分脚本的最简单方法是检查表单是否已提交:若已提交,则处理表单;否则生成表单。


是生成表单还是处理表单?



If Len(Request.Form) = 0 Then


'生成表单


...略...


Else


'处理表单


...略...


End If


1

23下一页阅读全文

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章