PHP と SQLite を使った掲示板

メッセージ:

番号日時メッセージ
792008-07-26 01:30:36みな
782008-07-18 11:57:20test TEST てすと てすと  \nてすと
772008-07-18 11:55:33て す と
762008-07-09 17:01:00pe
752008-06-14 19:10:00テスト
742008-05-30 15:58:52hoge
732008-05-30 11:28:10
722008-05-30 11:28:00
712008-05-30 11:27:56
702008-05-30 11:27:55asdf
692008-05-30 11:27:40asd
682008-05-26 13:20:53ほげげ
672008-05-05 15:08:10test
662008-05-05 01:56:59test
652008-04-26 03:09:43
642008-04-20 19:36:48<b>あーーーー</b>
632008-04-20 19:36:45<b>あーーーー</b>
622008-04-20 19:36:27<font size="30">☹</font>
612008-04-20 19:35:55
602008-04-20 19:35:23

仕組み

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

<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
  $db = sqlite_open('ファイル名')
    or die("<p>データベースに接続できませんでした</p>");
  if ($_POST['msg'] != '') {
    $t = date("Y-m-d H:i:s");
    $msg = sqlite_escape_string($_POST['msg']);
    $sql = "insert into okumurabbs values(NULL, '$t', '$msg')";
    $result = sqlite_query($db, $sql)
      or die("<p>書き込みに失敗しました</p>");
  }
  $sql = "select * from okumurabbs order by id desc limit 20";
  $result = sqlite_unbuffered_query($db, $sql)
    or die("<p>読み出しに失敗しました</p>");
  echo "<table border=\"1\">\n";
  echo "<tr><th>番号</th><th>日時</th><th>メッセージ</th></tr>\n";
  while ($a = sqlite_fetch_array($result, SQLITE_ASSOC)) {
    echo "<tr><td>", $a['id'], "</td><td>", $a['t'], "</td><td>",
         htmlspecialchars($a['msg']), "</td></tr>\n";
  }
  echo "</table>\n";
  sqlite_close($db);
?>

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

<?php
  $db = sqlite_open('ファイル名');
  sqlite_query($db, 'create table okumurabbs(id integer primary key, t text, msg text);');
?>

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

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


奥村晴彦

Last modified: 2008-04-13 12:51:48