PHP と SQLite を使った掲示板

メッセージ:

番号日時メッセージ
3392021-08-10 21:37:14💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩
3382021-06-09 13:15:30ああああああああああ
3372021-05-19 15:13:45メガテラ・ゼロ
3362021-05-19 15:12:35領域展開
3352021-05-14 23:09:06<script>alert('test');</script>
3342021-05-14 23:08:58<script>alert('test');</script>
3332021-03-30 02:20:37テスト
3322021-01-16 16:02:33a
3312020-12-28 18:11:46およよ
3302020-12-24 01:17:33qwqeqrqe
3292020-12-24 01:17:19gg
3282020-12-22 17:49:51hhh
3272020-12-21 13:23:13t' OR 't' = 't
3262020-12-21 13:04:57ほげ
3252020-12-21 13:04:51ほげ
3242020-12-21 13:04:38hogehoge ほげほげ
3232020-12-21 13:04:11ほげほげ
3222020-12-21 13:04:10ほげ
3212020-12-18 21:54:37sss
3202020-12-16 18:46:30こんにちは!

仕組み

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

<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'] != '') {
      date_default_timezone_set('Asia/Tokyo');
      $s = $db->prepare("insert into okumurabbs values(NULL, ?, ?)");
      $s->bindParam(1, date("Y-m-d H:i:s"));
      $s->bindParam(2, $_POST['msg']);
      $s->execute()
        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: