PHP掲示板その9

晴れときどき雨今日は6時40分から仕事。 財田町というところだった。 もう目と鼻の先が徳島県。 あ~遠い……
普通のお風呂を組んだのだけど、大工さんがまだ窓を設置していなかった。 そのため取り付けてる間何も仕事ができず待機。 30分くらい無駄な時間を過ごした……
仕事は15時半くらいに終わった。
会社帰って家に帰ってきたら17時半。

今日は妻が帰ってくる。 と思ったら、すぐに帰ってきた。
夕飯はもらってきたおでん。 おいしかった~♪
そして今日もPHP掲示板。

昨日、ページ切り替え昨日ができたと思っていた…… だけど3ページ目以降の表示がおかしい。
ソースを見直してみると *2 となっているところを +1 にしたら正常に動作した。 これで直ったかな~
今日やったこと
・次の○件の部分、残ってるログが6件しかないのに「次の15件」とかなっていたので、それを状況に応じて「次の6件」
と表示する事が出来るようにした。
・変数の名前をわかりやすくした。
・スタイルシートで背景色、リンクの色を変えられるように。
・下部、現在○~○件目を表示というのを正常に動くようにした。

これくらいかな。

明日の仕事は小豆島。 会社に5時半集合。 ギリギリまで寝て4時半起きだ……ヽ(;´д`)ノ

サンプル
ソース

PHP掲示板その8

晴れ夕べは妻が実家に帰って泊まったのでオレ一人。 朝ゆっくりと寝る事ができた。 9時ごろ起床。
とりあえず家事をしなくては。 まず掃除。 そして洗濯。 今日は全てを洗う。 ベッドシーツやマットも洗い、掛け布団も乾した! マクラも乾した! きっと今夜は快適なベッドが待っている♪
掃除がけっこう時間がかかり、家事が終わったのが12時過ぎ……
あ~けっこう時間がかかるなぁ。

いったん妻が帰ってきたので、車を借りて昼過ぎから買い物に行った。
ホームセンターで延長コードとダンボール、スーパーで食料を買ってきた。
延長コードを使ってテレビ裏の配線を綺麗にした。

さて今日もPHPでもやりますか。
とりあえず「次のページ」「前のページ」というのをどうやったら作れるのかを考えた。
いろいろな掲示板を見ていたら、次へボタンを押すと、bbs.php?page=1みたいにページ数がURLの後につくやつがあった。 これをまねしてやってみよう。
まずURLのあとの?page=1の意味を調べた。 どうやらGETというメソッド?変数?を使うらしい。 それを使うとpage=1の1を取得できるみたい。
よくわからないけどとりあえずやってみるか。

いろいろやってとりあえず次へボタンを押すとpage=1、page=2とどんどん進むやつはできた。 戻るやつもできた。
あとは記事の表示か……

先日作った次の10件表示するやつをifに組み込んでいろいろやった…… すっごい手間取った……
で、なんとか表示する事はできた。
あとは、10件の記事で6件ずつ表示するとして2ページ目になったら次へボタンを消すとかいろいろやった。

だけど3ページ目以降になると表示がおかしくなる。 直したいけど今日はもう時間が無いのでまた明日。

サンプル
ソース

ヒトリノヨル と PHP掲示板その7

雨のち晴れ今日は7時から仕事。 円座町でお風呂を組む。 今日組むタイプのお風呂はとても簡単。 14時過ぎには終わるかな。 お昼はきっちり1時間休んでも14時10分に現場での仕事が終わった。
社長はどこかに急ぎの用があるらしく、今日はそのままおしまい。

なんと明日仕事が休みになってしまった……

家に帰ってパソコンをやる。
PHPの掲示板のサンプルにアドバイスが書いてあった。 11月から行く会社の人が書いてくれてるのかな~
ちょこっとソースを手直しした。

さて、本腰入れて作りますか。
今日の目標は1ページに表示する件数の設定&次の○件や前の○件というボタンまで作りたい。
さてさて、どうやってやるのか考えなくては……
とりあえず「前の○件」「次の○件」というボタンを作った。 全体の記事がそれ以下の場合はボタンを表示しないようにした。
まず1ページに表示する件数を10件とする。
記事が25件表示されていたら、ページ数は3ページ。 記事が11件表示されていたら2ページ。 記事が8件しかなかったら1ページ。 さて、これをどうやってスクリプトで表せばいいのだろう。
こういったコンピュータ語で表す手順、考え方を「アルゴリズム」というらしい。
中学校の友達が専門学校に通ってるころ、そんなことを聞いたことがある。 うーん、どうやってやればいいのだろう……悩むなぁ……
いろいろ考えて、 (全体の件数-1)÷1ページに表示する件数 この式の商の部分を出せばいいのかな。
全体が25の場合 (25-1)/10=2
全体が11の場合 (11-1)/10=1
全体が8の場合 (8-11)/10=0
この出た数字がログのページ数になってるはず。 全体のページ数を出すにはそれに+1すればいいっぽいけれど、これをどうやった使えばいいのだろう……

どうにかこうにか、記事が30件あった場合、1ページに表示するのが10件だった場合、次のページボタンを押すと下部に20件目~11件目の記事を表示する事は出来た。
だけど、どうやってこれを単独のページで表示させればいいのだろうか。 さらにその表示させたページに次、前のボタンを作って、そこから前後のログに行く事が出来るようにするにはどうすればいいのだろう。
困った。 行き詰った。

この問題は自力で考えるのでどうかヒントを与えないで下さい。

サンプル
ソース

PHP掲示板その6

雨今日は日曜日。 ものすごく眠い。 11時半くらいまで寝ていた……

起きてすぐに長女とでかける。 本当は公園で一緒に遊ぶ予定だったのだけど、あいにくの雨……
とりあえずお昼ご飯でも。 近くのジョイフルで、今日は生姜焼き定食を食べた。 おいしかった♪ ただちょうどお昼の時間だったかわからないけど、ものすごい混んでいた。

それから図書館に。 先週本を返したはずだったんだけど、家に返し忘れの本が3冊あった。
そして、雨だけど公園に。 長女は雨のなか遊ぶという…… オレはやめておこう……
車すぐ横で縄跳びをして遊んでいた。 ただ風邪をひいてしまうので10分くらいしか遊ばせてあげられなかったけれど……
家に帰ってすぐお風呂! あったかくて気持ちいい~♪

さて、今日のPHP掲示板の進捗状況。
・パスワードを設定したら記事を削除できるようにした
入力した記事番号・パスワードとログの記事番号・パスワードを照らし合わせて合っていたら削除するという機能。
だけどどうやってログファイルから削除するか悩んでいた。
array_splice という関数でログファイルから指定の場所を削除できるみたいだけど、なんどもやったけどできなかった(´・ω・`)
なので別の方法を考えた。 一度ログファイルの内容を全部書き写すという方法。
10件の記事があって、7件目を削除した場合
1~6件目をログファイルに記入
8~10件目をログファイルに記入
2つのfor文で一応はできたけれど…… もし記事が1万件くらいあったらどうなるのだろう…… 毎回ファイルを削除して記入してってやったらサーバーにかなり負担がかかるのかな? それともそうでもないのかな? その辺が不明。
まぁログを1万件も保存するようにしなければいいのだろうけど。

