新設した一言掲示板は一応動く状態になったものの、自己流なのですっげー不安です。エロい人たちよかったら添削してやってください・・・。
/*=====================================
*P-Lounge
*2004/12/14 by Peric
*=====================================*/
/* 定数設定(ラウンジの設定) */
define ("TITLE",'P-Lounge'); //ページタイトルの設定
define ("LOUNGE_PHP",'p-lounge.php'); //ラウンジPHPファイルの名前
define ("MAX_LINE",30); //最大表示数
define ("MAX_LOG",60); //最大ログ保持数
define ("MAX_NAME",20); //Name文字数制限
define ("MAX_MESSAGE",400); //Message文字数制限
define ("LOG_FILE_PATH",'log.txt'); //ログ・ファイルのパス
/* クッキー読み込み */
$name = $_COOKIE['name'];
$color = $_COOKIE['color'];
/* 投稿情報の取得 */
$name = htmlspecialchars($_POST['name']);
$message = htmlspecialchars($_POST['message']);
$color = ($_POST['color']);
$time = date("y/m/d H:i");
/* エラー・チェック変数初期化 */
$namenum_error_check = TRUE;
$messagenum_error_check = TRUE;
/* エラー・チェック */
if (strlen($name) > MAX_NAME){
$namenum_error_check = FALSE;
$name = "";
}
if (strlen($message) > MAX_MESSAGE){
$messagenum_error_check = FALSE;
$message = "";
}
/* ログ・ファイルを1行ずつ配列$linesに格納 */
$lines = file(LOG_FILE_PATH);
/* エラーがなければ、投稿情報を配列$linesの先頭に格納 */
if ($name != "" && $message != ""){
setcookie('name', $name, time()+3600*24*30);
setcookie('color', $color, time()+3600*24*30);
$log_line = "$name\t$message\t$color\t$time\n";
array_unshift($lines, $log_line);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<title><?php print (TITLE) ?></title>
</head>
<body>
<h1><?php print (TITLE) ?></h1>
<form method="post" action="<?php print LOUNGE_PHP ?>">
Name :
<input class="textbox" type="text" name="name" value="<?php print $name ?>" size="15" maxlength="<?php print(MAX_NAME) ?>">
Message :
<input class="textbox" type="text" name="message" size="50" maxlength="<?php print(MAX_MESSAGE) ?>">
<br>
Color :
<input type="radio" name="color" value="blue" <?php if ($color=="blue" || $color==""){print "checked";}?>>青
<input type="radio" name="color" value="green" <?php if ($color=="green"){print "checked";}?>>緑
<input type="radio" name="color" value="red" <?php if ($color=="red"){print "checked";}?>>赤
<input type="radio" name="color" value="brown" <?php if ($color=="brown"){print "checked";}?>>茶
<input class="button" name="write" type="submit" value="送信">
</form>
<?php
/* Name文字制限エラーの表示出力 */
if ($namenum_error_check == FALSE){
print "エラー!<br>\n";
print "Nameの文字数が多すぎます。半角文字".MAX_NAME."字以内でお願いします。\n";
print "<hr>\n";
}
/* Message文字数制限エラーの表示出力 */
if ($messagenum_error_check == FALSE){
print "エラー!<br>\n";
print "Messageの文字数が多すぎます。半角文字".MAX_MESSAGE."字以内でお願いします。\n";
print "<hr>\n";
}
/* 表示数、記録するログ数の設定 */
$log_count = count($lines);
if ($log_count < MAX_LINE){
$disp_log_num = $log_count;
} else {
$disp_log_num = MAX_LINE;
}
if ($log_count < MAX_LOG){
$rec_log_num = $log_count;
} else {
$rec_log_num = MAX_LOG;
}
/* ラウンジ本文表示 */
for($i = 0;$i < $disp_log_num;$i++) {
$items = explode("\t", $lines[$i]);
print "<span style = \"color : $items[2]\">$items[0]</span> : ";
print "$items[1]";
print " ($items[3])";
print "\n";
print "<hr>\n";
}
/* ログ・ファイルの保存 */
@$fp = fopen(LOG_FILE_PATH, 'w') or exit("書き込み失敗!ファイルを開けませんでした。");
set_file_buffer($fp, 0);
flock($fp,LOCK_EX);
for ($i = 0;$i <$rec_log_num;$i++){
fputs($fp,$lines[$i]);
}
flock($fp,LOCK_UN);
fclose($fp);
?>
<p><a href ="http://peric.abz.jp/">P-Lounge v0.1a</a></p>
</body>
</html>
もちろんCSSや画像で見た目は違いますが、もともとのソースはこんな感じです。
ファイルのロックやら、文字数制限のエラーチェックやら、自分なりにやってみたんですが、まだまだセオリーが理解できてないようです。
当面の目標は、納得のいく使いやすい掲示板をつくることだけど、先は険しそうだなぁ。
PHPと言えばDB連携!
ということでMySQLなBBSをきぼん〜ムフ