簡易アンケート
タイトルは評価フォームとしたけど、コメントを書いたりとかの素敵機能は一切無しの、点数付けるだけのアンケート機能という感じ。
まぁコメントはコメントフォームがあるからね。MovableType標準の。

今回作ったのは、このエントリの下の方にもあるけど、

  1. エントリごとに5段階で評価したボタンをポチっと押したらカウントされて
  2. 各々の投票数を横棒グラフに表示して
  3. 合計ポイントを表示する
というもの。

準備
まず、任意のデータベースに適当なテーブルを作る。俺はアンケートってことでquestionnaireとした。

$ psql
=> CREATE TABLE questionnaire(
id varchar(128) not null,
a int not null,
b int not null,
c int not null,
d int not null,
e int not null
);
これは一つしか作らないのでわざわざスクリプト書いて作る必要も無いから、コンソールから直接コマンドで作っとく。

idには、エントリのURLの「https://blog.genkikko.net/YYYY/MM/****.php」の、「YYYY/MM/****」を「YYYY_MM_****」に変換して入れる。
たとえばこのエントリだと、「2008_03_php_2」になる。
これで、エントリごとにユニークな値を設定することが出来るので、エントリごとの投票を管理できる。

余談:MovableTypeが作ったデータベースを見てて後から気づいたんだが、年月ごとのディレクトリ部分を除いたファイル名****の部分だけでユニークになってるようで、実はこれで管理できるみたい。既に投稿があるから変更するのはめんどいので、少し処理はかさばるけど新しく作るとき以外に改善する予定はなし。

ソース
うちで動いてるのは、こちら。
questionnaire.php
これを、エントリ内にincludeしてやる。
・配列$ratioは、各項目の点数。悪い評価にはマイナス点を。
・$this_scriptはインクルード元のphpファイルの絶対パス。$_SERVER['PHP_SELF']では、エントリそのもののファイル名を取得してしまってややこしいことになるので。
・130行目あたりの「POSTデータがidのみの場合、そのまま転送」のとこは、入力フォームがラジオボタンだったときの名残。今は不要。
・150行目あたりの「//グラフの幅を決める。」というのは、投票数が多くなってきたときにグラフの横幅が大きくなりすぎるのを防ぐ目的。必要になるのかどうか分からない。

ちなみに、これをincludeするとこで検索サイトのロボットのときはincludeしないようにしてるので、googleなど検索サイトのキャッシュにはこれは表示されてない。