« Perl で埋め込み SQL を使って楽をする話 | メイン | C++ テンプレートで(いまさら)FizzBuzz »
2008年04月17日
Filter::SQL を使って掲示板を書いてみました
必要最小限、見た目無視です。動作確認は Filter::SQL 0.05 で行いました。
#! /usr/bin/perl use strict; use warnings; use CGI qw/escapeHTML/; use DBI; use Filter::SQL; use POSIX qw/strftime/; # SQLite に接続 Filter::SQL->dbh(DBI->connect( 'dbi:SQLite:dbname=/tmp/bbs.db', )) or die DBI->errstr; { # テーブル作成 (既存の場合はエラーを無視して継続) local Filter::SQL->dbh->{PrintError}; EXEC CREATE TABLE bbs ( id INTEGER NOT NULL PRIMARY KEY, name NOT NULL, at NOT NULL, text NOT NULL );; } my $q = CGI->new; # POST だったら入力を保存 if ($q->request_method eq 'POST') { print_html("エラー: 空文字列です\n") unless $q->param('name') && $q->param('text'); unless (INSERT INTO bbs (name, at, text) VALUES ($q->param('name'), {time}, $q->param('text'));) { print_html("登録に失敗しました\n"); } } # 一覧を出力 my $html = <<'EOT'; <form method="POST"> Name: <input name="name"><br> Text: <textarea name="text" cols="40" rows="10"></textarea><br> <input type="submit" value="送信"> </form> EOT foreach my $row (SELECT name,at,text FROM bbs ORDER BY id DESC;) { $html .= sprintf( "<hr>\n%s (%s)<br>%s\n", escapeHTML($row->[0]), escapeHTML(strftime '%Y/%m/%d %H:%M:%S', localtime($row->[1])), escapeHTML($row->[2]), ); } print_html($html); sub print_html { my $str = shift; print "Content-Type: text/html; charset=utf-8\n\n$str"; exit 0; }
投稿者 kazuho : 2008年04月17日 16:43
トラックバック
このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1862