・本文の文字色が選択できるように
とりあえず9色。 そのうち入力フォームを作ってデフォルトの文字色数色+16進数で任意の文字色が選択できるようにしたい。 けど白背景で白文字とか黄色文字とかやることができちゃうから、任意の文字色はやめたほうがいいのかな~

とりあえずこれくらいだろうか……

サンプル
ソース

9月の終わり

晴れ今日で9月も終わり。 夏があっという間に去っていった気がする。
仕事は7時10分から。 香川オリーブガイナーズの本拠地、オリーブスタジアム付近でL型のキッチンを組む。 まぁいつもより重い部材とかもあって苦労したけれど2時半くらいに現場が終わった。
今日は社長が一緒にいるのに、珍しくそこの現場だけで終わった。 16時ごろ帰宅。

作成中の掲示板にユーザー定義関数が書いてあった。
それを参考にして
書き込み完了しました
名前と本文は入力してください
などのメッセージをやってみた。

スクリプトの最初の方でユーザー定義関数を書いてあるので、内容の中にHTMLの記述が減ってけっこう見やすくなってきたような気もする……

明日は休みなので、明日にまとめてアップします。

PHP掲示板その5

晴れ今日は7時10分から仕事。 屋島でお風呂を組む。 今日のお風呂は「ユパティオファイン」という商品。
ノーリツのお風呂は3種類ある。 実際はもっと種類があるのだけど、ほとんど売れないのかわからないけど年に1回あるかないかくらいしか組まないお風呂もあるらしい。
そういうのは除いて、よく組むお風呂。
まずは「JUB」というお風呂。 これが一番安く一番しょぼいお風呂。
大きさは1200*1600、1600*1600、1600*2000とある。 (単位はmm)
基本的なものは1600*1600。
そして「ファイン」というお風呂。 これがちょっとリッチなお風呂。
大きさは1200*1600、1600*1600、1600*1800、1600*2000とある。
そして「グラシオ」というお風呂。 これは出窓がついてるお風呂。 狭い浴室を出窓タイプにして少しでも広く見せようというやつ。
大きさは1200*1600、1600*1600しかない。 1200*1600だと0.75坪なのだけど、出窓タイプにすると1坪の大きさになるらしい。

