多機能掲示板
ホスト情報やブラウザ情報を取得出来るようにして、更に題名色も色々と選べるようにしました。それと、一番の変更点は、記事の削除ボタンを記事一つ一つに付けて、記事の指定をラジオボタンに替えた事です。見た目がかなりスッキリしたと思います。第一、記事の削除が非常に楽になりました(^。^)
それと、今までHomePageの書き込み欄を設けていなかったので、今回追加しました。リンクを貼る時は画像を使うようにしましたので、適当な小さなホーム用画像をご用意下さい。
<HTML> <HEAD> <TITLE>多機能掲示板</TITLE> </HEAD> <BODY TEXT="black" BGCOLOR="white" LINK="red" VLINK="red"> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" NAME="line"> <P><INPUT TYPE="HIDDEN" NAME="action" SIZE="-1" VALUE="regist"></P> <P ALIGN="CENTER"><FONT SIZE="6" COLOR="#000099">多機能掲示板</FONT></P> <P ALIGN="CENTER"><FONT SIZE="2" COLOR="red">お名前とコメントは必ず書き込んで下さい。エラーになります。(何も反応しないよ!)記事の最大記録数は100件です。</FONT></P> <BLOCKQUOTE> <P> <TABLE BORDER="0" WIDTH="88%"> <TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">お名前 </TD> <TD WIDTH="88%"><INPUT TYPE="TEXT" NAME="name" SIZE="15"></TD> </TR> <TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">E-mail </TD> <TD WIDTH="88%"><INPUT TYPE="TEXT" NAME="email" SIZE="25"></TD> </TR> |
表組みの比率を12%と88%に変更しました。 |
<TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">HomePage </TD> <TD WIDTH="88%"><INPUT TYPE="TEXT" NAME="hp" SIZE="40"></TD> </TR> |
ホームページのURLの書き込み欄を、新たに設けました。 |
<TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">題目 </TD> <TD WIDTH="88%"><INPUT TYPE="TEXT" NAME="subject" SIZE="40"></TD> </TR> |
従来と同じ。 |
<TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">題目色 </TD> <TD WIDTH="88%"> <INPUT TYPE="RADIO" NAME="scolor" VALUE="blue" checked><B><FONT COLOR="blue">青</FONT></B> <INPUT TYPE="RADIO" NAME="scolor" VALUE="red"><B><FONT COLOR="red">赤</FONT></B> <INPUT TYPE="RADIO" NAME="scolor" VALUE="green"><B><FONT COLOR="green">緑</FONT></B> <INPUT TYPE="RADIO" NAME="scolor" VALUE="#996600"><B><FONT COLOR="#996600">茶</FONT></B> <INPUT TYPE="RADIO" NAME="scolor" VALUE="#660099"><B><FONT COLOR="#660099">紫</FONT></B> </TD> </TR> |
題目色を選べられるように、新たにラジオボタンを設置しました。 |
<TR> <TD WIDTH="12%" ALIGN="RIGHT"> <P ALIGN="RIGHT">コメント </TD> <TD WIDTH="88%"><TEXTAREA NAME="comment" ROWS="4" COLS="60"></TEXTAREA></TD> </TR> <TR> <TD WIDTH="12%"> <P ALIGN="RIGHT">削除キー </TD> <TD WIDTH="88%"><INPUT TYPE="PASSWORD" NAME="pass" SIZE="7"><FONT SIZE="2" COLOR="#CC0000"> *半角英数4文字以上推奨。削除キーを設定すると、いつでもご自分の記事を削除できます。</FONT></TD> </TR> <TR> <TD WIDTH="12%"> </TD> <TD WIDTH="88%"> |
「削除キー」の注意書きの位置を変更しました。この文字列をすっきり入れる為に、表組みの比率を変更した訳です(^^ゞ |
<?php if ($flags == 'return') { print "<input type=submit value=[" . $return . "]に返信>\n"; print "<input type=hidden name=ress value=$code>\n"; } else { print "<INPUT TYPE=SUBMIT VALUE=書き込み/更新> <INPUT TYPE=RESET VALUE=リセット>\n"; } ?> </TD> </TR> </TABLE> </FORM> <HR> |
記事番号の指定にラジオボタンを使うようにしたので、ここの返信用記事の内容表示を「題目」に変更しました。変数名は$returnとなっています。 |
//===================初期設定===================== //時間の取得 $now = date("Y/m/d H:i:s"); $data_file = "./g_book5.dat"; //データファイル名 $res_file = "./pare.dat"; //親記事保存用データファイル名 $data_max = 100; //データ最大記録数 $page_view = 10; //1ページの記事表示件数 $homegif = "./home.gif"; //ホームページへのリンク用画像 $passwd = "1234"; //管理者用パスワード |
新たに、ホームページにリンクを貼る為の画像を設定しました。 |
//===============データの削除================== if ($action == "delete") { if(($delcode != "") && ($password != "")){ $delfile = file($data_file); $fp = fopen($data_file, "w"); for($i=0; $i<sizeof($delfile); $i++){ list($dcode,$dress,$dname,$demail,$dhp,$dsubject,$dscolor,$dcomment,$dpass,$dnow,$dhost,$dagent) = split( ",", $delfile[$i]); if (($password == $dpass) || ($password == $passwd)) { if ($delcode != $dcode) { fputs($fp,$delfile[$i]); } } else { fputs($fp,$delfile[$i]); } } fclose($fp); } } |
ホームページ名と題目色名とホスト名とブラウザ名を取得する為の変数を追加しました。 |
//===============インライン関数=================== function inline_link($link){ $link = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$link); return $link; } |
★string ereg_replace ( string pattern, string replacement, string strinf )関数・・・引数string を走査して引数pattern にマッチしたテキストを引数replacement で置換します。マッチしなかった場合は、元の文字列が返されます。 |
//===============データの書き込み================= if ($action == "regist") { if (($name != "") && ($comment != "")) { |
従来と同じ。 |
//ホスト名を取得 $host = getenv("REMOTE_HOST"); $addr = getenv("REMOTE_ADDR"); if($host == "" || $host ==$addr){ $host = gethostbyaddr($addr); } //訪問者のブラウザ名を取得 $agent = getenv("HTTP_USER_AGENT"); |
環境変数からホスト名とブラウザ名を取得しています。 ★string gethostbyaddr ( string ip_address )関数・・・引数ip_address で指定したインターネットホストのホスト名を返します。エラーが発生した場合、引数ip_address を返します。 |
//ここから書き込みデータの調整 $name = htmlspecialchars($name); //特殊文字のHTMLエントリへの変換 $name = nl2br($name); //HTML改行文字の挿入 $name = str_replace("\r", "", $name); //文字列の置換 $name = str_replace("\n", "", $name); $email = htmlspecialchars($email); $email = nl2br($email); $email = str_replace("\r", "", $email); $email = str_replace("\n", "", $email); |
従来と同じ。 |
$hp = htmlspecialchars($hp); $hp = nl2br($hp); $hp = str_replace("\r", "", $hp); $hp = str_replace("\n", "", $hp); |
変数$hpの値を調整する為の処理を追加しました。 |
$subject = htmlspecialchars($subject); $subject = nl2br($subject); $subject = str_replace("\r", "", $subject); $subject = str_replace("\n", "", $subject); $comment = htmlspecialchars($comment); $comment = nl2br($comment); $comment = str_replace("\r", "", $comment); $comment = str_replace("\n", "", $comment); //ログファイルの区切文字(",")と区別するために文字コード(,)に書き換える。 $ress = str_replace(",", ",",$ress); $name = str_replace(",", ",",$name); $email = str_replace(",", "",$email); |
従来と同じ。 |
$hp = str_replace(",", "",$hp); | 変数$hpの処理を追加しました。 |
$subject = str_replace(",", ",",$subject); $comment = str_replace(",", ",",$comment); //インラインリンクを実現(URLのみ) $comment = inline_link($comment); //記事番号をゲット $message = file($data_file); if(sizeof($message) < 1){ $new_code = 1; } else { list($ncode,$nress,$nname,$nemail,$nhp,$nsubject,$nscolor,$ncomment,$npass,$nnow,$nhost,$nagent) = split( ",", $message[0]); $new_code = $ncode + 1; } //配列要素を文字列により連結 $input_msg = implode(",", array($new_code,$ress,$name,$email,$hp,$subject,$scolor,$comment,$pass,$now,$host,$agent)); $fp = fopen($data_file, "w"); rewind($fp); fputs($fp, "$input_msg\n"); //最大記録数の調整 if($data_max <= sizeof($message)) $msg_num = $data_max - 1; else $msg_num = sizeof($message); for($i = 0; $i < $msg_num; $i++){ fputs($fp, $message[$i]); } fclose($fp); unset($message); } } |
ホームページ名と題目色名とホスト名とブラウザ名を取得する為の変数を追加しました。 |
//==================親記事だけを抜き出す================= $message = file($data_file); $fp = fopen($res_file, "w"); for($i=0; $i<sizeof($message); $i++){ list($rcode,$rress,$rname,$remail,$rhp,$rsubject,$rscolor,$rcomment,$rpass,$rnow,$rhost,$ragent) = split( ",", $message[$i]); if($rress == ""){ fputs($fp,$message[$i]); } } fclose($fp); unset($message); |
ホームページ名と題目色名とホスト名とブラウザ名を取得する為の変数を追加しました。 |
//==================HTML表示====================== //1ページ当たりの表示件数の調整 $message = file($data_file); $res_msg = file($res_file); $msg_count = count($res_msg); if($pline == "") $p_line = 0; else $p_line = $pline; $end_data = $msg_count - 1; $page_end = $p_line + ($page_view - 1); if($page_end >= $end_data) $page_end = $end_data; |
従来と同じ。 |
for($i=$p_line; $i<=$page_end; $i++){ list($code2,$ress2,$name2,$email2,$hp2,$subject2,$scolor2,$comment2,$pass2,$now2,$host2,$agent2) = split(",", $res_msg[$i]); |
ホームページ名と題目色名とホスト名とブラウザ名を取得する為の変数を追加しました。 |
//親記事の表示 print "<form method=POST action=$PHP_SELF>\n"; print "<input type=radio name=delcode value=$code2>\n"; print "<font size=4 color=$scolor2><b>$subject2</b></font>\n"; if($email2 != "") print " <a href=mailto:$email2><b>$name2</b></a>\n"; else print " <b>$name2</b>\n"; |
記事番号の指定にラジオボタンを使うように変更しました。 題目色を変数で指定しています。 |
if($hp2 != ""){ print " <a href=$hp2 target=_top><img src=$homegif border=0></a>\n"; } |
ホームページにリンクを貼る処理を追加しました。 |
print " <font size=2 color='green'>$now2</font>\n"; print "<input type=hidden name=action value=delete>\n"; print "<font size=2>パスワード:</font><input type=password size=7 name=password>\n"; print "<input type=submit value=削除>\n"; print "</form>\n"; print "<blockquote>$comment2<br><br>\n"; print "<form method=POST action=$PHP_SELF>\n"; print "<input type=submit value=返信>\n"; print "<input type=hidden name=code value=" . $code2 . ">\n"; print "<input type=hidden name=return value=" . $subject2 . ">\n"; print "<input type=hidden name=flags value=return>\n"; print "<font size=2>[$host2] $agent2</font>\n"; print "</form></blockquote>\n"; |
又、返信記事の情報を送る際に、題目名も返すようにしました。 更に、ホスト名とブラウザ名も表示するようにしています。 |
//返信記事の表示 for($j=0; $j<sizeof($message); $j++){ list($code3,$ress3,$name3,$email3,$hp3,$subject3,$scolor3,$comment3,$pass3,$now3,$host3,$agent3) = split(",", $message[$j]); if ($code2 == $ress3) { print "<blockquote>\n"; print "<form method=POST action=$PHP_SELF>\n"; print "<input type=radio name=delcode value=$code3>\n"; print "RE:<font color=$scolor3><b>$subject3</b></font>\n"; if ($email3 != "") { print " <a href=mailto:$email3><strong>$name3</strong></a>\n"; } else { print " <strong>$name3</strong>\n"; } |
ホームページ名と題目色名とホスト名とブラウザ名を取得する為の変数を追加しました。 記事番号の指定にラジオボタンを使うように変更しました。 題目色を変数で指定しています。 |
if($hp3 != ""){ print " <a href=$hp3 target=_top><img src=$homegif border=0></a>\n"; } |
ホームページにリンクを貼る処理を追加しました。 |
print " <font size=2 color='green'>$now3</font>\n"; print "<input type=hidden name=action value=delete>\n"; print "<font size=2>パスワード:</font><input type=password size=7 name=password>\n"; print "<input type=submit value=削除>\n"; print "<blockquote>$comment3<br><br>\n"; print "<font size=2>[$host3] $agent3</font></blockquote>\n"; print "</form></blockquote>\n"; } } print "<hr>\n"; } |
更に、ホスト名とブラウザ名も表示するようにしています。 |
unset($res_msg); unset($message); $next_line = $page_end + 1; if($page_end != $end_data){ print "<form method=Post action=$PHP_SELF>\n"; print "<input type=hidden name=pline value=$next_line>\n"; print "<input type=submit value=次のページ>\n"; print "</form>\n"; } ?> </BLOCKQUOTE> <div align=right><font size=-1>Powered by <a href=http://www.komonet.ne.jp/>KOMONET</a></font></div> </BODY> </HTML> |
記事の削除フォームは、各記事に1つずつ付けるようにしました。記事指定のラジオボタンの採用との兼ね合いで変更になりました。 |
*上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。