ASP+VML+DB实现投票统计项目

几个月前我看到过一位网友lshdic写的一篇用JS+VML的《使用 Vml 制作立体柱状投票统计图的完整程序》。
我觉得这个方法非常不错,可以不使用图片就生成统计图,现在就让我们一起来用ASP实现这个程序。

准备工作:用ACCESS建立一个MDB数据库,名为vote.mdb,并且在数据库中建立如下两个表:

然后建立我们按照ASP开发的惯例建立连接数据库的文件conn.asp

1   
2'conn.asp    
3Set conn=Server.CreateObject("ADODB.Connection")   
4conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("vote.mdb")   

显示投票项目的列表,因为我们要制作的是一个多项目的投票系统vote_list.asp

1<html>
2<head>
3<title>投票项目列表</title>
4<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
5<link href="../images/main.css" rel="stylesheet" type="text/css"/>
6</head>   

set rs=conn.execute("select * from votetitle order by voteid desc")

1<table bgcolor="#ffffff" border="1" bordercolor="#000000" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%">
2<tr>
3<td bgcolor="#EFEFEF">所有投票列表</td>
4</tr>   

do while not rs.eof

1<tr>
2<td>编号:<font color="#FF0000">```
3=rs("voteid")
4```  </font><a ```"="" href="vote.asp?voteid=```
5=rs(" target="_blank" voteid")="">```
6=rs("votetitle")

(``` =rs("time")

1</tr>   

rs.movenext
loop
rs.close
set rs=nothing

1</table>
2
3</html>

投票显示页面vote_show.asp

1if request("voteid")="" then   
2response.write "参数没有指定。"   
3response.End()   
4end if
 1<html>
 2<head>
 3<title>查看结果</title>
 4<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
 5<style>   
 6td{font-size:12px}   
 7body{font-size:12px}   
 8v\:*{behavior:url(#default#VML);} //这里声明了v作为VML公用变量   
 9</style>
10<link href="../images/main.css" rel="stylesheet" type="text/css"/>
11</head>   

dim voteid
voteid=request("voteid")
set rs=conn.execute("select count from vote,votetitle where votetitle.voteid="&amp;voteid&amp;" and vote.voteid=votetitle.voteid order by id")
iii=0
do while not rs.eof
ii=ii+1
if ii=1 then
ceocio=trim(rs("count"))
ceocio1=trim("array1["&amp;iii&amp;"]")
else
ceocio=trim(ceocio&amp;","&amp;rs("count"))
ceocio1=trim(ceocio1&amp;"+array1["&amp;iii&amp;"]")
end if
iii=iii+1
rs.movenext
loop
rs.close
set rs=nothing
'response.write ii
'response.write ceocio1

1<script>   
2array1=new Array(```
3=ceocio
4```) //不同的投票票数   
5allstr=```
6=ceocio1

//alert(allstr)
//allstr=array1[0]+array1[1]+array1[2]+array1[3]+array1[4]+array1[5] //得到总数
for(i=0;i<=``` =(ii-1)

1mathstr=Math.round(100/(allstr/array1[i])) //求百分之几, 100/(总和/单个)   
2document.write ("<v:rect fillcolor='lime' style='width:20;color:navy;height:"+500*```
3=(ii-1)
4```/(1000/mathstr)+"'><br>&nbsp;%"+mathstr+"<br>"+array1[i]+"人<v:Extrusion backdepth='15pt' on='true'/></v:rect>")   
5}   
6</script>   

voteid=request("voteid")
set rs=conn.execute("select * from vote,votetitle where votetitle.voteid="&amp;voteid&amp;" and vote.voteid=votetitle.voteid order by id")

 1<table bgcolor="#ffffff" border="1" bordercolor="#000000" cellpadding="2" cellspacing="0" style="border-collapse: collapse" width="100%">
 2<tr>
 3<td bgcolor="#EFEFEF">关于:<font color="#FF0000">```
 4=rs("votetitle")
 5```</font>的调查结果:<br/>   
 6共有<b><font color="#FF0000">```
 7=rs("total")
 8```</font></b>人参与调查<br/>   
 9(```
10=rs("time")
11```到```
12=date
13```)</td>
14</tr>   

do while not rs.eof
dim i
i=i+1

1<tr>
2<td>选项```
3=i
4```:```
5=rs("title")
6```     <font color="#FF0000">```
7=rs("count")
8```人</font></td>
9</tr>   

rs.movenext
loop
rs.close
set rs=nothing

 1<tr>
 2<td> </td>
 3</tr>
 4</table>
 5<br/>
 6<a href="vote_list.asp">查看过往投票</a> <br/>
 7<a ```"="" href="vote.asp?voteid=```
 8=request(" voteid")="">投票本项目</a>
 9
10</html>

vote.asp

1if request("voteid")="" then   
2set rs=conn.execute("select top 1 voteid from votetitle order by voteid desc")   
3voteid=rs("voteid")   
4rs.close   
5set rs=nothing   
6else   
7voteid=request("voteid")   
8end if
1<html>
2<head>
3<title>Untitled Document</title>
4<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
5<link href="style.css" rel="stylesheet" type="text/css"/>
6</head>
7<body>   

if request("action")="vote" then
'加上","&amp;request("voteid")","为了不使id为1的投票和id为11的投票混遐
if instr(request.cookies("vote"),","&amp;request("voteid")&amp;",")=0 then
else
response.write "你已经投过票了"
response.end
end if
sql="update [vote] set count=count+1 where id="&amp;request("votevalue")
conn.execute(sql)
sql="update [votetitle] set total=total+1 where voteid="&amp;request("voteid")
conn.execute(sql)
'写入cookies有效期
Response.Cookies("vote").Expires=Date+1
'将已经投票的选项全部记录在cookies,用,号隔开。
Response.Cookies("vote")=","&amp;Request.Cookies("vote")&amp;","&amp;Request("voteid")&amp;","
voteid=request("voteid")
'转向基本
response.redirect "vote_show.asp?voteid="&amp;voteid
end if

'dim voteid
'voteid=request("voteid")
set rs=conn.execute("select * from vote,votetitle where votetitle.voteid="&amp;voteid&amp;" and vote.voteid=votetitle.voteid order by id")

 1<table bgcolor="#ffffff" border="1" bordercolor="#C0C0C0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%">
 2<tr>
 3<td bgcolor="#EFEFEF" colspan="2">调查:```
 4=rs("votetitle")
 5```(```
 6=rs("time")
 7```)</td>
 8</tr><form action="vote.asp?action=vote&amp;voteid=```
 9=voteid
10```" method="post" name="form1">   

do while not rs.eof
dim i
i=i+1

1<tr>
2<td colspan="2">
3<input ```="" ```"="" ```checked```="" end="" i="1" id")="" if="" name="votevalue" then="" type="radio" value="```
4=rs("/&gt;   

=rs("title")

1&lt;/td&gt;
2&lt;/tr&gt;   

rs.movenext
loop
rs.close
set rs=nothing

1&lt;tr&gt;
2&lt;td colspan="2"&gt;   

if instr(request.cookies("vote"),","&voteid&",")=0 then

1&lt;input name="Submit" type="submit" value="Vote"/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/form&gt;   

else

1&lt;font color="#FF0000"&gt;您已经投过票了&lt;/font&gt;   

end if

1
2&lt;/table&gt;
3&lt;br/&gt;
4&lt;a href="vote_list.asp"&gt;查看过往投票&lt;/a&gt; &lt;br/&gt;
5&lt;a href="vote_show.asp?voteid=```
6=voteid
7```"&gt;查看本投票的结果&lt;/a&gt;
8&lt;/body&gt;
9&lt;/html&gt;

后台管理页面admin_vote_list.asp

1'添加管理员权限在这里,这里为了大家应用方便,我没有加验证就直接允许进入
1&lt;html&gt;
2&lt;head&gt;
3&lt;title&gt;投票项目列表&lt;/title&gt;
4&lt;meta content="text/html; charset=utf-8" http-equiv="Content-Type"/&gt;
5&lt;link href="style.css" rel="stylesheet" type="text/css"/&gt;
6&lt;/head&gt;
7&lt;body&gt;   

'删除模块
dim action
action=request("action")
if action="del" then
Dim StrSQL1,StrSQL2
StrSQL1="delete from vote where voteid="&request("voteid")
conn.Execute StrSQL1
StrSQL2="delete from votetitle where voteid="&request("voteid")
conn.Execute StrSQL2
response.Redirect "?"
end if
'修改模块
'/////////////////////
'修改表单
if action="add" then

 1&lt;table bgcolor="#ffffff" border="1" bordercolor="#C0C0C0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%"&gt;
 2&lt;tr&gt;
 3&lt;td bgcolor="#EFEFEF"&gt;&lt;center&gt;   
 4添加新的投票&lt;/center&gt;&lt;/td&gt;
 5&lt;/tr&gt;
 6&lt;tr&gt;
 7&lt;td&gt;请输入这个投票所需要的选项个数。&lt;/td&gt;
 8&lt;/tr&gt;
 9&lt;tr&gt;
10&lt;td&gt;&lt;form action="?action=add1" method="post" name="form1"&gt;
11&lt;select name="num"&gt;   

for i1=2 to 10

1&lt;option value="```
2=i1
3```"&gt;```
4=i1
5```&lt;/option&gt;   

next

1&lt;/select&gt;
2&lt;input name="Submit" type="submit" value="Submit"/&gt;
3&lt;/form&gt;&lt;/td&gt;
4&lt;/tr&gt;
5&lt;/table&gt;   

end if
if action="add1" then
num=request("num")

 1&lt;table bgcolor="#ffffff" border="1" bordercolor="#C0C0C0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%"&gt;
 2&lt;tr&gt;
 3&lt;td bgcolor="#EFEFEF"&gt;&lt;center&gt;   
 4添加新的投票&lt;/center&gt;&lt;/td&gt;
 5&lt;/tr&gt;
 6&lt;tr&gt;
 7&lt;td&gt;请输入这个投票所需要的详细信息。&lt;/td&gt;
 8&lt;/tr&gt;
 9&lt;tr&gt;
10&lt;td&gt;&lt;form action="?action=add2" method="post" name="form2"&gt;   
11投票名称   
12&lt;input name="votetitle" type="text"/&gt;
13&lt;br/&gt;   

for i2=1 to num

1选项```
2=i2
3```&lt;input name="```
4=i2
5```" type="text"/&gt;&lt;br/&gt;   

next

1&lt;input ```"="" name="num" num")="" type="hidden" value="```
2=request("/&gt;
3&lt;input name="Submit2" type="submit" value="Submit"/&gt;
4&lt;input name="Submit3" type="reset" value="Reset"/&gt;
5&lt;/form&gt;&lt;/td&gt;
6&lt;/tr&gt;
7&lt;/table&gt;

end if
if action="add2" then
Set rs=Server.CreateObject("ADODB.Recordset")
sql="SELECT * FROM votetitle"
rs.Open sql,conn,1,3
rs.Addnew
rs("votetitle")=request("votetitle")
rs("time")=date()
rs.Update
rs.Close
set rs=conn.execute("select top 1 voteid from votetitle order by voteid desc")
voteid=rs("voteid")
rs.close
set rs=nothing
'//////////////
'/////////////循环
num=request("num")
for i3=1 to num
Set rs=Server.CreateObject("ADODB.Recordset")
sql="SELECT * FROM vote"
rs.Open sql,conn,1,3
rs.Addnew
rs("title")=request(i3)
rs("voteid")=voteid
rs.Update
rs.Close
next
'////////////循环结束
Set rs=Nothing
response.Write "成功添加,请返回"
end if
'修改表单结束
'////////////////////
'修改执行代码
'修改执行代码结束

if action="" then
set rs=conn.execute("select * from votetitle order by voteid desc")

1&lt;table bgcolor="#ffffff" border="1" bordercolor="#C0C0C0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%"&gt;
2&lt;tr&gt;
3&lt;td bgcolor="#EFEFEF" colspan="2"&gt;所有投票列表&lt;/td&gt;
4&lt;/tr&gt;   

do while not rs.eof

1&lt;tr&gt;
2&lt;td width="44%"&gt;编号:&lt;font color="#FF0000"&gt;```
3=rs("voteid")
4```  </font><a ```"="" href="vote.asp?voteid=```
5=rs(" target="_blank" voteid")="">```
6=rs("votetitle")

(``` =rs("time")

1&lt;td width="50%"&gt;【&lt;a ```"="" href="?action=del&amp;voteid=```
2=rs(" voteid")=""&gt;删除&lt;/a&gt;】&lt;/td&gt;
3&lt;/tr&gt;   

rs.movenext
loop
rs.close
set rs=nothing

1&lt;tr&gt;
2&lt;td colspan="2"&gt;【&lt;a href="?action=add"&gt;添加一个新的投票调查项目&lt;/a&gt;】&lt;/td&gt;
3&lt;/tr&gt;
4&lt;/table&gt;
5&lt;/body&gt;
6&lt;/html&gt;
1end if

最后显示效果如下:

Published At
Categories with Web编程
Tagged with
comments powered by Disqus