どうも、ゴトーだ。
昨日に引き続き、掲示板を作成しているが、機能をブラッシュアップして「シンプルな掲示板」から「普通の掲示板」に進化した。
まあ本当のところは、まだ普通の掲示板にも満たないレベルなんだが、便宜上成長したということで、名称を変えたくてとりあえず「普通の」と付けたかっただけなんだ。
しょぼいじゃねえかという意見もあるだろうが、そこは大目に見て欲しい。
5日目の成果物: 普通の掲示板
昨日の「シンプルな掲示板」をベースに以下の機能を追加した。
- トピックを作成したり、コメントを作成したときに、入力した名前の値を次回に引き継ぐ
- 投稿日時を表示する
- トピックやコメントの削除機能
- 本文に含まれるURLをリンクに置き換える
まあ普通の掲示板に存在してそうな機能を盛り込んだという感じだ。
ただ今だと20件以上のコメントを一度に表示できなかったり(※)、トピックに何件のコメントがあるのか表示されていなかったりと、まだ改善の余地はあるがそこは勘弁してほしい。
※…全部表示しようと思えば簡単なんだが、何千件と増えていったら重くなってしまうから本当はページングをつけたいが、やり方がわからない
どうやって作ったのか
今回は機能追加なのでそれぞれ一つずつ紹介したい。
トピックを作成したり、コメントを作成したときに、入力した名前の値を次回に引き継ぐ
巷でよく聞くクッキーと言うものを使えば割りとシンプルに実装できた。
クッキーというのはアクセスしたユーザーがどんな属性を持っているのかなどを、アクセスを越えて識別できるものという解釈だがあっているのだろうか。
自動ログイン機能とかもクッキーで作られているらしく、ほとんどのウェブサイトで使われているんだとか。
ユーザーが一度入力した名前はクッキーに保存することで、次回以降アクセスした時にその名前を引き継ぐというものにした。
仕組みを理解するのに時間はかかったが(というか今も怪しい)、実装自体はすぐにできた。
投稿日時を表示する
データベースにトピックやコメントの内容を保存するときに、現在時刻を挿入することでいつに投稿されたものかを永続的に持っておく。
そしてデータを読み込んでHTMLにするときに「2016年01月01日 00:00:00」というような形式に置き換えることで、人に理解しやすいものになっている。
置き換える方法はググったらでてきてそれを参考にしたけど、構文が難しくてあまり理解できていない。
date("Y年m月d日 H:i:s", strtotime($topic['create']))
トピックやコメントの削除機能
ユーザーがトピックやコメントを作成するときに「削除パスワード」を入力することで、保存するときにそのパスワードが一緒に保存される。
そして削除ページから、作成した時と同じパスワードが入力されると削除に成功するという仕組みだ。
原理的には簡単なんだが、なんかSQLを作成するのが思ったより複雑になってしまってやたらと時間がかかった。
それとパスワードは暗号化したほうが良いらしいので、暗号化してから(それ自体はすごく簡単)保存しているが、セキュリティ的に本当に大丈夫なのかはあまり分かっていないので、もしサンプルを使ってもらえる方がいる場合は、普段使っているパスワードは入力しないで欲しい。
一応削除機能はちゃんと動いているが、なんか挙動が気持ち悪くて、いざ作ってみるとどういう風に遷移させたら良いのかというのは、ユーザーとして使っている時には気づかないような難しさがある。
本文に含まれるURLをリンクに置き換える
トピックやコメントの本文の中に「http://www.gamehuntblog.com/」というようなURLが入力されていたら、それをaタグに置き換えるという原理。
といっても置き換え方はさっぱりわからなかったから、これもググって調べた内容をそのままコピペして導入した。
原理がわからないまま作るというのも気持ちが悪いからちゃんと理解できるようになりたいのだが…。
これも動作自体はちゃんとしているはず。
どのくらい時間がかかったのか
昨日の時点では8時間くらいでできるんじゃないかと思っていたが、案外15時間くらいかかってしまった。
初めて楽しさより訳わからなさが勝った日でもある。
プログラミング能力が相変わらず低すぎるが、慣れてきたら上がってくるものなのだろうか。
明日はさらに掲示板をブラッシュアップさせるか、別のものを作り始めたい。