[道里千虎の館]
◆ SDmultivote 説明書
(c) Sentora Dori 2001/01/24
■ 仕様
注意:
このプログラムを利用した結果おこるいかなるトラブルに対しても、当方では対処しませんので、各ユーザーの責任でご使用ください。
また、予告なく変更することがありますので、ご了承ください。
■ index
■ 機能
CGIを用いた複数投票式のアンケートプログラムです。
あらかじめ用意したHTMLファイルに、入力フォームとアンケート結果を挿入することによってアンケートを実現しますので、アンケートページの自由なデザインが可能です。
管理用プログラムがついているので、不適切な項目を削除することもできます。
- 複数のアンケートを一つのプログラムで実現。
- 複数投票式で、新規項目追加可能。自由に言葉を入れて投票してもらえます。
- 入力フォームを表示しなければ通常の投票式アンケートになります。
- 設問が多い場合でも複数ページに分けて表示可能
- 項目の投票時間、投票者のIPアドレスのログをとる。
- 管理用プログラムで、アンケート結果の削除、修正、新規項目追加が可能。
[index]
■ ソース
プログラム
(ダウンロード後、ファイル名が"-cgi.txt"、"-pl.txt"となってるものを".cgi"、".pl"に変更してください)
[index]
■ インストール
- ソースから必要なファイルをダウンロードする。
SDシリーズのパスワード作成、管理プログラムを持っていない場合は、「道里千虎のソフト」トップページからそれもダウンロードする。
- SDmultivote.cgi と SDmultivman.cgi の最上部のPerlのパスを正しく設定する。
(例) #!/usr/local/bin/perl
※ PerlのパスはUNIXの種類やサーバによって異なりますので、わからない場合はサーバの管理者に問い合わせてください。
- SDmultivote.cgi の上部にある「変数設定」部分を編集する。
(赤色で示した変数以外は、特に必要がないかぎり変更しなくて大丈夫です。)
- $databasedir .....
アンケートデータファイルをおくディレクトリのパス(※注1)
- $htmlbasedir
..... HTMLファイルをおくディレクトリのパス(※注1)
- $baseinputtag
..... 入力フォームを挿入する場所を示すタグのベース(※注2)
- $baseresulttag
..... アンケート結果を挿入する場所を示すタグのベース(※注2)
- $maxlength
..... 新しく入力される項目の最大の長さ
- $tableborder
..... テーブルの枠線の太さ
- $tablecolor
..... テーブルの背景色
- $takelog
..... 1: ログをとる 0:とらない(※注3)
- $method ..... フォーム内容の送信方法(※注4)
- $uselock ..... ファイルロックの方法を指定する (通常は変更必要なし)
2: flockを使用する 1: ロックファイルでロックする 0: ロックしない
- $kanjicode ..... 漢字コード(sjis or jis or euc)(初期設定はsjis)(※注5)
※注1 プログラムと同じ場所に置く場合は $basedir=".";のまま。
※注2 $baseinputtag が 'INPUT'、 $baseresulttag が
'RESULT' の場合HTMLファイル内に<INPUT1>,<INPUT2>・・・と記述した個所に入力フォームが、<RESULT1>,<RESULT2>・・・と記述した個所にアンケート結果が挿入されます。
詳細は、HTMLファイルの作成を参照
※注3 ログをとる場合は$takelogを1に設定してください。0に設定するとログはとりません。とるログは投票されたアンケート番号とその項目の内容、投票時間、投票者のIPアドレスです。
※注4 'post' が使えないところでは 'get'
に変えてください。
※注5 文字化けする場合はコードを変えてください。
- SDmultivman.cgi の上部にある「変数設定」部分を編集する。
(SDmultivote.cgiと同じ項目については省略。)
(赤色で示した変数以外は、特に必要がないかぎり変更しなくて大丈夫です。)
- $databasedir .....
アンケートデータファイルをおくディレクトリのパス(※注1)
- $passfiledir
..... パスワードファイルをおくディレクトリのパス(※注1)
- $passfile
..... パスワードファイル名(※注2)
- $pass
..... 優先パスワード(※注2)
※注1 プログラムと同じ場所に置く場合は $basedir=".";のまま。パスワードファイルは暗号化されてはいますが、セキュリティのために、外部からアクセスできないディレクトリにおくことをおすすめします。
※注2 $pass
にパスワードを指定した場合は、そのパスワードが入力パスワードとの比較に用いられます。指定しない場合には、$passfiledir
にある $passfile
からパスワードを検出し比較に用いられます。
ここにパスワードを指定していると、もしCGIプログラムファイルを閲覧させられたときにパスワードが他人にわかってしまうので、ここでは指定せずパスワードファイルを使用することをおすすめします。ここの指定はあくまでも緊急用と考えてください。
- SDmultivote.cgi, SDmultivman.cgi, jcode.pl を FTPのアスキーモードで転送し、CGIの使用できるディレクトリに置く(※注)。パーミッションをそれぞれ755、755、644にする。
(telnetの場合、以下同様。)
% chmod 755 SDmultivote.cgi
% chmod 755 SDmultivman.cgi
% chmod 644 jcode.pl
※注
CGIの使用ディレクトリはサーバによって異なりますので、わからない場合はサーバの管理者に問い合わせてください。(通常は
cgi-bin 以下のディレクトリであることが多い。)
- ブラウザからSDmultivote.cgiにアクセスする。
→ [no data file]と表示されたらインストール完了。
CGIプログラムの拡張子に「pl」など別のものを指定されているサーバでは、拡張子をそれに合わせて変更して下さい。(SDmultivote.cgi
を SDmultivote.pl に変更する。)
[index]
- まずHTMLファイルを作成します。アンケートの説明や設問などを書く。
設問が多い場合には複数のHTMLファイルに分けて別々のページに表示させる。
ファイル名はわかりやすくするために番号を振った名前をつけると良いでしょう。
例えば、ここでは、test1.html, test2.html
を作成します。
様式は自由ですが、入力フォームとアンケート結果を表示できる場所をあけておいてください。
※入力フォームとは、新規項目を入力してもらうためのフォームです。
- 複数のHTMLファイルにわけた場合は、次のページへのリンクを次のように書く。
(詳細はリンクの書き方を参照)
(例: アンケート名testで次のページはtest2.html、設問3から設問4までを表示)
<A HREF="multivote.cgi?test&test2.html&3&4">次へ進む</A>
- HTMLファイル内に、入力フォームとアンケート結果を挿入する場所を示すためのタグを書く。
書くタグはインストール時に設定する、SDmultivote.cgi
の「変数設定」部分の、変数 $baseinputtag と $baseresulttag
によって決まる。
デフォルトでは、$baseinputtag が 'INPUT'、 $baseresulttag が
'RESULT'
となっているので、設問1の入力フォームの個所には <INPUT1>
と書き、アンケート結果を表示させる個所には <RESULT1>
と書きます。同じく設問2には、<INPUT2>,<RESULT2>
、設問3には、<INPUT3>,<RESULT3>
と書きます。以下同様です。
※
投票してもらうだけのアンケートの場合は、入力フォームが必要ないので、<RESULT*>は書かず<INPUT*>のみ書いてください。
※ 2.と3.については、例として test1.html, test2.html
を参照してください。
- 新しいアンケートの名前を決める。例えば test
とする。複数のアンケートを使用する場合は重複しないように名前をつけてください。
*使用できる文字は英数字のみです。他の記号は使えません。
- アンケートデータを保存するための test.txt という空ファイルを作る。それを$basedirで指定したディレクトリ($basedir=".";の場合は
SDmultivote.cgi
と同じディレクトリ)におく。パーミッションを 666 に設定する。
(telnetの場合)
% touch test.txt
% chmod 666 test.txt.
※
ここで空ファイルを作らない場合でも、管理プログラムで自動的にファイルを生成できますが、ファイル所有者がnobodyになってしまうので、面倒でも自分で作ることをおすすめします。
- ログをとる場合には、ログデータを保存するための test.log
という空ファイルを作る。それを$basedirで指定したディレクトリ($basedir=".";の場合は
SDcountH**.cgi
と同じディレクトリ)におく。パーミッションを 666 に設定する。
*すでに機能しているアンケートで、ログをとっておらず新たにログをとりたいときには、必ずログファイルを作成してください。
(telnetの場合)
% touch test.log
% chmod 666 test.log.
- SDシリーズパスワード作成プログラムで、アンケート管理に必要となるパスワードを作成する。
プログラム名は enquete とする。
(SDmultivman.cgi
の上部にもプログラム名が書かれています。)
* すでに作成してある場合には7.をとばしてください。
※ SDシリーズパスワード作成プログラムについては、リンク先の説明をご覧ください。
- アンケート管理プログラム SDmultivman.cgi
にアクセスし、パスワードを入力して「送信」ボタンを押す。
- 「新規アンケート作成」欄に、4.で決めたアンケート名と、アンケートのタイトルを書き「作成」ボタンを押す。
※ アンケートのタイトルはアンケートデータファイルの最上部に記述されます。
- 最初から選択肢を書いておきたい場合は、「新規項目追加」欄に、アンケート番号(設問の番号)と項目の内容を入力し、「追加」ボタンを押す。
- HTMLファイルから、アンケートプログラム SDmultivote.cgi
にアクセスするためのリンクを書く。
リンクの書き方
<A HREF="multivote.cgi?(1)&(2)&(3)&(4)">アンケートテスト</A>
- (1) ... アンケート名 (必須)
- (2) ... 設問などを書いたHTMLファイル名 (拡張子まで入れる) (必須)
- (3) ...
ページに表示するアンケートの最初の設問番号
指定しないと1になる。
- (4) ...
ページに表示するアンケートの最後の設問番号
指定しないとアンケートデータにあるアンケートの数になる。
(例: アンケート名testで最初のページはtest1.html、設問1から設問2までを表示)
<A HREF="multivote.cgi?test&test1.html&1&2">アンケートテスト</A>
以上で完了です。アンケートをさらに追加するには、1.からの操作を繰り返してください。
[index]
■管理用プログラムの使い方
初めて使用するときは、まずSDシリーズパスワード作成プログラムで、アンケート管理に必要となるパスワードを作成します。プログラム名は enquete
とします。
アンケート管理プログラム SDmultivman.cgi
にアクセスし、パスワードを入力して「送信」ボタンを押します。
「アンケート結果表示」欄にアンケート名を入力し「表示」ボタンを押します。
アンケートのタイトルと、それぞれの設問の結果が表示されます。
アンケート番号とは、設問の番号のことです。(はじめを1とする。)
項目番号は削除、編集するときに指定する番号のことです。
●新規項目追加
「新規項目追加」欄にアンケート番号と新しい項目を入力し「追加」ボタンを押します。
各結果の最後尾に新規項目がつけ加わります。
●項目の削除
「項目の削除」欄にアンケート番号と項目番号を入力し「削除」ボタンを押します。
削除してしまうと元に戻せないので注意してください。
●項目の編集
「項目の編集」欄にアンケート番号と項目番号を入力します。
さらに、内容と票数のどちらか、または両方を入力し「編集」ボタンを押します。
入力したものが変更されます。
※
票数を変更すると、その数字にあわせて結果が大きい順に並び替えられますので、続けて編集する場合には、項目番号に注意してください。
●新規アンケート作成
アンケートを新しく作成するときには、「新規アンケート作成」欄にアンケート名とタイトルを入力し「作成」ボタンを押します。
アンケートデータとなる空ファイルを作成してあれば、アンケートのタイトルがファイルの最上段に記述されます。
空ファイルを作成していないときは、自動的にアンケートデータファイルが生成されますが、この場合、UNIXではファイル所有者はnobodyになり、あなたがファイルのパーミッションを変更したりできなくなります。どうしても所有者を自分にしたい場合は、ファイルを別名にコピーし、元ファイルを消した後に、コピーしたファイルの名前を変更して元の名前に戻してください。
[index]
SDmultivote.cgi
の「変数設定」部分の、変数 $takelog
を1に設定してあれば、 (アンケート名).log
というファイルにログをとります。
とるログは、アンケート番号、項目の内容、票数、投票時間、投票者のIPアドレス、ドメイン名で、この順番にカンマで区切られています。
(ログファイルの例)
1,大工,1,2000-1-15 10:32:11,192.168.0.0,sentora.dori.co.jp
1,主婦,4,2000-1-15 09:45:34,192.168.0.1,guru.meri.co.jp
2,セロリ,3,2000-1-15 08:10:09,1.2.3.4,yeah.bye.com
※
ログデータはほうっておくとどんどん大きくなっていくので、区切りのいいところを見つけて、削除するなり他のファイルにカット&ペーストするなりしてください。
※
ドメイン名は取得できないこともあります。(環境変数に入っていない場合でも、IPアドレスから取得を試みていますが、それでもプロキシを通していると取得できないものもあります。)
[index]
(アンケート名).txt
というファイルにアンケート結果が格納されます。
最上段にアンケートタイトルが入り、以下がアンケート結果です。
それぞれのアンケート結果は「---nextenq---」
という識別子によって区切られています。
項目名と票数はカンマで区切られているので、データベースソフトなどでCSV形式で読み込むことができます。必要な部分だけカット&ペーストして別ファイルにコピーし、拡張子を.CSVにしてセーブしてから読み込んでください。
(アンケートデータの例)
練習
主婦,3
大学生,2
会社員,1
---nextenq---
ごはん,4
卵,4
キャベツ,3
---nextenq---
雨,2
くもり,2
晴れ,2
---nextenq---
いいえ,5
はい,4
[index]
■ Q&A
Q1: アンケートが表示されない。
- 各ファイルのパーミッションは合っていますか。
| アンケート本体 |
SDmultivote.cgi |
755 |
|
| 管理用プログラム |
SDmultivman.cgi |
755 |
|
| 日本語処理用ライブラリ |
jcode.pl |
644 |
|
| アンケートデータ |
(アンケート名).txt |
666 |
|
| ログデータ |
(アンケート名).log |
666 |
|
- SDmultivote.cgi と SDmultivman.cgi の最上部のPerlのパスが正しく設定されていますか。
(例) #!/usr/local/bin/perl
- アンケートデータ アンケート名).txt
は本体プログラム SDmultivote.cgi の
$databasedir
で指定されたディレクトリに置かれていますか。
- HTMLファイルから、アンケートプログラム SDmultivote.cgi
にアクセスするときのリンクの書き方はあっていますか。
(例: アンケート名testで最初のページはtest1.html、設問1から設問2までを表示)
<A HREF="multivote.cgi?test&test1.html&1&2">アンケートテスト</A>
- HTMLファイル内に、入力フォームとアンケート結果を入れるためのタグが正しく書かれていますか。
デフォルトでは、$baseinputtag が 'INPUT'、 $baseresulttag が
'RESULT'
となっているので、設問1の入力フォームの個所には <INPUT1>
と書き、アンケート結果を表示させる個所には <RESULT1>
と書きます。同じく設問2には、<INPUT2>,<RESULT2>
、設問3には、<INPUT3>,<RESULT3>
と書きます。
Q2: アンケートに書き込めない。
- 各ファイルのパーミッションは合っていますか。
- ファイルロックエラーの可能性があります。
初期設定ではflockを用いていますが、エラーが出る場合は、本体プログラム
SDmultivote.cgi の
$uselock を1に変更してください。ロックファイルによるロック方式を用います。
それでもエラーが出る場合は、 SDmultivote.cgi の
$uselock を0に変更してください。この場合、ファイルロックは行いませんので、アンケートデータファイルまたはログファイルが壊れるおそれがありますが、投票数が少ないページでしたらたぶん大丈夫でしょう。
Q3: 管理用プログラムがうまく実行できない。
- パスワードファイルは管理用プログラム SDmultivman.cgi の
$passfiledir
で指定されたディレクトリに置かれていますか。
- SDシリーズパスワード作成プログラムで、アンケート管理に必要となるパスワードを作成していますか。プログラム名は enquete
です。
その他
CGIを使用できる環境にありますか。(プログラムを置くディレクトリ、プログラムの拡張子など。)
※
本体プログラムをCGIの使用できる場所に正しく置き、本説明書どおりに使用しても問題がおこる場合は、掲示板に書き込むか道里千虎あてにメールをください。
[index]
■ 更新履歴
- 01/01/25 公表開始
- 01/01/22 管理用プログラム作成
- 01/01/09 Ver.1.00 完成、「21世紀アンケート」で試用