|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;静态|静态考证这里所谓的庞大表单,是指表单中包括多种分歧的输出范例,好比下拉列表框、单行文本、多行文本、数值等。在常常必要改换这类表单的场所,必要有一个表单的静态天生程序。本文先容的恰是如许一个体系,它以数据库保留表单界说数据,使用ASP剧本静态天生表单HTML代码和考证表单输出的剧本。
1、界说数据库表布局
在Web上常常能够看到“每周查询拜访”之类的表单,这就是一种必要常常更新的表单。假如有一个静态天生表单及其考证剧本的程序,能够年夜年夜削减制造这些表单的事情量。
在本文的静态表单天生与考证示例中,我们利用一个Access数据库来存储有关表单的界说信息,同时为复杂计,用户在表单中输出的数据也保留到统一数据库。界说表单必要两个表:第一个表(Definitons)用于表单输出域的界说,第二个表(Lists)保留各个输出域的附加信息,好比选择列表的选择项。
表Definitons包括以下字段:
FieldName――付与表单输出域的变量名字
Label――即文本标签,显现在输出域后面的提醒性笔墨
Type――单个字符,该字符暗示表单输出域的情势和输出值的范例,详细以下:
(t)文本输出框,即<INPUTTYPE="TEXT">。
(n)文本输出框,但请求输出数字值。
(m)备注型内容,用于正文或其他大批文本的输出,它是一个多行文本编纂框。
(b)请求输出“是”或“否”。本完成中将用复选框来猎取这类输出,复选框的文本标签为“是”。假如用户选中它,则前往值是“on”。
(r)单选按钮。
(l)下拉列表框。
Min――仅对数字型输出值无效,在这里给出最小值。在本例中有一个“Age”(岁数)数字型输出框,它的最小值设定为1。
Max――该字段的值与输出域情势有关。关于数字型输出框,它暗示的是同意的最年夜值。比方“Age”的Max值为100。关于文本输出框,Max暗示同意的最多字符个数。关于多行文本编纂框,Max暗示可见地区的文本行数。
Required――暗示是不是必需输出。这类范例的值假如没有输出,则输出考证程序将呈报毛病。在表单中,必需输出的值以星号标志,并以脚注的情势提醒用户该类值必需输出。
本文的示例表单是一个ASP程序员查询拜访表,在Definitons表中该表单的界说次要以下:
FieldNameLabelTypeMinMaxRequired
Name姓名文本(t)-50否
Age岁数数字(n)1100否
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地点这两个附加信息。
2、筹办事情
在完成上述数据布局和表单的界说以后,接上去就能够编写剧本。剧本的义务是天生表单和处置用户提交的表单。
不管是表单的天生仍是处置,以下三个历程(义务)都是必不成少的:第一是断定考证范例,在天生表单时考证范例值经由过程查询字符串取得,在处置表单时从表单埋没域读取。程序撑持的表单考证体例共有以下四品种型:不举行考证,客户端JavaScript考证,服务器端ASP剧本考证,客户端和服务器端都举行考证(代号分离为0到3)。假如没有在查询字符串中指定正当的考证体例,则默许第四种考证体例。这类考证处置体例使得我们能够天真地使用这个表单天生、处置体系,当客户端克制利用JavaScript考证时就能够仅在服务器端实行考证历程。上面是断定考证范例的代码:
反省考证范例
iValType=Request.QueryString("val")
IfIsNumeric(iValType)=FalseTheniValType=3
IfiValType>3OriValType<0TheniValType=3
第二个义务是翻开数据库毗连,创立两个纪录集工具:RS工具,这是本程序中的次要纪录集工具,用来操纵Definitions表;RSList工具,次要用于从Lists表读取数据。示例程序供应两种数据库毗连办法:利用ODBCDSN或不利用ODBCDSN(利用DSN时必要先创立名为Dynamic的DSN,利用DSN毗连数据库的代码已被正文失落)。
第三个义务是在天生(或处置)表单剧本的后面(和前面)输入一些静态的HTML代码,好比<HEAD></HEAD>,和在剧本运转停止的时分开释RS、RSList等工具占用的资本。
除完成上述义务的代码外,示例使用中其他ASP剧本大概天生的页面有两品种型:发问表单(见上图)和表单提交后呈现的了局页面(后者同时还卖力用户提交了局的纪录)。要断定事实运转哪一部分剧本,最复杂的办法就是反省是不是已提交表单:如是,则处置表单;不然天生表单。
是天生表单仍是处置表单?
IfLen(Request.Form)=0Then
天生表单
...略...
Else
处置表单
...略...
EndIf
3、静态天生表单
天生表单时,程序依照Definitons表中的各个输出域界说纪录,顺次天生响应的表单HTML代码和JavaScript代码。HTML代码中起首要天生的是文本标签:
sHTML=sHTML&vbTab&"<TR>"&vbCrLf&vbTab&vbTab
sHTML=sHTML&"<TDVALIGN="&Chr(34)&"TOP"&Chr(34)
sHTML=sHTML&">"&vbCrLf&vbTab&vbTab&vbTab
sHTML=sHTML&"<B>"&RS.Fields("Label")
然后程序反省以后输出域是不是必需输出。假如必需,则在标签文本以后加一个星号(暗示该值必需输出),同时关于必需输出的值,还要天生响应的JavaScript代码来考证它。关于单选按钮或选择列表,需进一步反省用户的确选择了某个选项;关于一切其他输出范例,只需反省输出值不为空便可。
紧接文本标签的是表单的输出元素,这些元素的HTML代码依据Definitions表中指定的范例和属性天生。再接上去就是依据输出值请求天生实行客户端考证义务的JavaScript代码。关于本例,只要数字型的值必要进一步反省以包管用户的输出的确是数字,并且数字值在允许的最年夜值和最小值之间。天生上述代码以后,就能够停止一个表格行(也就是一个输出域)持续处置Definitions表的下一个纪录。一旦一切的数据库纪录处置终了,下一步就能够到场“提交”按钮和“扫除”按钮的HTML代码。假如换个角度来看,程序在这里的义务就是依据数据库纪录天生各个输出域,每一个输出域占用一个表格行,每一个表格行二个单位:第一个单位用来显现文本标签,第二个单位显现输出元素自己(代码见dForm.asp)。
上述历程停止以后,表单的HTML代码和考证用JavaScript函数分离保留到了变量sHTML和sJavaScript中。在把这些内容写进页面之前,程序反省客户端是不是请求实行JavaScript考证,假如不请求实行这类考证,则扫除sJavaScript变量:
IfiValType=0OriValType=2ThensJavaScript=""
在输入BODY标志以后,程序输入以下JavaScript函数:
<SCRIPTLANGUAGE="JavaScript&</p>缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。 |
|