PHP掲示板14

晴れ今日は松縄でキッチンの仕事。 7時15分~12時まで。 あ~今日も半日の仕事……

家に帰ってさっそくPHP掲示板。 昨日から頭の回転の調子がいい!
まずやったこと
・URL入力欄作成
・上のに伴い、URLリンク方法を画像or文字を選択できるように
・本文中にURLがあった場合それにリンクする
・管理者機能の作成

ざっとこんな感じかな。
URL入力欄はただ普通に増やしただけ。 ログの一番最後に記入するので、取り出したときに改行コードも一緒に取り出されるみたい。 なのでereb_replaceでを除去。
IEの仕様かわからないけど、URLを http://aaa.com/aaa のように、最後をスラッシュで閉じない場合、勝手にスラッシュで閉じてくれる? NetscapeでもFireFoxでも試したけど、ぜんぶ勝手に閉じてくれた。 まぁいいや。
書き込むときに正規表現でURLが変ではないかチェックしてもらう。

^(https?|ftp)://[0-9a-zA-Z]+[0-9a-zA-Z_./?#(&)=%-]*$

頭に http:// , https:// ftp:// のいずれかがくる。
その後に0-9,a-z,A-Zのどれかが1回以上きて、0-9,a-z,A-Zか記号(./?#&=%~-)のどれかがくる(こないでも可)。 これをURLとして判断してる。
ちょっとめんどくて、メールアドレスみたいに細かくチェックしてないので……
そのうち細かくチェックするようにします。 ただ、URLの定義が相変わらずわからない。

本文中のURLにリンクする。 これは苦労した。
本文の中から上の正規表現を使って、URLを探す。 見つけたら、URLを<a href=”URL”>URL</a>に置き換えたいのだけど、どうやってやればいいのか全然わからず。 参考書を読む事十数分…… 「」とかいうのをみつけた。 これを使ってやってみたらできた。 やった~♪
ただ、複数のURLに対応するのがすごい難しかった。 改行されていればまだしも、同じ行にURLが2個以上あると……
それと、なぜだかわからないけど、同じ行に同じURLを記入すると、1つしか表示されない。 まぁこれはいいか。
返信するときに、リンクの<a href~~ が入らないようにはじく。
これで本文中のURLにリンクも完成!

そして
・URLリンク方法を画像or文字を選択できるように
0だったら画像、1だったら文字 を使うに設定した。 ただ実際は0だったら画像、0以外だったら文字にしてある。
画像の家アイコンは適当に作ってみた。 まぁこれは特に苦労することなくできたけど……これでいいのかな~

そして一番苦労した管理者モードの作成
とりあえずパスワードでログインするように。
ログインしたら、記事を表示する。 何件表示というのを設定すればいいのだろうけど、めんどうなので全件表示。
削除用のチェックボックス、記事番号、名前、題名、本文、日付、が表示してある。
削除したい記事にチェックして削除ボタンを押せば削除する! という機能。
文字で説明するだけならとても簡単だけど、これを作るのに何時間かかったことか……

チェックボックスにチェックされている記事ナンバーを配列に代入。
削除処理と同じスクリプトの内容を使って複数件の削除を考えた。
削除する順番は記事番号の大きい順。 小さい順だと、削除したあと記事番号が変わってしまうため。
削除する記事が10、15、30、47の場合、
配列[0]に47、[1]に30、[2]に15、[3]に10が入ってる。
それをループで回して、削除のループに入れる。
これでとりあえず完成!
文字で説明するとたったの7行。 実際にかかった時間は4時間ほど……
あと削除したあと、管理モードに戻るのにいちいちパスワードをいれないといけない。 これをなんとかしなくては。

とりあえず今日はここまで。
サンプル
ソース
管理者モード (パスはaaaa)

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の入力部分をつける……はどうしようかな~。。。
・アイコンをつけられるようにする……もどうしようかな~。。。
・画像アップロード掲示板にしようかなぁ……

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

サンプル
ソース
ログ

夜の過ごし方

晴れ今日はミカドキッチン。 カップボードつき。 7時20分~17時15分まで。

最近、夜の過ごし方が変わってきた。 今まではずっとパソコンをやっている感じだったのだけど、最近では9時くらいに寝てしまったり、ベッドに入ってずっと話していたり。 パソコンやテレビから離れてる感じがします。
夕べもリビングの電気やテレビをつけたままベッドで話をしていたらいつの間にか寝てしまって、気づいたら1時。 テレビと電気とつけっぱなしのパソコンを消してそのまま寝た。

けっこう睡眠時間はあるはずなのだけど、毎日眠い…… こればかりは仕方ないのか。

日曜出勤

晴れ今日は日曜日なのに仕事がある。 7時10分に会社。 松縄でお風呂を組む。 今日の現場は狭い。 なのに大工さんや塗装屋さんや設備屋さんまでいる。 狭い上に人が多すぎる。 車を止める場所すらない。
かなり仕事がしにくかったけど、とりあえずお風呂は完成。 15時くらいに終わった。

家に帰ってパソコンをやっていた。
洗濯をして夕飯を作って、ものすごい眠気で21時くらいに寝てしまった。

遅くまで

晴れ今日は6時50分から仕事。 観音寺でL型キッチンカップボード付きを組む。
いつももう1人いるのだけど、今日はなぜか休み。 変わりに社長の奥さんが来た。 けど何も仕事できないけれど……ゴミをまとめたり、道具取ったりするのに使えるから連れてきたらしい。

昼間ではけっこういいペースで進んでいたような気がする。 ただ人口大理石の天板でそれの接合に1時間ほどかかった。 これさえなければいいのに……
扉調整のドアもいっぱいあったし、コーキングを打つ場所もいっぱいあった。
で、会社に帰ってきたのがなんと……21時10分。。。。。。

明日は日曜日だけど仕事がある。 あ~眠い。

やすみ

晴れ今日は休みなり。 昨日の18時半ごろ、いきなり「明日休みだから」って言われても困るっての……
9時くらいに起きてまずは掃除洗濯をする。 そしてパソコンをやりながらテレビを見て……

ちょこっとMySQLの勉強をした。 とりあえずMySQL Command Line Clientというので操作をしてみる。 本やウェブページを見ながらやって、データベースの作成・削除、テーブルの作成・削除、テーブルにデータ登録、データ検索をやった。 MS-DOSチックでむずかしい……
それとデータベースを見るのに「show databases;」と打つのだけど、databasesは複数形なので最後にSがつく。 これだけでなくて、fieldsとかも複数形のSがつく。 ValuesもSがつく。 この複数形というのがやっかいだな。
日本人なので複数形のSや現在形・過去形、三人称とか苦手です。

で、PHPと連携できるらしいので、MySQLに接続してデータを取得してそれをページに表示するやつが載っていたのでやってみた。 だけど謎の文字化け。 アルファベットは全て正常に表示される。
MySQL Command Line Client上では日本語も正常に表示されている。 ただ、それをPHPで取り込むと文字化け(?)して全て?????になってしまう。 これは文字化けではなく、読み込めていないのかな~
文字コードの設定が原因かと思っていろいろいじってみた。
PHPのファイルをEUC-JPに変更して、MySQLの設定でEucjpmsというのにしてみた。 HTMLもEUC-JPにした。

なのに変わらなかった。 Eucjpmsというのがいけないのかとおもって、全てSjisにしてみた。 だけど同じだった。
うーん、これが解決できない限り、データベースを扱う事は難しい…… なんだろ、原因。

ヘルメット着用

晴れ今日の現場はありえない。 ヘルメット着用しないと中に入れないらしい……
車と人数の関係で、現場直行直帰になった。 7時40分から幸町で仕事。
18時前に終わったのに、これからまた別の現場にいくらしい…… オレだけ原付で松縄まで移動。 そこで完成して明日引き渡し予定の新築の家のお風呂を手直し。
終わったのは20時前……

家に帰ってきてソバを食べながらテレビを見た。
プレーオフ第二ステージ第二戦。
ソフトバンクVS日本ハム
先発は斉藤と八木。
両投手好投で、8回を終わってどちらも無得点。 9回の表、ソフトバンクは0点で終わった。
9回の裏、先頭打者の森本にフォアボール、続いて送りバント。 バッターは怖い小笠原。 ここは敬遠する。
1アウト1塁2塁。 そして4番セギノールと勝負する。 見事三振!!
まだまだ気が抜けない。 5番稲葉。
打球はセンター前へ……と思ったが2塁手仲澤が好プレイで取る。 そしてセカンドへ送球。 しかしセーフ。 その間に3塁を回った森本がホームへ戻ってくる…… 急いでバックホームするが間に合わず……
0対1のサヨナラ負け……
ピッチャー斉藤が泣き崩れていた。 ズレータとカブレラが両腕を支えてベンチに下がってくるシーンが印象的だった。
今年は優勝できなかったけれど……来年こそはきっと。。。

プレーオフ第二ステージ ソフトバンク対日本ハム 第一戦

くもり今日の仕事は7時から。 鬼無でお風呂。 新築和室メインの二世帯住宅。 17時10分まで。

さて、今日からプレーオフ第二ステージが始まる。 日本ハムはペナントレース1位通過なので1勝のアドバンテージがある。 第二ステージは3勝したほうが勝ち。
まず1回の表。 川﨑、大村と連続ヒット。 3番柴原は送りバント。 1アウト2塁3塁。 いきなりのチャンス!
バッターは4番松中。 レフトにフライを打ち上げる。 サードランナー川﨑がタッチアップ。 スライディングセーフ!
1回表、ソフトバンク先制!
つづくズレータは敬遠された。 そして6番本多。 デッドボールを受けて、2アウト満塁! ここで7番カブレラ!
たまに活躍してくれる外国人選手。 さて……結果は……2塁ライナー。 てっきり2塁の頭の上を抜けたかと思ったけれど、日本ハム田中の好プレイに阻まれる。
1回裏、いきなりピンチをむかえたが、ピッチャー杉内が踏ん張る。
3回裏。 1番森本がヒット。 2番田中が送りバント。 3番小笠原がフォアボール。 1アウト1塁2塁。 ここで4番セギノール。 セギノールはスイッチヒッターの4番、恐ろしい……
そのセギノールにレフト前に運ばれてしまう。 同点に追いつかれた…… つづくバッターは三振。 そして6番新庄。
今シーズンで引退する新庄。 その新庄がライト前に落ちるヒット。 2点目が入ってしまった。
3回裏を終わって1対2。 まだまだ試合の行方はわからない。

試合は動きがなく8回まできてしまった。 日本ハム先発のダルビッシュがなかなかの好投を見せ、打ち崩せない……
8回裏にさらに1点取られて9回表。
ランナーを2塁まで進めるが、そのまま3アウト。
大事な初戦を落としてしまった…… これで日本ハムは王手。 1勝のアドバンテージはでかい……

さてPHP。
今日はMySQLというのを調べた。 どうやらデータベースらしい。 データベースとは何か。 ようするにエクセルみたいなやつらしい……? データベースに登録されているものを検索して表示したりできるらしい。
まずはインストールから。 しかしインストールにすっごい手間取った。 けっきょくインストールしただけで終わってしまった……