PHP掲示板13

晴れ今日は成合の西村ジョイの展示コーナーでお風呂撤去の仕事。 どうやら展示品が売れたらしい。 組み立てはあさって。 現地直行で7時50分集合。 お店が9時からなのでお客さんがくるまでになるべく撤去作業を進めて、邪魔にならないようにしなくては……
10時前くらいに撤去完了。 バラバラになったお風呂を近所にあるお客さんの家に持っていく。
今日は組まないけど、お客さんの家の庭にバラバラになったお風呂を置いて帰る。
11時くらいに仕事終了。
給料明細をもらった。
9月から日給が1000円アップしていた。 だけど、出勤日数が……たった15日。 4日は熱で休んだけれど…… 休みが多いな~ まぁ月初めに4連休、末にも4連休があったからなぁ。 それに比べて今月はすごいたくさん仕事がある。 今月は17日間のうち12日半仕事をした。 このペースだと22日くらい仕事があるのかな? 給料が1000円アップしたということは、22日で22000円アップ。 まぁまぁ嬉しいかな。
まぁ今の仕事も今月限り。 仕事内容に不満はないけれど、やっぱり給料がね~ 仕事のある月はいいけれど、無い月は半分もないし…… 5、6、8、9月とゴールデンウィークがあったし…… やっぱり望むは安定した収入。

うどんを食べて家に帰って、少し昼寝をする。
さて、ひさびさのPHP掲示板。 MySQLはちょっとおいといて……
そういえば、MySQLの日本語の謎がやっと解けた。
いろいろ検索で調べて
skip-character-set-client-handshake
とmy.iniに記入したら直った! それと文字コードのEUC-JPはどうやらeucjpmsではなくujisだったらしい……
それとPHPスクリプトのフィアルをやっぱりSJISではなくEUC-JP形式にした。 どうやらその方が望ましいらしい。
どの参考書みてもそう書いてあるしね。 なぜSJISではいけないのかは不明。
ということで、今日からEUC-JP。
さすがに返信機能を1から考えるのはとてもむずかしいので、kentのaska bbsを設置して、マネしました。

さて、とりあえずやったことをずらずらと。 方法は後ろの方で
・パスワードの暗号化のバグを修正
・書き込みました画面でリロードしたら、二重投稿禁止と出るようにした
・返信機能をつけた
・本文の一番最後に改行があった場合、それを消すようにした

方法
・パスワードの暗号化のバグを修正
パスが空の場合は暗号化しないようにした。 これによってログにはパスは0バイトで記入されるようになった。 記事を書いた人が消す事もできなくなった。

・書き込みました画面でリロードしたら、二重投稿禁止と出るようにした
write.phpで処理した。 変数に代入した時点で、ログの最終行(一番最近の記事)から名前と本文を抜き出す。
それを照らし合わせて内容が同じなら「二重投稿禁止です」とエラーを表示させるようにした。
ただ弊害が……
自分で、テスト用に記事を増やしたいとき、何度も書くのが面倒なので、更新を連打して、同じ記事で件数を増やしていたのだけど、それができなくなった。。。 まぁテストするのが面倒になっただけだからいいか。。。

・返信機能をつけた
これはすっごい苦労した。
まず仕様
返信ボタンを押すと、タイトルに
Re:[??] 題名
と表示されるように。 ??は返信元の記事ナンバー、題名は返信元の題名。
本文のテキストエリアに
> 本文
> 本文
のように、引用符をつけて表示する。 で、記事表示部分では引用された部分を色を変えて表示する。 色はとりあえず#804000にした。 Kentのaska bbsのデフォルトの色。 はい、マネです。
返信モードかどうかを判断するために、返信ボタンを押したときはURLに bbs.php?res=?? と表示
最後の??は返信元の記事ナンバー。 これをGETで取得して、テキストボックスにValueで表示。 テキストエリアに表示。
返信のタイトル。
Re:[??] 題名
と最初やっていたのだけど、返信にたいする返信、 記事5に記事6で返信、記事6に記事7で返信、記事7に記事8で返信した場合
Re:[7] Re:[6] Re:[5] 無題
のように Re:[??] の部分がひたすら増えていく…… これを最新の返信元のみRe:[??]にするように。
返信元のタイトルを取得した時点で Re:[??] があった場合はこれを消す。
Re:[6] 無題
というタイトルだったら、取得する時点で前の Re:[6] をはじいて 無題 のみ取得。
これを最新のRe:[??]と組み合わせて表示した。 ereg_replaceというのを使ったけどこれでいいのかな~ とりあえずできてるからいいか。
ただ手入力でタイトルを Re:[33]みたいに入力されてあって、それに返信した場合はそのタイトルが消されてしまう。 まぁそんなことする人はいないという前提で……

次に本文の引用。
行ごとに > で引用するので、行ごとに取得する必要が。
explode(“<br>” , 変数) で取得した。 だけどログ内の<br>が消されてしまうので、あとで行ごとに文末に<br>を付け加える。
行ごとに
> 取得した文章 <br>
と代入する。
元の文章が
123<br>
45<br>
67
というものだったら
> 123<br>
> 45<br>
> 67<br>
となる。 見てわかるように絶対に最終行にも<br>が入ってしまうバグが。
そのために
・本文の一番最後に改行があった場合、それを消すようにした
をした。
これで引用の第一段階は完成。

次にwrite.phpでの処理。
これも本文を行ごとに取得する。
文の始めに引用符があり<br>で終わるもの、文の始めに引用符がありそのまま終わるもの
以上の2つの場合、引用とみなして、色を変える処理。 ログに<font color='#??????'>文</font>を付け加える。
全ての行をあとで結合。 結合したやつをログファイルに書き込み。
これで完成!

ログに書き込む時点で<font color>を指定した事によって、返信する本文でバグが。
引用されたものを返信するとき、ログ内容を1行ずつ取得してそのまま表示すると
> こんにちは
という、すでに#804000に色が変わってるものを引用すると
> <font color='#804000'> > こんにちは</font>
と引用されてしまう。 返信の返信に対してのバグ。
これもereg_replaceで<font>を除去してみた。
最初は前の<font color~~>の部分を消す。 次に最後の</font>を消す。
両方を消したものを引用する。 これでいいのかな~
上の > こんにちは に返信すると
> > こんにちは
となるようになった。 これでいいっぽい。

本文を入力するときに自分で>というのを使うと色が変わるけど、これはaska bbsでもそうなったからいいや。 > の前にスペースをいれると、普通の文字色で表示される。

あともう一個。 引用符以降の文字色変更はきちんと動作するのだけど、デフォルトの文字色があるため
<font color='デフォルト色'><font color='引用色'> > 引用された文章</font></font>とかなるけど、これはいいのかな……?

とりあえず返信機能は完成。
レスがツリー式やテーブルでひとまとめになる掲示板ではないので、ここで終わり。 だけどそれらの掲示板だったらややこしそう。 けど、そのうちそれらのタイプの掲示板も作ってみなくては。

さて、今後の課題
・管理者機能をつける
・検索機能をつける
・本文中のURLにリンクをつける
・投稿欄でURLの入力部分をつける……はどうしようかな~。。。
・アイコンをつけられるようにする……もどうしようかな~。。。
・画像アップロード掲示板にしようかなぁ……

というか、掲示板を作り始める前に、仕様を全部決めておかなくてはならないのですね。。。
次のを作るときは、最初に全部決めなくては…… 今のはとりあえずただの勉強なのでゴチャゴチャ機能つけてみようかなぁ。。。

サンプル
ソース
ログ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です