1・利用者が名前とコメントを入力し、発言できる。
2・利用者の過去の発言内容をテキストファイルで管理する。
3・全ての利用者の過去の発言内容を一覧で表示する。
4・最新の書き込みが一番上に表示されるようにする。
5・一覧には「名前」「コメント」「発言日時」の3つを1行ずつ表示する。
6・名前は最大20文字まで。20文字を超えたら、エラーを表示し、発言させない。
7・コメントは最大100文字以内まで。100文字超えたら、エラーを表示し、発言させない。
8・名前とコメントは必須。名前orコメントが未入力なら、エラーを表示し、発言させない。
<?php
$error = [];
$date = date('Y-m-d H:i:s');
$username = '';
$comment = '';
define('FILE_PATH', './bbs.txt');
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(isset($_POST['username']) === true) $username = trim($_POST['username']);
if(isset($_POST['comment']) === true) $comment = trim($_POST['comment']);
if ($username === '') $error[] = '名前を入力してください';
if ($username === ' ') $error[] = '名前を入力してください';
if (mb_strlen($username) > 20 ) $error[] = '名前は20文字以内で発言してください';
if ($comment === '') $error[] = 'ひとことを入力してください';
if ($comment === ' ') $error[] = 'ひとことを入力してください';
if (mb_strlen($comment) > 100) $error[] = 'ひとことは100文字までで発言してください';
if (count($error) === 0) {
$log = $username .":".$comment.":".$date;
$fp = fopen(FILE_PATH, 'a');
if ($fp !== FALSE) {
fwrite($fp, $log. "\n");
fclose($fp);
}
}
if (count($error) === 0) {
header("Location:http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
}
}
// 読み込み
$fp = fopen(FILE_PATH, 'r');
if ($fp !== FALSE) {
$text = fgets($fp);
while ($text !== FALSE) {
//エスケープ(ハッキング防止)
$lines[] = htmlspecialchars($text,ENT_QUOTES,'UTF-8');
$text = fgets($fp);
}
fclose($fp);
}
$lines = array_reverse($lines);
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ひとこと掲示板</title>
<style>
p { color: red; }
</style>
</head>
<body>
<h1>ひとこと掲示板</h1>
<?php foreach($error as $value) { ?>
<p><?php echo $value; ?></p>
<?php } ?>
<form method="post">
<label>名前: <input type="text" name="username"></label>
<label>ひとこと: <input type="text" name="comment"></label>
<input type="submit" value="送信">
</form>
<ul>
<?php
if(isset($lines)){
foreach ($lines as $line) { ?>
<li><?php print $line; ?></li>
<?php } ?>
<?php } ?>
</ul>
</body>
</html>