#!/usr/local/bin/perl ;# WebVOTE v3.6 is Free. (c)rescue.ne.jp ;# Scripts Found at: http://www.rescue.ne.jp/ # History # v3.2 29-Aug-98 浮動小数点(小数点1桁固定小数点形式)処理 # v3.3 06-Sep-98 投票方式およびグラフ処理の変更 # v3.4 07-Jul-99 小数点以下処理のバグ修正 # v3.5 23-Dec-99 2000年対応 # v3.6 22-Apr-02 グラフのサイズが0になった場合に異常表示される不具合の修正(Netscape 4.7x) #初期設定 ########################################################################################### #●日本語コード変換ライブラリの指定(別に用意します) require './jcode.pl'; #●設置したURL(http://から正しく記入します) $cgi = 'http://設置したURL/vote.cgi'; #●データを記録するファイル $an_file = "./vote.dat"; #●画像バーのURL(このCGIから見たパス位置、または http:// から書く) $gif = './bar.gif'; #●画面設定 $body = '
'; #●バータイトル $title = '投票'; #●画面冒頭に入れる画面(HTML式) $an_title = '
';
#●クッキーを使った簡易2重投稿防止処理をする=1 しない=0
$wck = 1;
#●アンケートファイルが大きくなりすぎないようにする為の最大アンケート可能件数の設定
# ソート処理を扱うために大きなデータファイルはサーバに多大な負荷を与えてしまいます.
# それを防止するために記録件数の上限を設定してください. 1000以下のご利用が推奨です.
$rescue = 1000;
#●入力処理方式 標準:post 直接:get
$method = 'post';
###########################################################################################
#時刻取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
$month = ($mon + 1);
#データ記録用時刻フォーマット
$date = "$hour\:$min\:$sec $month\:$mday\:$year";
#現在時刻表示用
$date_now = "$year年$month月$mday日 $hour時$min分$sec秒";
#データ入力
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
#処理
if ($buffer eq "") { &html_header; &html_form; &html_trailer; }
else { $tnx = "1"; &an_w; &html_header; &html_trailer; }
sub html_header {
if (!open(DB,"$an_file")) { &error('エラー','データファイルを読み出せません.'); }
@lines = \n";
print "全投票数:$accesses 有効回答数(白票以外):$i \n";
print " \n";
print "・$date_now 現在のアンケート集計結果です。 \n";
}
}
sub html_trailer {
print " \n";
if ($tnx eq "1") { print " \n";
}
sub an_w {
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
$value =~ s/</g;
$value =~ s/>/>/g;
if ($name ne "write") { $FORM{$name} = $value; }
}
if ($FORM{'an'} ne "" && $FORM{'an2'} ne "") { $write = ""; }
elsif ($FORM{'an'} ne "") { $write = $FORM{'an'}; }
elsif ($FORM{'an2'} ne "") { $write = $FORM{'an2'}; }
#重複チェックへ
if ($wck) { &wcheck; }
if (!open(LOG,"$an_file")) { &error('エラー','データファイルを読み出せません.'); }
@lines=\n";
if ($tnx ne "1") { print "
\n"; }
else { print "項目名 選択数 投票 割合 グラフ \n"; }
foreach (sort { $ans{$b} <=> $ans{$a} } keys %ans) {
print "項目名 選択数 割合 グラフ \n";
$total_ans += $ans{$_};
$percent_ans = 100 * ($ans{$_} / $i);
$percent_ans = sprintf("%2.1f",$percent_ans);
$img = int($percent_ans) * 3 + 1;
if ($tnx ne "1") {
print "\n";
}
else { print " \n";
}
print "$_ $ans{$_} $percent_ans\% \n"; }
print "
\n";
if ($first_date != 0 && $last_date != 0) {
print "・これらは[$first_date]から[$last_date]までの集計結果です。
\n";
print "・最大アンケート集計件数: $rescue 件分(これを超えると最新の$rescue件分の集計になります)ありがとうございました。
\n"; }
#著作表示(削除禁止)
print "
\n";
print "\n";
}
sub html_form {
print "
WebVOTE$_[0]
\n";
print "$_[1]\n";
print '