当前位置: 移动技术网 > IT编程>开发语言>Asp > ASP中JavaScript处理复杂表单的生成与验证第1/3页

ASP中JavaScript处理复杂表单的生成与验证第1/3页

2017年12月12日  | 移动技术网IT编程  | 我要评论

  作为改进措施,可以在表definitions、lists和records中增加一个字段formid。formid唯一标识一个表单,这样程序就可以同时地定义多个表单、保存多个表单的用户应答结果。至于上面的stitlelabel,我们可以用另外一个表(比如forms)来保存。
  紧接着表格标记和表格标题,程序输出的是html表单以及“提交”、“清除”按钮的代码。在此之后,程序检查shtml字符串中是否包含“*”,如包含的话说明表单中存在必须输入的内容,此时就输出一个脚注以说明该星号的含义。
以下是引用片段:
  < %=shtml% >  
  < tr >  
  < td colspan="2" align="center" >  
  < input type="submit" value="提交表单" > < input type="reset" value="清除" >  
  < /td >  
  < %  
  '是否存在必需输入的表单域,如存在,则输出表单脚注解释'*'的含义  
  if instr(shtml,"*") then  
  % >  
  < /tr >  
  < td colspan="2" align="center" >  
  < font size="2" >注意:有星号标记的值必需输入。< /font >  
  < /td >  
  < /tr >  
  < %  
  end if  
  % >  
  < /table >  
  < /form > 
  至此为止,表单的生成任务已经完成。
  四、处理提交结果
  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地址输入框等。然而,对于那些经常要更新表单的网站来说,本文所讨论的表单动态生成、动态验证功能确实是非常有用的。
3

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网