【PHP】PHP作业·一句话留言板
1・用户可以输入姓名和评论,并可以发表。
2・用户的过去发言内容将以文本文件的形式进行管理。
3・显示所有用户过去的发言内容列表。
4・最新的评论将显示在最上方。
5・列表将逐行显示“姓名”、“评论”和“发言日期时间”三项信息。
6・姓名最多可以输入20个字符。如果超过20个字符,则显示错误信息,并不允许发言。
7・评论最多可以输入100个字符。如果超过100个字符,则显示错误信息,并不允许发言。
8・姓名和评论为必填项。如果姓名或评论未输入,则显示错误信息,并不允许发言。
<?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>