用ASP編寫網(wǎng)上調(diào)查投票系統(tǒng)
發(fā)表時間:2023-08-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]現(xiàn)在越來越多的朋友都建立了自己的個人主頁,看著計數(shù)器的數(shù)字每日不斷地增加,心里有說不出的高興---自己的東東終于有個賞識了。但如果才能了解網(wǎng)友們到底喜歡那方面的內(nèi)容呢?我能不能搞一個調(diào)查系統(tǒng),在網(wǎng)友...
現(xiàn)在越來越多的朋友都建立了自己的個人主頁,看著計數(shù)器的數(shù)字每日不斷地增加,心里有說不出的高興---自己的東東終于有個賞識了。但如果才能了解網(wǎng)友們到底喜歡那方面的內(nèi)容呢?我能不能搞一個調(diào)查系統(tǒng),在網(wǎng)友中進(jìn)行調(diào)查呢?這成了每個網(wǎng)主的心頭大事。當(dāng)然可以啦,只要你申請的免費(fèi)空間有支持ASP環(huán)境,下面我教大家如何利用數(shù)據(jù)庫建立一套線上投票調(diào)查系統(tǒng),你只要將調(diào)查有主題,調(diào)查選項存入數(shù)據(jù)庫,就可以通過ASP將投票調(diào)查系統(tǒng)顯示在客戶端,而且這套系統(tǒng)可以存入多筆調(diào)查主題,只要在投票起始日期和投票截止日期設(shè)定無誤,則調(diào)查主題將會定時更新,完全不需擔(dān)心調(diào)查主題不夠新穎,F(xiàn)在我們就開始建立這一套投票調(diào)查系統(tǒng),首先你必須先建立一個關(guān)聯(lián)性數(shù)據(jù)庫,數(shù)據(jù)庫中包含兩個資料表格,表格字段定義如下: Poll PollOption PollID 自動編號 PollOptionID 自動編號 PollQuestion 文字 PollID 數(shù)字 DateStart 日期/時間 QuestionText 文字 DateEnd 日期/時間 Votes 數(shù)字這兩個資料是以PollID為關(guān)聯(lián)性所建立的,如果你不了解該如何建立表格關(guān)聯(lián)性,沒關(guān)系,我已經(jīng)將數(shù)據(jù)庫的關(guān)聯(lián)性設(shè)定好了,或者你可以去參考有關(guān)數(shù)據(jù)庫的書,數(shù)據(jù)庫建立完成之后馬上就讓我們進(jìn)入投票調(diào)查系統(tǒng)原始程序vote.asp vote.asp
<% Language=VBScript %>
<!--#include file="adovbs.inc"-->
<%
Dim strConnect (注:指定數(shù)據(jù)庫路徑)
strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath
("/asp/poll/poll.mdb") & ";DefaultDir=" & Server.MapPath("/asp/poll") & ";DriverId=25;FILE=MS Access;MaxBufferSize=512;PageTimeout=5"
Const iWidth = 200 (注:定義投票接口表格寬度)
Set objConn = Server.CreateObject("ADODB.Connection")(注:建立數(shù)據(jù)庫連結(jié))
objConn.Open strConnect (注:開啟數(shù)據(jù)庫連結(jié))
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")(注:建立數(shù)據(jù)庫對象集合) 上面完成了投票調(diào)查系統(tǒng)原始程序vote.asp,為了讓利用這個網(wǎng)上投票調(diào)查系統(tǒng)所得的結(jié)果更具真實(shí)性,下面將要建議一個檢測系統(tǒng),檢查訪問者今天是否已經(jīng)投過票了。 Dim strVoted
strVoted = Request.Cookies("Voted")(注:利用Cookies值判定訪問者是否投過票) Dim strSQL
%> 為了不讓訪問者在同一天內(nèi)重復(fù)投票,所以我們用了一個Request.Cookies("Voted") 來限制訪問者一天只能投一次票,這樣子的方法比較能夠看出投票結(jié)果的客觀性,如何控制Cookies,這個在下面我向大家介紹: <BODY>
<% if strVoted = "Yes" then (注:如果已經(jīng)投過票了,就顯示投票結(jié)果)
strSQL = "SELECT PollOption.PollOptionID, PollOption.QuestionText,
PollOption.Votes, " & "Poll.PollQuestion " & _
"FROM Poll INNER JOIN PollOption ON Poll.PollID = PollOption.PollID " & _
"WHERE Poll.DateStart <= #" & Date & "# AND Poll.DateEnd >= #" & Date & "#;" (注:從 PollOption資料表格中選取PollOptionID、QuestionText、Votes三個字段的值,選取的條件是兩個資料表格中PollID相同的資料,而且投票起始日期必須在今天之前,投票截止日期必須在今天之后。) (注:建立一個動態(tài)數(shù)組,不管答案選項有多少都能函括在內(nèi)。) Dim PollOptions()
Redim PollOptions(objRS.RecordCount,2)
Dim iCount, iTotalVotes, strPollName
iCount = 0
iTotalVotes = 0
strPollName = CStr(objRS("PollQuestion"))
Do While Not objRS.EOF
PollOptions(iCount,1) = CInt(objRS("Votes"))
PollOptions(iCount,2) = CStr(objRS("QuestionText"))
iTotalVotes = iTotalVotes + PollOptions(iCount,1)
iCount = iCount + 1
objRS.MoveNext
Loop
%>
<TABLE BORDER=0 CELLSPACING=0 WIDTH=<%=iWidth%>>
<TR><TH BGCOLOR=6666f0><FONT COLOR=WHITE FACE=Arial SIZE=2>
<%=strPollName%>
</FONT></TH></TR>
<TR>
<TD BGCOLOR=000000>
<%
Dim iLoop
For iLoop = 0 to iCount-1 %>
<FONT FACE=Arial SIZE=2 color=ffffff><%=PollOptions(iLoop,2)%> (<%
=FormatPercent(PollOptions(iLoop,1)/iTotalVotes,1)%> )
</FONT><%'先將投票選項印出, 再將投票結(jié)果印出%><%'數(shù)組中(0,1)(1,1)(2,1)放的是投票結(jié)果,
而數(shù)組中(0,2)(1,2)(2,2)放 的是投票選項%>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR><TD WIDTH=<%=CInt((PollOptions(iLoop,1)/iTotalVotes)*iWidth)%>
<BGCOLOR=yellow>
</TD>
</TR>
</TABLE>
<BR>
<% Next %>
<FONT FACE=Arial SIZE=2>總投票數(shù): <%=iTotalVotes%></FONT>
</TD></TR></TABLE> 下面這張圖就是投票結(jié)果
圖1 如果還沒投票,就顯示投票窗口: <%
else
strSQL = "SELECT PollOption.PollOptionID, PollOption.QuestionText,
Poll.PollQuestion " & "FROM Poll INNER JOIN PollOption ON Poll.PollID =
PollOption.PollID " & "WHERE Poll.DateStart <= #" & Date & "# AND Poll.DateEnd >
= #" & Date & "#;" (注:從 PollOption資料表格中選取PollOptionID、QuestionText、Votes三個字段的值,選取的條件是兩個資料表格中PollID相同的資料,而且投票起始日期必須在今天之前,投票截止日期必須在今天之后。) objRS.Open strSQL, objConn
%>
<FORM METHOD=POST ACTION="voteResults.asp" ONSUBMIT="return
OneOptionChecked();" NAME=frmPoll>
<TABLE BORDER=0 CELLSPACING=0 WIDTH=<%=iWidth%>>
<TR><TH BGCOLOR=6666f0><FONT COLOR=WHITE FACE=Arial SIZE=2>
<%=objRS("PollQuestion")%>
</FONT></TH></TR><TR><TD BGCOLOR=000000>
<%
Do While Not objRS.EOF %>
<INPUT TYPE=RADIO NAME=radPoll value="<%=objRS("PollOptionID")%>">
<FONT FACE=Arial SIZE=2 color=white><%=objRS("QuestionText")%></FONT>
<BR>
<%
objRS.MoveNext
Loop
%>
<INPUT TYPE=HIDDEN NAME="URLFrom" value="<%=Request.ServerVariables
("SCRIPT_NAME")%>">
<BR><CENTER><INPUT TYPE=SUBMIT value="投票去!"></CENTER>
</TD></TR></TABLE>
</FORM>
<P>
<% end if %>
</BODY>
</HTML>
<%
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%> 下圖就是顯示的投票
接下來就到了編寫處理投票結(jié)果的程序voteresults.asp voteresults.asp
<%@ Language=VBScript %>
<% Option Explicit %>
<%
Response.ExpiresAbsolute = Now() – 1(注:設(shè)定網(wǎng)頁保留在客戶端Cach中之期限為昨天,當(dāng)然你可以根據(jù)你的情況進(jìn)行設(shè)定。)
下面先將投票值加一
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & _
Server.MapPath("Poll.mdb") & ";"
objConn.Open
(注:將表格中傳來的radPoll字段(PollOptionID)傳給iPollOptionID)
Dim iPollOptionID
iPollOptionID = CInt(Request("radPoll"))
objConn.Execute "UPDATE PollOption SET Votes = Votes + 1 " & _
"WHERE PollOptionID = " & iPollOptionID
(注:關(guān)閉數(shù)據(jù)庫。)
objConn.Close
Set objConn = Nothing
(注:投票完之后將Cookies值寫回訪問者硬盤)
Response.Cookies("Voted") = "Yes"
(注:將Cookies值過期日設(shè)為一天)
Response.Cookies("Voted").Expires = DateAdd("d",1,Date)
Response.Cookies("Voted").Path = "/asp/poll"(注:投票檔案的相對路徑。)
注:投票完之后就將訪問者導(dǎo)回vote.asp
Response.Redirect Request("URLFrom")
%> 到這里一個簡單的投票調(diào)查系統(tǒng)已經(jīng)完成了,希望能對你有所幫助。