Web掲示板を作成しました(PHP)

PHPで***Web掲示板***を作成しました。
実装した機能は
1.NGワードは投稿できない
2.スペースのみ、0文字はNG
です。

投稿フォーム(___index.php___)

```PHP
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BBS掲示板</title>
    <link rel="stylesheet" href="common.css">
</head>
<body>

</body>
    <form method="post" action="entry.php">
        <label>タイトル</label>
        <br>
        <input type="text" name="title" >
        <br>
        <label>書き込み内容</label>
        <br>
        <textarea id="sum" name="sum" rows="3" cols="35">
        </textarea>
        <br>
        <input type="submit" value="送信">
        <br>
    </form>

    <p class="ichiran"> 投稿一覧 </p>
    <?php
        $fp = file_get_contents("bbs.txt");
        echo $fp;
    ?>
</html>
```

ファイル書き込み処理(___entry.php___)
```PHP
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BBS掲示板</title>
    <link rel="stylesheet" href="common.css">
</head>
<body>
    <?php
        // メッセージ出力変数の定義
        $msg1 = "タイトルを入力してください";
        $msg2 = "内容を入力してください";
        // メッセージ出力配列の定義
        $msg_arr = [];
        // NGワードリスト配列の定義
        $list = ["死ね","まんこ","ちんこ","自殺しろ","ガイジ","障害","カタワ"];

        // リンク先表示関数
        function out_url() {
            echo "<a href=index.php>掲示板へ</a>";
        }

        // 文字列の長さ取得関数
        function count_str($str){
            $str = str_replace(array(" ","　"),"",$str);
            return strlen($str);
        }

        // NGワードチェック処理
        function ng_word($str){
            global $list;
            $ng_count = 0;
            foreach($list as $word){
                $w_str = "/" . $word . "/";
                $a = preg_match($w_str,$str);
                if ($a == true){
                  $ng_count += 1;
                }
            }
            return $ng_count;

        }


        // タイトルを取得する変数
        $title = $_POST["title"];
        #入力チェック関数
        $count1 = count_str($title);
        // 入力チェック確認
        if($count1 == 0){
            array_push($msg_arr,$msg1);
        }
        // 内容を取得する変数
        $sum = $_POST["sum"];
        // 入力チェック関数
        $count2 = count_str($sum);
        // 入力チェック確認
        if($count2 == 0){
            array_push($msg_arr,$msg2);
        }
        $num = count($msg_arr);
        #入力されていない項目があれば表示して処理を終了する
        if($num >= 1){
            foreach($msg_arr as $msg){
                echo "<p class='errmsg'>{$msg}</p>";
            }
            out_url();
            exit();
        }

        $title_check = ng_word($title);
        if ($title_check >= 1){
            echo "<p class='ng1'>タイトルにNGワードが含まれています</p>";
            out_url();
            exit();
        }

        $sum_check = ng_word($sum);
        if ($sum_check >= 1){
            echo "<p class='ng1'>内容にNGワードが含まれています</p>";
            out_url();
            exit();
        }

        // 日付を取得
        $date1 = date("Y年m月d日 H時i分s秒");
        // ミリ秒を取得
        $w_time = microtime(true);
        $w_array = explode('.',$w_time);
        $mtime = $w_array[1];
        $microtime = intval($mtime / 100);
        if($Microtime < 10){
            $microtime = "0" . $microtime;
        }

        // ファイルに書き込む内容を変数に代入する。
        $result = "<br>". "日付:" .$date1 . $microtime . "<br>" . "タイトル:" . $title . "<br>" . "内容:" . $sum;

        // 書き込みモードでファイルを開く
        $write1 = file_put_contents("bbs.txt", $result,FILE_APPEND);

        // ファイルの書き込みチェック処理
        if($write1){
            echo "<p class='fmsg'>ファイルの書き込みが成功しました。</p>";
        } else {
            echo "<p class='fmsg'>ファイルの書き込みに失敗しました。</p>";
        }

        out_url();

    ?>
</body>

</html>
```

CSSファイル(***common.css***)

```CSS
@charset 'utf8';

/* エラーメッセージのCSS */
.errmsg {
  font-size:20px;
  color:#D8A125;
  font-weight:bold;
}

/* NGワードのCSS */
.ng1 {
  font-size:20px;
  color:#F200F6;
  font-weight:bold;
}

/* 投稿一覧タグのCSS */
.ichiran {
  color:#c10763;
  font-size:20px;
}

/* ファイルの書き込み成功、失敗メッセージの定義 */
.fmsg {
  color:#0023F7;
  font-size:20px;
  font-weight:bold;
}
```
ファイル処理を学習した後に実装してみてください。