用ASP技術開發WEB調查(投票)系統 (2)

來源:互聯網
上載者:User
web|投票|投票 二、調查項目的建立和維護
  作 者 : 仙人掌工作室
  
     本節我們說明調查項目建立和維護功能的實現。
  
     建立與維護調查項目的起始頁面是Startup.html,該頁面負責設定PollMaker.asp和ItemMaker.asp等頁面使用的幀結構(從上到下共分三個幀)。起始頁面所引用的Blank.html只用於指定背景顏色,StartMsg.html提供啟動時顯示在最下面幀的提示資訊。
  
     PollMaker.asp和ItemMaker.asp都包含運行於伺服器的ASP指令碼,同時也包含(和建立)瀏覽器指令碼以支援用戶端操作。運行於伺服器的指令碼由VBScript寫成,而用戶端指令碼則是JavaScript,這使得它既可以運行於Netscape Navigator,也適合於IE。
  
     PollMaker.asp通過尋找Poll資料庫的MSysObjects系統資料表獲得已經定義的調查項目名字。因此,ASP應用必須具有讀取該表的許可權。在Access97中的設定方法是:先選擇菜單“工具/選項”設定系統對象可見,然後在“工具/安全/使用者與組的許可權”下設定。在本文所附代碼中Poll.mdb已經設定了這個許可權。如果要在不同的RDBMS上實現這個調查系統,這部分代碼必須改寫,使它適應目標資料庫上的系統資料表結構。
  
     要將這些已定義的調查項目名字顯示到下拉式清單方塊,首先需要從S_表的表名中除去“S_”首碼,然後將這些字串格式化為< SELECT>元素的< OPTION>字串:
  
   
   < SELECT NAME="PollName">
   < OPTION VALUE="StartPoll" SELECTED>NEW POLL
   < %
    ' 擷取當前已經定義的調查項目名字
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "poll"
    Set objRS = _
    objConn.Execute("SELECT Name FROM MSysObjects " & _
    "WHERE Type=1 AND Name LIKE 'S_%' ORDER BY Name")
    Do While Not objRS.EOF
    PollName = Mid(objRS("Name"), 3)
    Response.Write("< OPTION VALUE=""" & PollName & """>" & PollName)
    objRS.MoveNext
    Loop
   %>
   < /SELECT>
  
     ItemMaker將指定調查項目的所有定義資訊下載到瀏覽器端的JavaScript數組中,從而實現問題的快速編輯和建立。所有的問題編輯操作都在瀏覽器內通過修改兩個JavaScript數組完成,只有單擊“儲存” 按鈕才可將修改結果寫入資料庫。
  
     ItemMaker.asp首先將Response.Buffer設定為True,因此在頁面產生完成之前HTML輸出將一直緩衝在伺服器上,這使得產生錯誤或執行非編輯功能時ItemMaker.asp可以不下載那些JavaScript函數而退出。在Sub Main的開始處,程式通過檢查表單變數OpType來決定是建立新的調查項目,還是刪除調查項目或調查結果。這三個操作均在ItemMaker.asp內完成,即所有受密碼保護的功能均在同一指令碼內實現,這使得整個系統中密碼只在一個地方存取。上述三個操作均需動態地產生與執行SQL語句。不論是指令碼執行出現錯誤,還是指定的操作執行成功,都調用Response.Redirect語句重新載入PollMaker.asp,並把一個說明字串傳遞給它:
  
   
   < %
   Dim PollName
   Dim Password
   Dim objConn
   Dim objRS
   
   PollName = Request("PollName")
   Password = UCase(Request("Password"))
   OpType = Request("OpType") ' 要求ItemMaker.asp執行的操作
   
   SName = "[S_" & PollName & "]"
   AName = "[A_" & PollName & "]"
   RName = "[R_" & PollName & "]"
   Call Main
   Sub Main
   If Password < > "WEBPOLL" Then ' 如密碼錯誤返回PollMaker.asp並提示
    Response.Redirect "PollMaker.asp?Msg=密碼錯誤,請再試一次。"
    Exit Sub '從ItemMaker.asp返回
   End If
   If OpType = "Edit" Then ' 編輯或建立調查調查項目
    If PollName = "StartPoll" Then
    If Not newPoll() Then '使用者沒有給出調查項目的名字
    Response.Redirect "PollMaker.asp?Msg=請輸入調查項目名字"
    Exit Sub
    End If
    SName = "[S_" & PollName & "]"
    AName = "[A_" & PollName & "]"
    RName = "[R_" & PollName & "]"
    End If
   ElseIf OpType = "DelResp" Then ' 刪除調查項目的已有結果
    If PollName = "StartPoll" Then
    Response.Redirect "PollMaker.asp?Msg=請輸入調查項目名字"
    Exit Sub
    End If
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "poll"
    Set objRS = Server.CreateObject("ADODB.Recordset")
    objConn.Execute "DELETE FROM " & RName
    Response.Redirect "PollMaker.asp?Msg=已經刪除指定調查項目的投票結果"
   ElseIf OpType = "DelPoll" Then ' 刪除整個調查項目
    If PollName = "StartPoll" Then
    Response.Redirect "PollMaker.asp?Msg=不能刪除新調查項目"
    Exit Sub
    End If
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "poll"
    Set objRS = Server.CreateObject("ADODB.Recordset")
    objConn.Execute "DROP TABLE " & SName
    objConn.Execute "DROP TABLE " & AName
    objConn.Execute "DROP TABLE " & RName
    Response.Redirect "PollMaker.asp?Msg=已經刪除指定的調查項目。"
   End If
   %>
  
  
     在運行ItemMaker.asp編輯調查項目時,程式提取Poll資料庫中定義的調查項目及其問題定義資料初始化數組stemArray[]和ansArray[]。這些用來初始化的字串在寫入時經過“轉義”處理(即調用Escape()函數),從而避免了由於嵌入的引號或其它控制字元可能導致的問題,在使用這些數組之前這些字串被還原(initPoll()函數):
  
  
 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.