PHP と SQLite を使った掲示板

メッセージ:

番号日時メッセージ
332012-02-07 16:59:52kikioo
322011-11-10 20:50:24'
312011-07-28 20:04:37<p>あかさなはやらまたあ</p>
302011-07-18 09:08:22igufy
292011-07-18 09:08:14ugu
282011-07-18 00:02:44昨今のスマートフォンにより、通信量が多くなる傾向にある。 無料ブログは、特にPCサイトは画像があり、おもくなる。 低速通信でも、軽量化することで、見かけの速度を上げることができる。
272011-07-17 23:56:42テストにだ。
262011-06-22 18:45:06set
252011-06-22 15:45:17de
242011-06-18 14:18:29ん?
232011-06-18 14:15:47kanzilyou
222011-06-16 22:50:12test
212011-06-04 07:26:06asw
202011-04-04 15:42:25aaaaaaaaaaaaaaaaaaaaaaaaaaaa
192011-04-02 15:28:05l
182011-02-08 16:10:17奥村晴彦
172011-02-08 16:09:4916
162011-02-04 08:38:54奥村晴彦先生
152011-01-05 13:43:35123456789
142010-11-25 22:14:09いいい

仕組み

上には次のように書いてあるだけです。

<form action="sqbbs.php" method="post">
<p>メッセージ:<br />
<textarea name="msg" rows="5" cols="60"></textarea><br />
<input type="submit" value="送る" />
<input type="reset" value="クリア" /></p>
</form>

<?php
  try {
    $db = new PDO('sqlite:ファイル名');
    if ($_POST['msg'] != '') {
      $t = $db->quote(date("Y-m-d H:i:s"));
      $msg = $db->quote($_POST['msg']);
      $sql = "insert into okumurabbs values(NULL, $t, $msg)";
      $result = $db->exec($sql)
        or die("<p>書き込みに失敗しました</p>");
    }
    $sql = "select * from okumurabbs order by id desc limit 20";
    echo "<table border=\"1\">\n";
    echo "<tr><th>番号</th><th>日時</th><th>メッセージ</th></tr>\n";
    foreach ($db->query($sql) as $a) {
      echo "<tr><td>", $a['id'], "</td><td>", $a['t'], "</td><td>",
           htmlspecialchars($a['msg']), "</td></tr>\n";
    }
    echo "</table>\n";
    $db = null;
  } catch (PDOException $e) {
    echo "<p>エラー:", $e->getMessage(), "</p>";
  }
?>

ここではあらかじめ次のようにして okumurabbs という名前のテーブルを作っておきました。

sqlite3 ファイル名
create table okumurabbs(id integer primary key, t text, msg text);
.quit

SQLite は integer primary key に NULL という値を insert すると1から始まる連番を自動挿入します。 上の例では連番がなくても日時で並べることもできますが,削除のときには番号があると楽です。

特殊文字の無害化については セキュリティ上の配慮 をご覧ください。


奥村晴彦

Last modified: 2010-08-01 22:37:24