掲示板

メッセージをサーバーに送る

お名前:  メッセージ:

   

メッセージの履歴

13:44:35 :: あ ( あ :: 58.88.137.254 )

14:16:42 :: ニコニコ生放送co160060よろしく ( atu :: 10.10.20.9 )

14:15:55 :: その目誰の目? ( 将軍 :: 10.10.20.11 )

14:08:49 :: 掲示板作り方わからーん。。 ( ちほ :: 10.10.20.2 )

14:07:51 :: かなみ自分のこと有名人と言ってるー ( ちほ :: 10.10.20.2 )

14:01:27 :: 自分だろ笑 ( ちほ :: 10.10.20.2 )

14:01:03 :: 有名人とかいってんのだれ?!ちょーきもーい ( かなみ :: 10.10.20.1 )

14:00:55 :: 有名人とかいってんのだれ?!ちょーきもーい ( かなみ :: 10.10.20.1 )

14:00:22 :: かなみ自分のこと有名人と言ってるー ( ちほ :: 10.10.20.2 )

13:59:53 :: てすとてすとてすとてすとてすとてすとてすとてすとてすとてすとてすとてすとてすとてすと ( あかね :: 10.10.20.5 )

13:59:16 :: 鼻クソつけられた ( ちほ :: 10.10.20.2 )

13:59:08 :: あらし★あらし★おおいえ= ( かなみ :: 10.10.20.1 )

13:58:57 :: 鼻クソみたよ ( ゴリラへ :: 10.10.20.7 )

13:58:52 :: あかね以外いないだろ ( ちほ :: 10.10.20.2 )

13:58:45 :: テストやだ ( な :: 10.10.20.6 )

13:58:35 :: テストやだ ( な :: 10.10.20.6 )

13:58:31 :: だれか荒らししてね?! ( かなみ :: 10.10.20.1 )

13:58:21 :: あかね何やっちゃってんのー  あほ(^ω^) ( ちほ :: 10.10.20.2 )

13:57:51 :: あかねtあかねtあかねちあかねちあかねちhあかねちhあかねちほあかねちほあかねちほtあかねちほtあかねちほちあかねちほちあかねちほちhあかねちほちhあかねちほちほあかねちほちほあかねちほちほtあかねちほちほtあかねちほちほちあかねちほちほちあかねちほちほちhあかねちほちほちhあかねちほちほちほあかねちほちほちほあかねちほちほちほtあかねちほちほちほtあかねちほちほちほちあかねちほちほちほちあかねちほちほちほちhあかねちほちほちほちhあかねちほちほちほちほあかねちほちほちほちほあかねちほちほちほちほtあかねちほちほちほちほtあかねちほちほちほちほちあかねちほちほちほちほちあかねちほちほちほちほちhあかねちほちほちほちほちhあかねちほちほちほちほちほあかねちほちほちほちほちほあかねちほちほちほちほちほtあかねちほちほちほちほちほtあかねちほちほちほちほちほちあかねちほちほちほちほちほちあかねちほちほちほちほちほちhあかねちほちほちほちほちほちhあかねちほちほちほちほちほちほあかねちほちほちほちほちほちほあかねちほちほちほちほちほちほtあかねちほちほちほちほちほちほtあかねちほちほちほちほちほちほちあかねちほちほちほちほちほちほちあかねちほちほちほちほちほちほちhあかねちほちほちほちほちほちほちhあかねちほちほちほちほちほちほちhpあかねちほちほちほちほちほちほち ( あかね :: 10.10.20.5 )

13:57:51 :: テストやだ ( な :: 10.10.20.6 )

13:57:49 :: きさとみ ( さき :: 10.10.20.7 )

13:57:41 :: やっと見れた♪ ( ゆき :: 10.10.20.8 )

13:57:32 :: あかねあなかね ( ちほ :: 10.10.20.2 )

13:57:28 :: l.OTL \\●/ ( guns of the isigaki :: 10.10.20.11 )

13:57:13 :: abd ( 椎名理貴 :: 10.10.20.10 )

13:57:12 :: さきさきさきさきさきさきさきさきさき ( あかね :: 10.10.20.5 )

13:57:07 :: 最悪だな ( ちほ :: 10.10.20.2 )

13:57:05 :: abd ( 椎名理貴 :: 10.10.20.10 )

13:56:47 :: コエデカン♪ ( ●◯へ :: 10.10.20.1 )

13:56:43 :: さき ( ちほ :: 10.10.20.2 )

13:56:29 :: まちがっちゃった☆ ( さき :: 10.10.20.7 )

13:56:26 :: ( あかね :: 10.10.20.5 )

13:56:25 :: abd ( 椎名理貴 :: 10.10.20.10 )

13:56:14 :: ktkr ( atu :: 10.10.20.9 )

13:56:04 :: テストどーするー?笑 ( ちほ :: 10.10.20.2 )

13:55:40 :: 書き込み楽しすぎる(^ω^)ノ ( ちほ :: 10.10.20.2 )

13:55:31 :: ( さき :: 10.10.20.7 )

13:55:19 :: みんな何かかいてよ* ( kanami :: 10.10.20.1 )

13:55:16 :: みんな何かかいてよ* ( kanami :: 10.10.20.1 )

13:54:56 :: poh ( poh :: 10.10.20.4 )

