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

ファイルからの表示 -簡単PHP掲示板講座 STEP8-

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



STEP8
・記録したファイルから投稿データを取出し表示する
  [STEP7の問題点] 記録しただけで表示に繋げていないため見かけ上、変化がありません。
  [要点] 送信で引渡されたデータを先に記録し、再度ファイルから取出し表示します。
参考ソースプログラム
解説
<?php
# プログラム bbs.php STEP8
 $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);
  $fp = fopen("data.txt", "w");
   fwrite($fp, "$name\t$mail\t$body\n");
  fclose($fp);
 }
 echo '
  <html>
  <head>
  <title>PHP-BBS</title>
  </head>
  <body>
  <h1>PHP-BBS</h1>
  STEP8<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<br>"; }
   else { echo "お名前:<a href=\"mailto:$mail\">$name</a><br>"; }
   echo "本文:$body<br>";
 }
 echo '</body></html>';
?>
ちょっと難しくなってきます。
$data = file("data.txt");はPHPのファイル命令"file"で"data.txt"と言う名前のファイルから中身を丸ごと全部読み出し、$dataと言う任意の変数に配列として格納します。
PHP file関数

foreach ($data as $value) { 処理; }はPHPの配列反復処理命令で、$data配列の先頭から1行単位で$valueと言う任意の変数に格納します。
この命令に対応した" } "が出現した時点で最初に戻り、$data配列の2行目を$valueへ格納し、$data配列が空(NULL)値になるまで繰返します。
$view = explode("\t", $value);はPHPの文字列を文字列により分割する命令で、$value内から"\t"を分割文字として、結果を$viewと言う任意の変数に配列として格納します。
data.txtファイルに記録する時、"お名前\tメール\t本文"と言うスタイルで格納しましたので、"\t"で分割すると、"お名前","メール","本文"を取出すことができます。

PHP foreach関数

$name=、$mail=、$body=は、先にプログラムした表示部分を生かすため、あえて対応する$viewの値を入替えています。
では質問です!
$name=、$mail=、$body=とせず、直接$viewの値を使う場合、if ($mail=="") ...以降の表示部分はどう書き換えれば良いでしょうか?
答えは最後に...

これで、投稿データをファイルに記憶し、表示する場合は再度ファイルから取出し表示するようになりましたので、投稿データは消えることなく何回でも表示されるようになります。

ここまでのサンプル check!

次は投稿データを時系列に逐次記録してみます。

答え:
if ($view[1]=="") { echo "お名前:$view[0]<br>"; }
else { echo "お名前:<a href=\"mailto:$view[1]\">$view[0]</a><br>"; }
echo "本文:$view[2]<br>";


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

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



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