返信機能付きの一行掲示板を作成する

返信機能付きの一行掲示板を今回は作成しようと思うのですが、まず始めに基本となる一行掲示板を作成してから追加機能として返信機能を付けたいと思います。

ですので既存のツールに組み込むことができるかもしれません。よかったら参考にしてみてください。

 

一行掲示板

初めにデータベースの設計を考えます。

データベースの設計は重要です。再構築するとなると全データを移動させる必要があるので面倒になります。先にしっかりと考えましょう。

今回は以下のような構造体にします。

id int not null auto_increment primary key
user varchar(30) not null
message text not null
reply tinyint(1) default 0
replyId int
date datetime default current_timestamp

解説をすると、

id はそのデータの固有IDとなります。

返信をする際に必要となります。

user は投稿主の名前です。

message は投稿内容です。

reply は 0 か 1 によって、返信かどうかを見分けるためのフラグです。

replyId は返信先の固有IDです。

date は投稿された日時です。自動的にMYSQLサーバーのタイムスタンプを割り当てています。

 

フォームの宛先を雑ですが書くと

<?php

$pdo = new PDO(/* あらかじめ作成しておく */);
$user = filter_input(INPUT_POST, "user");
$message = filter_input(INPUT_POST, "message");
$isReply = filter_input(INPUT_POST, "reply") == null ? 0 : 1;
$repId = filter_input(INPUT_POST, "replyId");

if ($isReply) {
$sql = "insert into bbs(user, message, reply, replyId) values(:user, :message, 1, :replyId)";
} else {
$sql = "insert into bbs(user, message) values(:user, :message)";
}

$smt = $pdo->prepare($sql);
$smt->execute(/* 必要な値を配列で渡す */);

のような形になります(雑だけど)。

※受け取った値は必ず 「htmlspecialchars」などの関数を使用してパースしてください。

※本番環境ではNULLチェックだとか、TRY CATCH とかしてね☆

 

トップページ用のSQLは

select * from bbs where reply=0;

返信表示用のページ(SNS風にするのであれば)は

select * from bbs where reply=1 replyId={$ID};

のようにすればOKだと思います!

 

以上で一行掲示板返信機能付きの解説(じゃないですねすいません)でした

このままだと認証(アカウント機能)やスパム対策がないので追加していかなければいけませんね。