数か月前、JS+VML を使用してネチズン lshdic が書いた記事「Vml を使用して 3 次元縦棒投票チャートを作成する完全なプログラム」を目にしました。
画像を使わずに統計グラフを生成できるこの方法はとても良いと思います。では、このプログラムを ASP を使って実装してみましょう。
準備: ACCESS を使用して vote.mdb という名前の MDB データベースを作成し、データベース内に次の 2 つのテーブルを作成します。
次に、ASP 開発の規則に従って、データベースに接続するファイル conn.asp を作成します。
<%
'conn.asp
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("vote.mdb")
%>
作成したいのはマルチプロジェクト投票システムであるため、投票プロジェクトのリストを表示します vote_list.asp
<!--#include file="conn.asp"-->
<html>
<頭>
<title>投票項目一覧</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="../images/main.css" rel="stylesheet" type="text/css">
</head>
<%
set rs=conn.execute("select * from votetitle order by voteid desc")
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="0" bgcolor="#ffffff" bordercolor="#000000" width=100%>
<tr>
<td bgcolor="#EFEFEF">すべての投票リスト</td>
</tr>
<%do ながら rs.eof%>
<tr>
<td>番号:<font color="#FF0000"><%=rs("voteid")%> </font><a href="vote.asp?voteid=<%=rs("voteid") )%>" target="_blank"><%=rs("votetitle")%>
</a>(<%=rs("time")%>)</td>
</tr>
<%rs.movenext
ループ
rs.close
rs=何も設定しない%>
</テーブル>
</body>
</html>
投票表示ページ vote_show.asp
<%if request("voteid")="" then
response.write "パラメータが指定されていませんでした。"
応答.End()
%> の場合に終了
<!--#include file="conn.asp"-->
<html>
<頭>
<title>結果を表示</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<スタイル>
td{font-size:12px}
本文{font-size:12px}
v:*{behavior:url(#default#VML);} //v はここで VML パブリック変数として宣言されています
</スタイル>
<link href="../images/main.css" rel="stylesheet" type="text/css">
</head>
<%
薄暗い
投票ID=リクエスト("投票ID")
set rs=conn.execute("votetitle.voteid="&voteid&" および vote.voteid=votetitle.voteid を ID 順に並べた、vote,votetitle からカウントを選択します")
iii=0
rs.eof ではないときに実行します
ii=ii+1
ii=1 の場合
ceocio=trim(rs("カウント"))
ceocio1=trim("array1["&iii&"]")
それ以外
ceocio=trim(ceocio&","&rs("カウント"))
ceocio1=trim(ceocio1&"+array1["&iii&"]")
終了する場合
iii=iii+1
rs.movenext
ループ
rs.close
rs=何も設定しない
'response.write ii
'response.write ceocio1
%>
<スクリプト>
array1=new Array(<%=ceocio%>) //異なる投票数
allstr=<%=ceocio1%>
//アラート(allstr)
//allstr=array1[0]+array1[1]+array1[2]+array1[3]+array1[4]+array1[5] //合計数を取得
for(i=0;i<=<%=(ii-1)%>;i++){
mathstr=Math.round(100/(allstr/array1[i])) //パーセンテージを求めます、100/(sum/single)
document.write ("<v:rect fillcolor='lime' style='width:20;color:navy;height:"+500*<%=(ii-1)%>/(1000/mathstr)+"' ><br> %"+mathstr+"<br>"+array1[i]+"人<v:Extrusion back Depth='15pt' on='true'/></v:rect>")
}
</script>
<%
投票ID=リクエスト("投票ID")
set rs=conn.execute("select * from vote,votetitle where votetitle.voteid="&voteid&" and vote.voteid=votetitle.voteid order by id")
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="2" bgcolor="#ffffff" bordercolor="#000000" width=100%>
<tr>
<td bgcolor="#EFEFEF">検索結果:<font color="#FF0000"><%=rs("votetitle")%></font>:<br>
合計<b><font color="#FF0000"><%=rs("total")%></font></b> がアンケートに参加しました<br>
(<%=rs("time")%>~<%=date%>)</td>
</tr>
<%do rs.eof ではない
ディミ
i=i+1%>
<tr>
<td>オプション<%=i%>:<%=rs("title")%> <font color="#FF0000"><%=rs("count")%>人< /font></td>
</tr>
<%rs.movenext
ループ
rs.close
rs=何も設定しない%>
<tr>
<td> </td>
</tr>
</テーブル>
<br>
<a href="vote_list.asp">過去の投票を表示</a> <br>
<a href="vote.asp?voteid=<%=request("voteid")%>">このプロジェクトに投票する</a>
</body>
</html>
投票.asp
<!--#include file="conn.asp"-->
<%if request("voteid")="" then
set rs=conn.execute("voteid の説明による votetitle 順序から上位 1 の voteid を選択")
投票ID=rs("投票ID")
rs.close
rs=何も設定しない
それ以外
投票ID=リクエスト("投票ID")
%> の場合に終了
<html>
<頭>
<title>無題のドキュメント</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<%
request("action")="投票" の場合
'ID 1 の投票と ID 11 の投票を混同しないように、「,」&request("voteid")"," を追加します
if instr(request.cookies("vote"),","&request("voteid")&",")=0 then
それ以外
response.write "あなたはすでに投票しています"
応答.終了
終了する場合
sql="更新 [投票] set count=count+1 where id="&request("votevalue")
conn.execute(SQL)
sql="update [votetitle] set total=total+1 where voteid="&request("voteid")
conn.execute(SQL)
' Cookie の有効期間の書き込み
Response.Cookies("投票").Expires=日付+1
「投票されたすべてのオプションを「,」で区切って Cookie に記録します。
Response.Cookies("vote")=","&Request.Cookies("vote")&","&Request("voteid")&","
投票ID=リクエスト("投票ID")
「基本に戻る」
response.redirect "vote_show.asp?voteid="&voteid"
終了する場合
%>
<%
「薄暗い投票者」
'voteid=リクエスト("投票id")
set rs=conn.execute("select * from vote,votetitle where votetitle.voteid="&voteid&" and vote.voteid=votetitle.voteid order by id")
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="0" bgcolor="#ffffff" bordercolor="#C0C0C0" width=100%>
<tr>
<td colspan="2" bgcolor="#EFEFEF">調査: <%=rs("votetitle")%>(<%=rs("time")%>)</td>
</tr><form name="form1" method="post" action="vote.asp?action=vote&voteid=<%=voteid%>">
<%do rs.eof ではない
ディミ
i=i+1%>
<tr>
<tdcolspan="2">
<input type="radio" name="votevalue" value="<%=rs("id")%>" <%if i=1 then%>チェック済み<%end if%>>
<%=rs("タイトル")%>
</td>
</tr>
<%rs.movenext
ループ
rs.close
rs=何も設定しない%>
<tr>
<tdcolspan="2">
<%if instr(request.cookies("vote"),","&voteid&",")=0 then%>
<input type="submit" name="送信" value="投票"></form>
<%else%>
<font color="#FF0000">あなたはすでに投票しました</font>
<%end if%></td>
</tr>
</テーブル>
<br>
<a href="vote_list.asp">過去の投票を表示</a> <br>
<a href="vote_show.asp?voteid=<%=voteid%>">この投票結果を見る</a>
</body>
</html>
バックエンド管理ページ admin_vote_list.asp
<!--#include file="conn.asp"-->
<%'ここに管理者権限を追加します。皆様の便宜のため、検証なしで直接アクセスを許可します%>
<html>
<頭>
<title>投票項目一覧</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<%
'モジュールの削除
薄暗いアクション
アクション=リクエスト("アクション")
action="del" の場合
DimStrSQL1,StrSQL2
StrSQL1="投票から削除 where voteid="&request("voteid")
conn.StrSQL1 を実行する
StrSQL2="votetitle where voteid="&request("voteid") から削除
conn.StrSQL2の実行
応答。リダイレクト「?」
終了する場合
'モジュールを変更する
'//////////////////////
'フォームを変更する
アクション = "追加" の場合
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="0" bgcolor="#ffffff" bordercolor="#C0C0C0" width=100%>
<tr>
<td bgcolor="#EFEFEF"><センター>
新しい投票を追加</center></td>
</tr>
<tr>
<td>この投票に必要なオプションの数を入力してください。 </td>
</tr>
<tr>
<td><form name="form1" method="post" action="?action=add1">
<select name="num">
<%for i1=2 ~ 10%>
<option value="<%=i1%>"><%=i1%></option>
<%next%>
</選択>
<input type="submit" name="submit" value="submit">
</form></td>
</tr>
</テーブル>
<%
終了する場合
アクション = "追加 1" の場合
num=リクエスト("番号")
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="0" bgcolor="#ffffff" bordercolor="#C0C0C0" width=100%>
<tr>
<td bgcolor="#EFEFEF"><センター>
新しい投票を追加</center></td>
</tr>
<tr>
<td>この投票に必要な詳細を入力してください。 </td>
</tr>
<tr>
<td><フォーム名="form2" メソッド="ポスト" アクション="?action=add2">
投票名
<input type="text" name="votetitle">
<br>
<%for i2=1 ~ num%>
オプション<%=i2%><input type="text" name="<%=i2%>"><br>
<%next%>
<input type="hidden" name="num" value="<%=request("num")%>">
<input type="submit" name="Submit2" value="Submit">
<input type="reset" name="Submit3" value="Reset">
</form></td>
</tr>
</table>
<%end if
action="add2" の場合
Set rs=Server.CreateObject("ADODB.Recordset")
sql="SELECT * FROM 投票タイトル"
rs.SQL、conn、1、3を開く
rs.追加新規
rs("投票タイトル")=リクエスト("投票タイトル")
rs("時刻")=日付()
rs.アップデート
rs.閉じる
set rs=conn.execute("voteid の説明による votetitle 順序から上位 1 の voteid を選択")
投票ID=rs("投票ID")
rs.close
rs=何も設定しない
'///////////////
'/////////////サイクル
num=リクエスト("番号")
for i3=1 から num
Set rs=Server.CreateObject("ADODB.Recordset")
sql="SELECT * FROM 投票"
rs.SQL、conn、1、3を開く
rs.追加新規
rs("タイトル")=リクエスト(i3)
rs("投票ID")=投票ID
rs.アップデート
rs.閉じる
次
'////////////ループの終了
rs=何も設定しない
response.Write "<a href=admin_vote_list.asp>正常に追加されました。戻ってください</a>"
終了する場合
'変更フォームの終了
'/////////////////////
'実行コードを修正する
'実行コードの修正終了
%>
<%if action="" then
set rs=conn.execute("select * from votetitle order by voteid desc")
%>
<table border=1 cellpacing="0" style="border-collapse: Collapse" cellpadding="0" bgcolor="#ffffff" bordercolor="#C0C0C0" width=100%>
<tr>
<tdcolspan="2" bgcolor="#EFEFEF">すべての投票リスト</td>
</tr>
<%do ながら rs.eof%>
<tr>
<td width="44%">番号: <font color="#FF0000"><%=rs("voteid")%></font><a href="vote.asp?voteid=<% =rs("voteid")%>" target="_blank"><%=rs("votetitle")%>
</a>(<%=rs("time")%>)</td>
<td width="50%">【<a href="?action=del&voteid=<%=rs("voteid")%>">削除</a>]</td>
</tr>
<%rs.movenext
ループ
rs.close
rs=何も設定しない%>
<tr>
<td Colspan="2">[<a href="?action=add">新しいアンケートを追加</a>]</td>
</tr>
</テーブル>
</body>
</html>
<%end if%>
最終的な表示効果は次のとおりです。