返信機能をBBSに

安藤(プログラマー)
演劇もやっていまする。

さて、続けて返信機能の組み込みについても書こうかなと。
僕の掲示板も着々と完成形へ近づいてきています、、!

よし、ではposting.phpに処理を追加します。

posting.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
・・・
//返信機能
elseif(isset($_POST['reply']) === true)
{
    //入力内容
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $mail_address = $_POST['mail_address'];
    $password = $_POST['password'];

    ・・・
    //ここでバリデーション処理
    ・・・

    //返信投稿処理
    $statement = $com->prepare("INSERT INTO 'posting'(target_id,name,comment,mail_address,password) VALUES(:target_id,:name,:comment,:mail_address,:password)");
    $statement->bindValue(':target_id',$id,PDO::PARAM_STR);
    $statement->bindValue(':name',$name,PDO::PARAM_STR);
    $statement->bindValue(':comment',$comment,PDO::PARAM_STR);
    $statement->bindValue(':mail_address',$mail_address,PDO::PARAM_STR);
    $statement->bindValue(':password',$password,PDO::PARAM_STR);
    $statement->execute();

    $success_msg['reply_result'] = '返信に成功しました。';

    //処理したらページに戻す
    header("Location: http://127.0.0.1/index.php");
}
・・・

これで、返信が出来るようになりました!
target_idってなんぞやという所なのですが、postingというテーブルは下記のような構造になっていまして。

table:‘posting’

id target_id name comment mail_address password
1 AAA Hi! aaa@aaa.com aaa
2 BBB Hello! bbb@bbb.com bbb
3 1 CCC Good! ccc@ccc.com ccc
4 1 DDD Yes! ddd@ddd.com ddd
5 4 EEE No! eee@eee.com eee
6 FFF Hoge! fff@fff.com fff
7 2 GGG Hage! ggg@ggg.com ggg

target_idどの親記事に対する返信かという情報を得るための値で、要は親記事のidを保管するためのカラムですね。

これで返信された記事を親記事の下に返信記事が並ぶように表示できました!
実際ブラウザで見てみると、

1

という風な表示!
ちゃんと返信が表示されていますね(^^)

レイアウトやデザインはもっと掲示板っぽく、かつ使いやすい見やすいものにしたいですが、それは機能完成を迎えてからじっくりやろうかなと。
ちなみに表示用のindex.phpはこんな感じですー!

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
・・・
//一覧データの初期化
$post_data = array();
$reply_post_data = array();

・・・
//各機能(cookieやsessionの取得、ページャー機能設定など)
・・・

//親記事一覧データの取得
$statement = $com->query("SELECT * FROM 'posting' WHERE target_id = '' ORDER BY id DESC LIMIT 5 OFFSET 5");

while($row = $statement->fetch(PDO::FETCH_OBJ))
{
    array_push($post_data,$row);
}

//返信記事一覧データの取得
foreach($post_data as $value)
{
    //各親記事のid
    $id = $value->id;

    //返信記事一覧データの取得
    $statement = $com->prepare("SELECT * FROM 'posting' WHERE target_id = :target_id ORDER BY id ASC LIMIT 5 OFFSET 5");
    $statement->bindValue(':target_id',$id,PDO::PARAM_STR);
    $statement->execute();

    while($row = $statement->fetch(PDO::FETCH_OBJ))
    {
        array_push($reply_post_data[$id],$row);
    }
}
・・・

これで画像のようなBBSページを表示するためのデータを取得!!

・・・なのですが(*_*)
しかしこれでは、大きな問題がありまして・・・。

これでは、親記事に対する返信記事しか出すことが出来ないのです_| ̄|○

返信に対する返信、に対する返信、に対する返信、に対する返信、というように、返信に返信し続けるという処理と記事の表示が、現状ではできません。
テーブルの構造自体は間違ってないとは思うのですが、表示するためのデータの引っ張り方が思いついていません。。

うーん、なんとかしてループで引っ張り続ける処理をしたいのですが・・・。

それはまた次回の記事までの宿題にしよう。