金魚屋簡易投票システム ver.1.2.0

 金魚屋の車輪の再開発シリーズ。

 修正時に分かりやすいように、HTML と設定、処理を別ファイルに分割。

Latest Version

HISTORY

1.2.0 2008-03-20
  • 修正時に分かりやすいように、HTML と設定、処理を別ファイルに分割。
1.1.0 2008-03-11
  • 割合を小数点の指定桁数で四捨五入して表示するよう修正。
1.0.2 2008-03-05
  • data.csv が空のときにエラーとなるバグを修正
  • ロックファイルの既定ファイル名を変更。Windows ユーザにも分かりやすく。
1.0.1 2008-03-04
  • Cookie 発行時に有効期限が正しく設定されないバグを修正
1.0.0 2008-03-03
  • リリース

はじめに

  • 以下あらゆる著作物の利用に関して著作者は一切の責任を負いません。
  • 以下あらゆる著作物の著作権は金魚屋ですが、とりたてて利用に制限はありません。
  • 利用にはHTML とPHP について多少の知識が必要です。
  • ツッコミ大歓迎。
  • 細かいところは解説しません。
  • 設定とか間違えるとエラー吐きます。
  • 入力値のチェックはあまり厳密じゃないです。
  • 割合は四捨五入。合計すると100% にならないことが多い。

「金魚屋簡易投票システム」とは

 Web サイトによくある超単純な投票の機能を提供するシステムのこと。

 投票データはCSV 形式で保存される。

 クッキーを利用して連続投票を回避。

動作確認
  • PHP Version 4.4.8

ファイル構成

  • ./index.php
  • ./initialize.php
  • ./simplevote.php
  • ./Kingyoya/SimpleVote.php
  • ./data.csv
  • ./error_log.txt
  • ./lock.txt
./index.php

 投票の結果表示と投票の受付をするCGI

 利用する際にはここのHTML を修正する。

http://www.kingyoya.org/etudes/2008/SimpleVote/1.2.0/index.php.txt

./initialize.php

 システムの動作設定ファイル。

 環境や利用に合わせて値を修正する。

 index.php と同じディレクトリに設置。

http://www.kingyoya.org/etudes/2008/SimpleVote/1.2.0/initialize.php.txt

./simplevote.php

 システムの動作実行ファイル。

 index.php と同じディレクトリに設置。

http://www.kingyoya.org/etudes/2008/SimpleVote/1.2.0/simplevote.php.txt

./Kingyoya/SimpleVote.php

 投票の保存と読み出し解析をするクラスファイル。

http://www.kingyoya.org/etudes/2008/SimpleVote/1.2.0/Kingyoya/SimpleVote.php.txt

./data.csv

 投票データを保存するCSV

./error_log.txt

 エラーのログが記録されるテキストファイル。

./lock.txt

 同時実行制御のためのロックファイル。

CSV の形式

  1. 投票先
  2. 投票元IP アドレス
  3. 投票日時

使い方

  1. 公開したい場所に上記のファイルを配置する。
  2. CSV やクラスファイルなどを隠したければ、見えないところに置いてスクリプトの定義を修正する。
  3. CSV ファイルとログファイルの書き込み権限をWeb サーバユーザに付与する。
  4. 適宜HTML を修正する。
表示するHTML を変えたい

 index.php の27 行目以降を修正する。

XHTML じゃなくてHTML で表示したい

 21 行目の以下の記述を削除して、HTML で書く。

echo '<?xml version="1.0" encoding="UTF-8" ?>';
'hoge' の投票割合を表示したい。

 表示したい場所に次のように書く。

<?php echo $votor->rate('hoge'); ?>

 少数点以下を四捨五入した割合が表示される。

'hoge' の投票割合を少数点2桁までで表示したい。

 表示したい場所に次のように書く。

<?php echo $votor->rate('hoge', 2); ?>

 少数点3桁以下を四捨五入した割合が表示される。

'fuga' の投票数を表示したい。

 表示したい場所に次のように書く。

<?php echo $votor->count('fuga'); ?>
投票総数を表示したい。

 表示したい場所に次のように書く。

<?php echo $votor->total(); ?>
CSV ファイルの場所や名称を変えたら

 initialize.php の28 行目、定数 DATA_FIILE の値 "./data.csv" を変更する。

ログファイルの場所や名称を変えたら

 initialize.php の50 行目、定数 ERROR_LOG_FILE の値 "./error_log.txt" を変更する。

そもそもログ出力を制御したくない

 initialize.php の50 行目の次の記述を削除するか、コメントアウトする。

define('ERROR_LOG_FILE', './error_log.txt');
ロックファイルの場所や名称を変えたら

 initialize.php の33 行目、定数 LOCK_FILE の値 "./lock.txt" を変更する。

クラスファイルの場所を変えたら

 initialize.php の48 行目、定数 CLASS_ROOT の値 "./Kingyoya" を変更する。

出力文字コードを変更したい

 initialize.php の23 行目、定数 OUTPUT_CHARSET の値 "utf8" を変更する。

連続投票回避クッキーの名前を変えたい

 initialize.php の44行目、定数 COOKIE_NAME の値 "voted" を変更する。

define('COOKIE_NAME', 'voted');
連続投票回避クッキーの有効期限を変更したい

 initialize.php の43 行目、定数 COOKIE_EXPIRE の値 24*60*60 を変更する。

define('COOKIE_NAME', 24*60*60);

 値は発行日時からの秒数。上記の例ではちょうど1日。

 ブラウザを閉じるまでだけ有効にしたい場合は、この定義を削除するか値を0にする。

Request for index.php

GET METHOD

 投票結果とフォームを表示する。

POST METHOD

 フォームからの投票を受け付けてCSV に登録する。

vote
投票先