13:54:13 :: poh ( かなみ :: 10.10.20.1 )

13:54:02 :: poh ( かなみ :: 10.10.20.1 )

13:53:53 :: 掲示板作っちゃおう!← ( ちほ :: 10.10.20.2 )

13:53:23 :: poh ( かなみ :: 10.10.20.1 )

13:53:22 :: ゆよー^q^ ( atu :: 10.10.20.9 )

13:53:15 :: テストorz ( chaco :: 10.10.20.2 )

13:53:15 :: poh ( かなみ :: 10.10.20.1 )

13:52:38 :: *.+I should be so lucky。+* ( ka :: 10.10.20.1 )

13:52:23 :: ky.orz ( ky :: 10.10.20.11 )

13:52:09 :: やほー(^ω^) ( chako :: 10.10.20.2 )

13:51:42 :: gyfuyfuyfudytdyt ( ffff :: 10.20.20.42 )

13:51:25 :: 開始しました。

解説

「メッセージをサーバーに送る」の部分。

<form action="h11a05.php" method="post">
<p>お名前:<input type="text" name="YourName" size="20" maxlength="20" />
 メッセージ:<input type="text" name="Message" size="80" maxlength="80" /></p>
<p><input type="submit" name="Button" value="送信" /> 
<input type="submit" name="Button" value="再読込" /> 
<input type="submit" name="Button" value="clear" /></p>
</form>

ここで、h11a05.php はこのデータを処理するphpプログラムを書くファイル名ですが、今回も自分自身になります。

clearはデータがたまりすぎた場合にクリアするボタンです。通信先のIPアドレスで自分のホストだけに許可しています。

「メッセージの履歴」の部分

<?php
$RECDFILE_NAME = "storedata.txt"; //データを保存するファイルの名前
$BASE_PATH = getcwd();            //プログラムのあるディレクトリ
$RECD_FILE = $BASE_PATH . "/" . $RECDFILE_NAME;   //ファイルのパス

$name    = $_POST['YourName'];    //formからのデータ
$message = $_POST["Message"] ;
$button  = $_POST["Button"] ;
$sender  = $_SERVER['REMOTE_ADDR'] ;  //送信してきたアドレスをウェブサーバーから教えてもらう

if ( $button == "再読込" ) $name="";

if ( $name ){  //名前が入っている時だけ記録する。
   $time=date("H:i:s");            //時刻を記憶しておく
   $fp = fopen($RECD_FILE,"a");    //ファイルを追記で開く
   stream_set_write_buffer($fp, 0);    //バッファを禁止
   flock($fp, LOCK_EX);            //ファイルを占有にして書き込む
   fputs($fp, "<p>$time :: $message ( $name :: $sender )</p>\n");
   flock($fp, LOCK_UN);            //ファイルの占有を解除
   fclose($fp);                    //ファイルを閉じる(保存)
}
if ( $button == "clear" ){          //押されたのがclearだったら
   if ( $sender == "10.10.200.41"){  //送信者のアドレスが指定のものだったら
      $time=date("H:i:s");            //時刻を記憶しておく
      $fp = fopen($RECD_FILE,"w");    //ファイルを書込で開く
                                    //(同じ名前のファイルがあれば消去される)
      stream_set_write_buffer($fp, 0);
      flock($fp, LOCK_EX);    
      fputs($fp, "<p>$time :: 開始しました。</p>\n");
      flock($fp, LOCK_UN);    
      fclose($fp);            
   }
}

if ( file_exists($RECD_FILE) ){     //ファイルがあった時だけおこなう
   $result = file($RECD_FILE);          //ファイルを読んで配列に格納
   $result = array_reverse($result);    //配列の順序を逆にする
   foreach($result as $line){           //配列の内容を全部書き出す
      print $line;
   }
}
?>

このままインターネットに公開してはいけません

データをhtmlファイルを置く場所においてはいけない
ここは基本的に公開するデータを置く場所です。今回は公開する目的なので問題ないですが、 名前や住所などを書き込んでもらい他の人が書いたものは見えないようにしておくという設計をすることがあります。この場合に表示しないから見えないと思うのは間違いです。
アドレス欄(http://で始まる入力欄)の最後のファイル名をstoredata.txtにして、Enterキーを押すと全部そのまま見えてしまいます。 ウェブの公開範囲外だけれどもphpがアクセスできるという場所を作ってそこに保管します。
タブが書けてしまう。
リンクを書いて仕掛けのあるページに誘導したりできてしまいます。送られた文字列から " < " や " & " を取り去ったり、" &lt; " や " &amp; " に書き換えたりします。
自動投稿ロボット対策
入力フィールドをひとつ新設して、ロボットにはわからない文字を入力してもらう。たとえば変形した文字の画像を判読して入力してもらう。たとえば を表示して、「sotead」と入力してもらうなどです。
本当はデータベースで
ファイルに書くやり方は上記の様にセキュリティ上も問題がありますが、データが多くなったときに作業が遅くなったり、最新のデータのみを1ページに表示してあとは次のページにするとか、スレッドにわけるとかしようとすると困難になったりします。これを解決するのはデータベースです。

ウェブページ(Feb.2010)
聖愛中学高等学校
http://www.seiai.ed.jp/
Feb.2009 初稿