で、今日のはファインの1200*1600タイプ。 しかしオプションで出窓がついている。 まぁ出窓があるとめんどいんだけど……
めんどいとはいえ、かなり慣れたお風呂。 16時半には終わった。

さて、家に帰ってパソコンをする。
今日は掲示板を作らなくては……
まずやったこと。
・名前、本文、題名にタブが入っていた場合は半角スペースに置き換え
 正規表現を使って を検索して、それを半角スペースに置き換えてる。 本文などに直接「 」と書いてもそれは変換されない。 なぜだかは不明。 まぁこれで正常に作動するからいいかな……
・パスワードに半角英数字以外のものが入っていたらエラーを出す。 記入無しでもエラーはおきないようにしたはず。
 これも正規表現を使った。
・名前、本文が半角スペースと全角スペースのみで書かれている場合はエラーにした
 これも正規表現、「 」と「 」がのみで構成されていたらエラーを出す。

今日やったのはこれくらいかな……
自分でテストした限りでは正常に動作するのだけど……
これからの課題
・ソースの中にif分岐が多すぎる。 ifの中にifが入ってさらにifが入ってその中にifが入ってるような状態。 これはなんとかならないのだろうか……
・削除機能をつける。 入力したパスワードとログのパスワードを合わせるところまではできてるのだけど、ファイルから1行削除するやつを調べなくては…
・本文の色を8色くらいの中から決められるようにしたい。

まだまだできそうではない課題
・改ページを作る。 1ページに表示する件数を20件くらいにして、ページ切り替えできるように。
・クッキー
・「書き込みました」画面でリロードするとリロードした回数だけ記事がかかれる

さて、明日は仕事だけど日曜は休みなので上のできそうなことはやっていこう。

サンプル
ソース

PHP掲示板4 メールアドレスチェック

晴れ今日はINAXのキッチンを組む。 6時50分に会社。 INAXの倉庫まで行ってキャビネットや天板を受け取って現場に向かう。 現場は坂出。
INAXのキッチンは初めて組むのだけど、あんまりノーリツのと変わらない。 引き出しが少し重い感じはしたけれど。
まぁ普通に何事もなく16時半くらいに組み終わった。

ひさびさに早く帰れる~ 18時前に帰宅。
昨日、一昨日と妻は体調が思わしくないため実家に帰っていた。 ここから10分くらいの距離なのだけど、オレもくたくただったので行けなかった。 今日は帰ってくるって。
ひさびさに時間があるのでPHPの掲示板の続きをやる。

先日メールアドレスチェックっぽいのを作ったのでそれを組み込んでみよう。
メールアドレスの定義を調べたけど、わからなかったので勝手に決めた。
・ユーザー名@ドメイン名とする
・使える文字はa~z、A~Z、0~9、_(アンダーバー)、-(ハイフン)、.(ドット)と@(アットマーク)
・ユーザー名の1文字目に記号は使えない
・ドメイン名はの最小構成は、@*.* とする (*は使用できる文字のどれか)
・ドメイン名の1文字目に記号は使えない
・ドメイン名で.(ドット)の直後に記号がくることは無い
・ドメイン名は、_(アンダーバー)、-(ハイフン)、.(ドット)で終わる事がない

こんなところかな~ この定義が実際のメールアドレスの定義と合ってるのかは不明。 自分の経験で勝手に決めました…… 昔J-PHONEの携帯電話のアドレスで大文字のメールアドレスがあったような気がするし、ドメイン名の.の直後に記号がくるのをみた事が無い。 ユーザー名も記号で始まるのを見た事が無い。 自分の使ってるサーバーで記号で始まるメールアドレスを追加しようとしたけど無理だった。

今日は全然進歩なし……

タブで本文を書き込まれるやつどうしようかな~ 明日にでも<>に変更してみようかなぁ… それか は半角スペースにでも置き換えるか…… ただ本文中に と書かれていた場合はどうなるのだろう。

サンプル
ソース

川之江町

晴れ今日は愛媛県四国中央市川之江町で仕事。 6時半に会社…… 夕べのうちに作っておいた鮭とウインナーのお弁当を持って。
今日はけっこうめんどいお風呂。 壁出し換気扇というのをつける。 普通お風呂の換気扇は天井につけるのだけど、天井が低くて換気扇をつけられない場合は壁につける。 まぁその穴を開けるだけなのだけど。
まぁそれ以外は特にめんどうなこともなく無事に終わった。
だけど現場が終わったのが17時半。 高速使って帰ってもけっこう時間がかかる。

