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

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

 即行でバグ発見。クッキー発行にミスってた。

Latest Version

  • 1.0.1

はじめに

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

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

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

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

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

動作確認
  • PHP Version 4.4.8

ファイル構成

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

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

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

./Kingyoya/SimpleVote.php

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

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

./data.csv

 投票データを保存するCSV

./error_log.txt

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

./.lock

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

CSV の形式

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

使い方

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 index.php の31行目、定数 LOCK_FILE の値 "./.lock" を変更する。

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

 index.php の20行目のrequire_once の値 "./Kingyoya/SimpleVote.php" を変更する。

文字コードとか変更したい

 15行目からの以下の記述を環境にあわせて変更する。

mb_language('Japanese');
mb_internal_encoding('utf8');
mb_http_output('utf8');
ob_start('mb_output_handler');
連続投票回避クッキーの名前を変えたい

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

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

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

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

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

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

フォームと結果を別々のURL で表示したい
入力値をもっと厳密に評価したい

 好きにしてください。

Request for index.php

GET METHOD

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

POST METHOD

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

vote
投票先