プロが教えるわが家の防犯対策術!

よろしくお願いいたします。

カレンダーを利用した宿の空室状況を作っています。
「各日付」の下に空室状況を表す○、×等の「マーク」その下に祭日やイベントなどの「コ
メント」を表示し、これらは編集できるようにしたいです。

上記の「マーク」や「コメント」の内容は下のような月毎に用意したテキストファイルから
fopen関数で呼び出し、fgets関数で一行ずつ配列にセットしています。


例)201505.txt

(1行目)○お部屋割引あり!
(2行目)×
(3行目)○憲法記念日
(4行目)△みどりの日



表示の際は、該当日の配列から、mb_substr関数で1文字目を取り出し空室状況のマークとし
て表示、改行してmb_substr関数で取り出した2文字目以降を「みどりの日」等のコメントと
して表示しています。

この場合の改行は、マークは1文字のみと決まっているので1文字を表示したらphpのソースに<br>
タグをecho であらかじめ書いておくことで問題なく表示されます。


つまずいているのはここからです。

コメントに改行を入れたいのですが、入力画面で改行すると、テキストファイルも改行され
てしまい、改行後に表示したかった内容が次の日の行に書かれてしまい、失敗します。

最初に試した方法は、入力画面で改行をして登録するfput関数のパラメータ上でstr_replace
関数を使って「\r\n」を「<br>」に置き換える方法です。
最初の登録時は<br>を使っていないので問題ないのですが、タグ入力を禁止する為にエラー
チェックで「<>」を排除しており、2回目の編集後登録しようとしてもテキストに書かれてい
る「<br>」がチェックにひっかかってしまいます。

エラーチェックで「<>」をOKにはできないので悩んでいます。

よろしくお願いいたします。

A 回答 (1件)

いちばん簡単なのは、保存の際fputcsv() をつかい、読みだしの際にfgetcsv()を使えば


改行を含む一区切りでデータを呼び出すことができます。

ちなみにこの手の処理をテキストでやる限りデータの競合はさけられません。
ちゃんとやるならデータベースでデータ管理することをお勧めします
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

PHPを始めたばかりで、まずはテキストでできる範囲と思っていましたが(データベースは難しそうで・・・)なるほど、テキストはこのような処理には向いていないのですね。

苦肉の策で、一度<br>ありで保存したテキストを読み込む際にまた\r\nに置き換えて・・・という処理を入れてみたら、動くことは動きましたが、どうにもスマートではないのを自覚しております。
fputcsv() 、fgetcsv()にトライしてみます。

ありがとうございました。

お礼日時:2015/04/09 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!