• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:投稿番号、投稿削除と投稿修正機能)

投稿番号、投稿削除と投稿修正機能

このQ&Aのポイント
  • PHPを使用して掲示板に投稿番号、投稿削除、投稿修正機能を追加する方法について教えてください。
  • 投稿番号を付けたい場合は、投稿データをファイルに保存し、ファイルに書き込む際に投稿番号を付加します。
  • 投稿削除と投稿修正機能の実装は、投稿データを読み込んで編集し、再度ファイルに書き込むことで行います。

質問者が選んだベストアンサー

  • ベストアンサー
noname#18096
noname#18096
回答No.1

以下の記事からの続きですね。 OKWave ファイル書き込みが重複する http://okwave.jp/kotaeru.php3?q=2211674&rev=1 私とkaiwareponさんの掲示したソースを取り込まれたようですが、一部に無駄な箇所があります。 他人のソースを取り込むときには、どのような仕組みで動作しているかきちんと理解してから、取り込んでください。 場当たり的にソースを取り込むと、ソースが大きくなって不具合が出たときに、どこに原因があるか調べるのが困難になります。 私が他人のソースを参考にする時には、以下のサイトをよく利用します。 PHP: Hypertext Preprocessor http://jp2.php.net/ PHP: PHP マニュアル - Manual http://jp2.php.net/manual/ja/index.php ページ上部のテキストボックスに関数名を記入して検索すれば、関数についての説明が出てきます。 関数は基本的に functionname(); という書式なので、使用したことがない関数らしきものがあれば、検索して調べてください。 例えば、implode("", $data) が解らなければ、"implode" で検索すれば、説明が出てきます。 以下、無駄な箇所について。 まず、初めにごめんなさい。前回、私は勘違いしていました。 if($i < 100) { fwrite($file, "$value"); $i++; } } 私は上記ソースの代わりに配列を操作して、implode("", $data) で書き込むロジックを考えていました。 (書き込みは最初の一度で終わる、と言うことです) で、代替手段として、array_shift($data) implode("", $data) を用意しましたが、これは誤りでした。 (これは必要な動作ですが、100行に制限するロジックではありません) 1行目は、恐らくヘッダ情報なんですよね? その場合、implode("", $data) で書き込むときには、以下のような100行に制限するロジックを追加する必要があります。 while(count($data) > 100){ // 既存データが100以上だったとき array_pop($data); // 配列の最後の要素を除去 } これで先のfor文は不要となります。 $view = explode("\t", $value); list($name, $mail, $body, $dt) = explode("\t",$value); どちらか一方で良いので、一方が無駄です。 私が紹介した下例は、「変数の名前が解りやすい方が良かろう」という配慮からで上例でも何ら問題はありません。 本題の記事編集ですが、便宜上、私の紹介した方で説明します。 list($name, $mail, $body, $dt) = explode("\t",$value); $value が1つの記事データを表すとすれば、これで各データ値が初期化されます。 次に、それをフォーム上に出力します。 echo "<form action='edit.php'>..."; ユーザーは次に、edit.php に編集データをポストします。 各投稿データが $name, $mail, $body, $dt, $item_num に代入されるとして。($item_num は記事No.を表します) $data = file("data.txt"); // 既存データ読み込み foreach($data as $val){ list($name_tmp, $mail_tmp, $body_tmp, $dt_tmp, $item_num_tmp) = explode("\t",$val); if($item_num == $item_num_tmp){ // 記事No.が合致したとき $val = "$name\t$mail\t$body\t$dt\t$item_num\n"; // 編集済みデータの初期化 break; } } 繰り返しですが、これもソースをそのまま取り込みではなく、内容を理解されてから使用して下さい。 (最も、必要な処理のみを記述しているので、変数名等、書き直さなければならない部分があるでしょう。) 現状のままだと、矢継ぎ早な質問から収集がつかなくなることは必至だと思います。

msnxl
質問者

お礼

ありがとうございます。なんとか削除機能を実装することができました。

msnxl
質問者

補足

丁寧なご指導ありがとうございます。ご忠告を踏まえた上で取り組みます。