ASP+JAVAScript:复杂表单的动态生成与验证(4)

时间:2007-10-06 21:51:00 



 四、处理提交结果
  ASP脚本剩下的任务是服务器端的表单处理,包括验证、将结果保存到数据库以及“提交成功/失败”页面的显示。在这部分表单验证代码中用到了一个字符串变量sBadForm,程序用它来保存错误信息。如果在验证过程结束时sBadForm为空,说明用户提交的表单是合法的;否则,拒绝该表单的提交并把sBadForm返回给浏览器。
  不管表单采用哪种验证模式,检查HTTP_REFERER都是一种好的习惯。这种检查可以防止脚本被盗用。要检查某个POST是否来自本网站的页面或脚本,只需比较两个服务器变量即可:


If InStr(Request.ServerVariables("HTTP_REFERER"), _ 
  Request.ServerVariables("HTTP_HOST")) = 0 Then 
  sBadForm = "< LI >表单提交自不正确的位置。" & vbCrlf 
  End If 

如果表单的隐藏域指示必须进行服务器端验证,则程序遍历表单定义数据库记录作相应的检查,其过程与表单的生成非常相似,只不过此时程序是验证表单,且把输入值非法信息加入到sBadForm中去而已。具体代码见dForm.asp。
  程序最后检查sBadForm是否为空。如不为空,则拒绝表单提交并将sBadForm写入浏览器。如果sBadForm为空,则在Records表增加一个记录保存表单数据。在保存表单内容之前需要删除隐藏域val,这个隐藏域总是表单的第一个输入域:



If Len(sBadForm) = 0 Then 
  RS.Open "Records", DB, 3, 2, &H0002 
  RS.AddNew 
  RS.Fields("Record") = Mid(Request.Form, InStr(Request.Form, "&") + 1) 
  RS.Fields("Created") = Now() 
  RS.Fields("RemoteIP") = Request.ServerVariables("REMOTE_ADDR") 
  RS.Update 
  Response.Write("< H1 >谢谢.< /H1 >") 
  RS.Close 
  Else 
  Response.Write("< H1 >表单提交失败。< /H1 >") 
  Response.Write(vbCrLf & sBadForm) 
  End If 
  End If 

这就是服务器端表单处理的全部过程。根据是否存在已经提交的表单,我们可以把前面生成表单的代码和这里表单处理的代码用If语句封装,使得这两部分脚本共享部分公用代码,比如HTML文档的头、数据库对象的创建和资源释放等。
  总地看来,dForm.asp只具备了动态表单生成、验证所必需的核心功能,忽略了许多细节问题的处理。比如前面已经提到的多表单问题:增加一个表管理多个表单,使得脚本具有管理、生成、处理指定表单的能力。另外一个明显的缺乏是表单定义数据的增加、删除和更新功能,以及用户提交结果数据的访问,这类功能可以在一个独立的程序中实现,而且在大多数情况下可以做成传统的应用程序(非B/S结构的应用)。最后,dForm.asp支持的输入域类型也有限,在实践中可能会有其他的表单输入要求,比如专用的e-mail地址输入框等。然而,对于那些经常要更新表单的网站来说,本文所讨论的表单动态生成、动态验证功能确实是非常有用的。


标签:表单,验证,动态
0
投稿

猜你喜欢

  • MySql数据库备份的几种方式

    2024-01-17 03:15:05
  • Python学习之迭代器详解

    2022-09-02 12:45:45
  • sqlserver中操作主从关系表的sql语句

    2024-01-22 09:13:14
  • sql server如何去除数据中的一些无用的空格

    2024-01-18 02:22:22
  • Python matplotlib模块及柱状图用法解析

    2023-11-24 01:04:33
  • 通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法

    2024-04-17 10:06:38
  • 解决SQLServer最大流水号的两个好方法

    2009-01-13 14:15:00
  • 深入了解Mysql逻辑架构

    2024-01-24 21:38:58
  • Python图像处理模块ndimage用法实例分析

    2023-09-08 16:52:26
  • vue table直接定位到指定元素的操作代码

    2024-05-09 15:14:57
  • Python pandas的八个生命周期总结

    2023-02-08 17:01:04
  • 公网远程访问局域网SQL Server数据库

    2024-01-22 01:38:21
  • python3应用windows api对后台程序窗口及桌面截图并保存的方法

    2023-10-23 12:29:19
  • windows10在visual studio2019下配置使用openCV4.3.0

    2021-10-23 12:23:31
  • pydantic resolve解决嵌套数据结构生成痛点分析

    2022-06-05 02:16:36
  • django主动抛出403异常的方法详解

    2023-03-28 17:40:10
  • 与ClientWidth有关的一点资料

    2024-04-22 22:25:08
  • mysql中的general_log(查询日志)开启和关闭

    2024-01-19 01:49:10
  • phpMyAdmin 2.10.2 配置方法

    2007-08-22 08:11:00
  • 手把手教你制作Google Sitemap

    2008-09-04 10:35:00
  • asp之家 网络编程 m.aspxhome.com