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

來源:互聯網
上載者:User
web|投票|投票 三、調查表單的產生與結果分析
  作 者 : 仙人掌工作室
  
     PollWriter.asp先檢查表單變數,包括調查項目名字PollName以及(可選的)字串LinkText和LinkURL,LinkText和LinkURL描述了使用者提交其投票結果之後顯示的URL。接下來指令碼建立並執行從指定調查項目的S_表和A_表提取記錄集的SQL命令,然後遍曆這個記錄集格式化選項按鈕、複選框以及其它提示文本,最後輸出該調查項目的HTML表單。表單中問題的名字為“CHOICE”加問題序號。當這個表單被提交的時,它的ACTION將裝載PollMaker.asp(這裡的函數saveResponses()從CHOICE表單元素提取投票結果,然後更新資料庫,代碼略)。表單中的其它隱藏變數用於將PollName、OpType、LinkText、LinkURL傳遞給PollMaker.asp:
  
  
   < %
   ' 從S_表和A_表讀取調查項目定義
   Set objConn = Server.CreateObject("ADODB.Connection")
   objConn.Open "poll"
   SQLCommand = "Select " & SName & ".ID, " & _
    "IType, NoOpinion, Stem, ALabel, Answer FROM " & SName & "LEFT JOIN " & _
    AName & " ON " & SName & ".ID = " & AName & ".ID ORDER BY " & _
    SName & ".ID, ALabel"
   Set objRS = objConn.Execute(SQLCommand)
   ' 向調查表單輸出各個問題
   Do While Not objRS.EOF
    Response.Write("< TR>< TD>" & objRS("ID") & ".< TD BGCOLOR=""#ffff00"">" & _
    objRS("Stem"))
    Response.Write("< TR>< TD>< TD>")
    ckNoOpinion = IIf(objRS("NoOpinion") = "Y", "", "Checked")
    noMove = False
    ' 除"允許複選",其它各類問題均需檢查是否允許不回答問題
    ansName = """CHOICE" & objRS("ID") & """"
    Select Case objRS("IType")
    Case "1" ' 是/否
    If ckNoOpinion = "" Then
    Response.Write(" < INPUT TYPE=radio NAME=" & ansName & _
    " VALUE="" "" Checked>暫不回答 ")
    End If
    Response.Write("< INPUT TYPE=radio NAME=" & ansName & _
    " VALUE=""A"" " & ckNoOpinion & ">是")
    Response.Write("< INPUT TYPE=radio NAME=" & ansName & _
    " VALUE=""B"">否")
    Case "2" ' 贊同程度
    ...略...
    Case "3" ' 語義區分
    ...略...
    Case "4" ' 多項選擇
    ...略...
    Case "5" ' 允許複選
    ...略...
    End Select
    If NoMove Then
    NoMove = False
    ElseIf Not objRS.EOF Then
    objRS.MoveNext
    End If
   Loop
   %>
   
  
     PollResult.asp使用與PollWrite.asp同樣的SQL命令從A_表(答案)和S_表(問題)提取記錄集,接著從對應的R_表讀取使用者回答結果,用一個二維數組Counts統計投票結果。預設時結果分析中不包含“沒有回答”,如果要包含,則需給出表單變數ShowNoOp並指定其值為True,請參見圖4中顯示投票結果的URL。
  
  
   < %
   'Globals
   Dim PollName
   Dim Counts() ' 使用者回答的統計數組
   Dim nResponses
   Dim N ' 使用者回答數量,可能不包含"沒有回答"選項
   Dim objConn
   Dim objRS
   
   nResponses = 0
   
   Call Main
   
   Sub Main
    Dim likert
    Dim i
    Likert = Array("強烈反對","反對", "不確定","同意","完全贊成")
    PollName = Request("PollName")
    ShowNoOp = IIf(UCase(Request("ShowNoOp"))="TRUE", True, False)
    ' 從A_表和S_表讀取調查項目定義
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "poll"
    SName = "[S_" & PollName & "]"
    AName = "[A_" & PollName & "]"
   
    If Count() = False Then
    Response.Write("< BR>此調查項目沒有投票結果")
    Exit Sub
    End If
    SQLCommand = "Select " & SName & ".ID, " & _
    "IType, NoOpinion, Stem, ALabel, Answer FROM " & SName & _
    "LEFT JOIN " & AName & " ON " & SName & ".ID = " & AName & _
    ".ID ORDER BY " & SName & ".ID, ALabel"
    Set objRS = objConn.Execute(SQLCommand)
   
    Response.Write("< TABLE>")
    ... 輸出表單標題,略 ...
    Response.Write("< TR>< TD COLSPAN=5> ")
    itemIx = 0 ' 問題序號
    Do While Not objRS.EOF
    IType = objRS("IType")
    NoMove = False
    N = IIf(ShowNoOp Or IType=5, nResponses, nResponses-Counts(itemIx, 0))
    N = IIf(N=0, 1, N)
    Response.Write("< TR>< TH ALIGN=right>" & objRS("ID") & _
    ".< TH ALIGN=left COLSPAN=4 BGCOLOR=""#ffff00"">" & objRS("Stem"))
    Response.Wr



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.