けっきょく会社に着いたのが19時。 家に帰ったら19時半……
明日はミカドのユニットバスを組む。 初めてやるもの…… 明日も遅くなりそうだ。。。

今日は野球の話でも。
オレは一応「福岡ソフトバンクホークス」のファン。
パリーグは今、上位3チームが2ゲーム差で首位を争っている。
1位:西武 残り2試合 M0
2位:日本ハム 残り2試合 0ゲーム差
3位:ソフトバンク 残り3試合 2ゲーム差

試合は西武VSロッテ、ソフトバンクVS日本ハム。
今日西武が勝てば1位決定。 ソフトバンクが負けたら3位決定……
ソフトバンクが優勝するには、西武が2試合負けて、ソフトバンクが3試合勝たなくてはならない…… かなり追い詰められた状態。
絶対落とせない今日の一戦。
しかし1回にいきなり2ランホームランを浴びてしまう。 これはマズイ……
そのまま得点できず、得点を入れられ続けて8回。 なんと一気に5点も入れられてしまう。 これはもう無理だ…… けっきょく0-8で負けてしまった。 これで3位確定…… まぁプレーオフ頑張ってもらおう!
で、西武VSロッテ。 勝てば1位が決まるこの一戦。 先発は松坂。 しかし松坂が打たれてしまう。 打たれて打たれて、2-6で西武の負け。 日本ハムがソフトバンクに勝ったので、順位が入れ替え。
1位:日本ハム 残り1試合
2位:西武 残り1試合 1ゲーム差
3位:ソフトバンク 残り2試合 3ゲーム差
明日日本ハムが勝ちか引き分けで首位決定。 もし負けても、西武が引き分けか負けたら首位決定。 西武が優勝するには明日日本ハムが負けて、西武が勝たなくてはいけない。
まぁこうなったらどちらが優勝してもいいけれど。

そしてセリーグも面白い。 首位中日、2位が阪神でゲーム差が3。 阪神は怒涛の7連勝。 中日はサヨナラ勝ち。
残り阪神が12試合かな、中日が17試合くらい。 3ゲームなのでひっくり返す事も可能だろう。 シーズン終盤でも順位が決まってないのはめずらしい。 まだまだ楽しみなプロ野球。

さてPHP。
掲示板にあまりにも不具合が多すぎる……
サンプルに書き込まれていて気づいた…… 本文を記入するテキストエリアなどにタブは入力できないと思っていた…… だけどメモ帳などで、タブを含んだ文章を書いて、コピー&ペーストしたら、タブ入りの文章を書く事が出来た。 それによって、タブ区切りのログファイルがとんでもないことに(;゜ロ゜) さて、これはどうすればいいのだろう。
調べたら、掲示板のログは普通「タブ区切り」か「<>区切り」らしい。 だけど<>区切りにしてもまた不具合がおきそうだし…… 記入された記事や名前の中にタブが入ってるか入ってないか確認して、入っていたら半角スペースなどに置き換える、とかしないといけないのかな。 これは正規表現が必要だ、たぶん。

どっちにしろ勉強しないといけないものなので今日は正規表現の勉強をしよう……
とりあえずメールアドレスかどうかチェックするようなものを作った。
メールアドレスの定義がよくわからないけれど……
メールアドレスに使われる文字は
アルファベットの小文字のa~z、大文字のA~Z、数字の0~9、-、_、.だけだったかなぁ。
たぶん1文字目に-_.が来る事はないかな…… だけどわからないからいいや。
そして@以降も1文字で終わる事はないと思う……たぶん……
@直後に-_.が来る事があるのかどうかは不明。
-@…とかいうアドレスが実在したりするのだろうか…… そういうのはわからないけれど……
とりあえずこんな感じかなぁ。

ereg(“^([a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+.[a-zA-Z0-9_.-]+)$”,$i)

まず(a~z、A~Z、0~9、_、.、-)のどれかが1つ以上使われている。 その後に@がくる。
その後に(a~z、A~Z、0~9、_、.、-)が1つ以上使われている。 その後に.(ドット)がくる。 そして(a~z、A~Z、
0~9、_、.、-)が1つ以上くる。
以上のものが$iの先頭にあって終わりにもある。 つまり$iの全てが上のに当てはまってるかどうかチェックする。
ように作ったはず。

[ ] で囲まれたところはその中のもののどれかが使われてるか判断。 そしてa-zはa~zのどれかという意味。
[a-zA-Z0-9_.-]は
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-
のどれかが使われている。 その後の + はそれらが1回以上繰り返し = 1文字以上。
最初の^は$iの最初にという意味
最後の$は$iの最後にという意味

うーん、難しい。
今度メールアドレスとURLの定義を調べなくては。