【PHP】PHP作业·一句话留言板

image.png

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>

广告
将在 10 秒后关闭
bannerAds