LoginSignup
1
2

More than 1 year has passed since last update.

【PHP】PHP課題・一言掲示板

Last updated at Posted at 2021-06-01

image.png

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>

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2