どうも、ゴトーだ。
今日は昨日のゲストブックに引き続き、連続で投稿することができた。
今回のアウトプットは「シンプルな掲示板」だ。
文字通り、スレッドを立てて、そこに返信することができるという最低限の機能だけを持った掲示板になっている。
4日目の成果物: シンプルな掲示板
1日目のアクセスカウンター、2・3日目のゲストブックに続いて古くさいものになっているが、しばらく古くさいものが続いてしまうと思う。
少しずつ学習しながらイカしたものを作れるようになりたいとは考えているんだが。
掲示板の仕組みについては今回もMySQLを使っている。
データのやりくりはファイル操作よりもSQLで色々と操作できるデータベースのほうが向いているらしいので。
掲示板の機能としては最低限のものになっている。
- ユーザーはトピックを作成できる
- 作成したトピックは一覧に表示される
- トピックのページに飛ぶと、トピックに対する返信が表示される
- そのページから返信を作成できる
どうやって作ったのか
トピックの作成
これは昨日のゲストブックとほとんど変わらず、単純に送信された内容をデータベースにINSERTするだけでよかった。
トピックの作成フォームでユーザーが入力した値をPOST通信で送り、それをPHPで受け取ってSQLを作成してデータベースに保存するという処理。
一つだけ工夫した点として、昨日のゲストブックは空でも送信できてしまったのが、今回はHTMLのrequiredを使うことで、空のまま送信できないようになっている。
トピックの表示
トピックの詳細を表示するために、URLの中にトピックのIDを埋め込んでおいて、そのIDを元に、トピックの内容を取得している。
ただ、どのIDに該当するかをプログラムが把握するために、URLパラメーターの中に埋め込んでいるが、よくあるウェブサイトのようなスマートなやり方がわからず、なんかイケてないURLになってしまった。
例えばこのブログだと「http://www.gamehuntblog.com/entry/2016/11/04/190000」というURLなら「entry/2016/11/04/190000」の部分が"その投稿である"ことを示しているが、こんな感じでURLの中にきれいに埋め込むときはどうしたら良いのだろうか。
返信の作成
これもユーザーが入力して、その内容をもとにSQLを作成して返信を保存するという点ではトピックと同じ。
一つだけ異なるのは、ユーザーが今作成しようとしている返信がどのトピックのものかということを認識しなければならなかった。
例えば「トピック2」に対する返信を作成しているのに「トピック1」に返信を作成してしまってはダメなので。
返信の表示
返信のデータベースはトピックとは別のテーブルを作成しておいて、そこにはtopic_idというカラムが存在している。今見ているトピックIDと同じデータをもつ返信のみをSQLで上手く取得する。
そのあとはいつものように、ループで回しながらHTMLとして表示していく。
何を学習したのか
二つ以上のテーブルを利用すること
今回はトピックと返信という2つの要素があって、それぞれ用途が異なるので、別々のテーブルにしてみた。
ただし返信はトピックに依存するものなので、必ずトピックのIDを持って追随するものでなくてはならない。
2つのテーブルの関連性ということは新しく学習したが、データベースの操作自体に目新しいことはない。
HTMLの「required」属性
フォームには入力を強制したいときには「required」をつけることで、空のまま送信できなくさせることができる。
その他にも色々な属性があるらしいので、機会があれば使っていきたい。
input type="hidden"の意味
<input type="hidden">というインプットのタグは、ユーザーからは見えないフォームの要素ということで、何の意味があるのかわかりづらいが、今回使ってみてその意図がわかった。
例えば「トピック2」に対する返信を作成するとき、ユーザーが"どのトピックに返信を作成するか"を選択するのはおかしなことで、あらかじめトピック2に対する返信だよということが規定されていて欲しい。それを意味するときに<input type="hidden">を使うことで、ユーザーからは見えないけど、今から送信する返信の内容はトピック2に対するものだということを伝えることができる。
そういうわけで今回の掲示板では、返信を作成するところで使用している。
どのくらい時間がかかったか
基本的な仕組みやHTMLはゲストブックの使いまわしなので、さほど時間はかからず11時間くらい。
ただ削除機能や、前回入力した名前を持ち越すみたいな機能を作るともっと時間がかかるはず。
今日はそれらの機能を付け足して、明日にはもう少し高機能な掲示板にしたい。
4日目終わっての感想
データベースの操作自体は案外シンプルで、トピックと返信の作成くらいなら特に難しいことをなくても実現することができた。
一方で、トピックの詳細ページでURLパラメーターを埋め込んでいるところなどは多分イケてる方法ではないので、どうやったら他のサイトみたいな形式にできるのかは今も理解していない。