アクセス向上大失敗 www.igros.net
Last updated 2004/8/16
コメントバック 対応

時系列に追加記録 -簡単PHP掲示板講座 STEP9-

[PR]特集 Amazon.co.jp レコメンドコンテンツ



STEP9
・投稿データを時系列に追加書きする(前データは消さずに残す)
  [STEP8の問題点] 投稿データは毎回新規1行しか記録されていません。
  [要点] ファイルオープン命令の書込みモードを変更するだけです。
参考ソースプログラム
解説
<?php
# プログラム bbs.php STEP9
 $submit = $HTTP_POST_VARS["SUBMIT"];
 if ($submit=="送信") {
  $name = $HTTP_POST_VARS["NAME"];
  $mail = $HTTP_POST_VARS["MAIL"];
  $body = $HTTP_POST_VARS["BODY"];
  if ($name=="" or $body=="") {
   echo '<font color="#FF000">必須項目入力エラー</font><br>';
   echo 'お名前と本文は必ず入力してください<br>';
   echo '<a href="javascript:history.back()">戻る</a>';
   exit;
  }
  $body = str_replace("\r\n", "<br>", $body);
  $dt = date("y/m/d H:i:s");
  $fp = fopen("data.txt", "a");
   fwrite($fp, "$name\t$mail\t$body\t$dt\n");
  fclose($fp);
 }
 echo '
  <html>
  <head>
  <title>PHP-BBS</title>
  </head>
  <body>
  <h1>PHP-BBS</h1>
  STEP9<br>
  <form method="post" action="bbs.php" accept-charset="x-euc-jp">
  お名前 <input type="text" size="16" maxlength="30" name="NAME">
  メール <input type="text" size="30" maxlength="50" name="MAIL"><br>
  本文<br>
  <textarea rows="10" cols="70" wrap="soft" name="BODY"></textarea><br>
  <input type="submit" name="SUBMIT" value="送信">
  </form>
 ';
 $data = file("data.txt");
 foreach ($data as $value) {
  $view = explode("\t", $value);
  $name = $view[0];
  $mail = $view[1];
  $body = $view[2];
   if ($mail=="") { echo "お名前:$name $view[3]<br>"; }
   else { echo "お名前:<a href=\"mailto:$mail\">$name</a> $view[3]<br>"; }
   echo "本文:$body<br>";
 }
 echo '</body></html>';
?>
$dt = date("y/m/d H:i:s");はPHPのローカル日付/時刻を書式化する命令です。
このPHPプログラムが実行されているマシンのコンピュータ時間を与えられた書式に従い変換し、$dtと言う任意の変数に値をセットします。
y:西暦年の下二桁
m:月(ゼロ埋め付き、すなわち01〜12)
d:日(ゼロ埋め付き、すなわち01〜31)
H:時(24時間形式のゼロ埋め付き、すなわち00〜23)
i:分(ゼロ埋め付き、すなわち00〜59)
s:秒(ゼロ埋め付き、すなわち00〜59)
例えば今、2003年6月1日、夕方の5時19分3秒だとすると、$dtの値は "03/06/01 17:19:03" と言う値がセットされます。

$fp = fopen("data.txt", "a");では、"data.txt"と言う名前のファイルを"a"ファイルの最下位行から追加書込みモードで開く、と言う意味になります。
今回のSTEP9ではこれだけで用が足りることになります。

fwrite($fp, "$name\t$mail\t$body\t$dt\n");では、本文($body)の後ろに$dtと言う書込み日時も一緒に記録するよう追加したものです。
"\t"と言う共通の区切り記号を入れている点に注意してください。

表示部分の変更として、せっかく書込み日時も記録しましたので同じように表示することにします。
$view = explode("\t", $value);を変更することなく、$view[3]($view[2]の本文の次)に書込み日時がセットされます。
※ここが良く分からない方は一つ前のSTEP8をもう一度読んでみてください。
書込み日時は「お名前」の後ろに表示します。

今回、質問はありません...

ここまでのサンプル check!

ここまで来るとほとんど基本部分は完成です。
どうでしょうか?なんとなく雰囲気つかめたでしょうか?
(HTMLを出力している部分をお好みのデザインで書き換えれば、「ソレ」っぽくなると思います。


<<<< トップ <<< テーマトップ << サブテーマトップ < 前頁次頁 >

www.igros.net
[PR]特集 Amazon.co.jp レコメンドコンテンツ



Copyright(C) アクセス向上大失敗 All Rights Reservd.
version2.0