欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP中JavaScript處理復(fù)雜表單的生成與驗證

 更新時間:2007年03月25日 00:00:00   作者:  

  作為改進(jìn)措施,可以在表Definitions、Lists和Records中增加一個字段FormID。FormID唯一標(biāo)識一個表單,這樣程序就可以同時地定義多個表單、保存多個表單的用戶應(yīng)答結(jié)果。至于上面的sTitleLabel,我們可以用另外一個表(比如Forms)來保存。
  緊接著表格標(biāo)記和表格標(biāo)題,程序輸出的是HTML表單以及“提交”、“清除”按鈕的代碼。在此之后,程序檢查sHTML字符串中是否包含“*”,如包含的話說明表單中存在必須輸入的內(nèi)容,此時就輸出一個腳注以說明該星號的含義。
以下是引用片段:
  < %=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" >注意:有星號標(biāo)記的值必需輸入。< /FONT >  
  < /TD >  
  < /TR >  
  < %  
  End If  
  % >  
  < /TABLE >  
  < /FORM > 
  至此為止,表單的生成任務(wù)已經(jīng)完成。
  四、處理提交結(jié)果
  ASP腳本剩下的任務(wù)是服務(wù)器端的表單處理,包括驗證、將結(jié)果保存到數(shù)據(jù)庫以及“提交成功/失敗”頁面的顯示。在這部分表單驗證代碼中用到了一個字符串變量sBadForm,程序用它來保存錯誤信息。如果在驗證過程結(jié)束時sBadForm為空,說明用戶提交的表單是合法的;否則,拒絕該表單的提交并把sBadForm返回給瀏覽器。
  不管表單采用哪種驗證模式,檢查HTTP_REFERER都是一種好的習(xí)慣。這種檢查可以防止腳本被盜用。要檢查某個POST是否來自本網(wǎng)站的頁面或腳本,只需比較兩個服務(wù)器變量即可:
以下是引用片段:
  If InStr(Request.ServerVariables("HTTP_REFERER"), _ 
  Request.ServerVariables("HTTP_HOST")) = 0 Then 
  sBadForm = "< LI >表單提交自不正確的位置。" & vbCrlf 
  End If 
  如果表單的隱藏域指示必須進(jìn)行服務(wù)器端驗證,則程序遍歷表單定義數(shù)據(jù)庫記錄作相應(yīng)的檢查,其過程與表單的生成非常相似,只不過此時程序是驗證表單,且把輸入值非法信息加入到sBadForm中去而已。具體代碼見dForm.asp。
  程序最后檢查sBadForm是否為空。如不為空,則拒絕表單提交并將sBadForm寫入瀏覽器。如果sBadForm為空,則在Records表增加一個記錄保存表單數(shù)據(jù)。在保存表單內(nèi)容之前需要刪除隱藏域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 
  這就是服務(wù)器端表單處理的全部過程。根據(jù)是否存在已經(jīng)提交的表單,我們可以把前面生成表單的代碼和這里表單處理的代碼用If語句封裝,使得這兩部分腳本共享部分公用代碼,比如HTML文檔的頭、數(shù)據(jù)庫對象的創(chuàng)建和資源釋放等。
  總地看來,dForm.asp只具備了動態(tài)表單生成、驗證所必需的核心功能,忽略了許多細(xì)節(jié)問題的處理。比如前面已經(jīng)提到的多表單問題:增加一個表管理多個表單,使得腳本具有管理、生成、處理指定表單的能力。另外一個明顯的缺乏是表單定義數(shù)據(jù)的增加、刪除和更新功能,以及用戶提交結(jié)果數(shù)據(jù)的訪問,這類功能可以在一個獨立的程序中實現(xiàn),而且在大多數(shù)情況下可以做成傳統(tǒng)的應(yīng)用程序(非B/S結(jié)構(gòu)的應(yīng)用)。最后,dForm.asp支持的輸入域類型也有限,在實踐中可能會有其他的表單輸入要求,比如專用的e-mail地址輸入框等。然而,對于那些經(jīng)常要更新表單的網(wǎng)站來說,本文所討論的表單動態(tài)生成、動態(tài)驗證功能確實是非常有用的。

相關(guān)文章

最新評論