phpの簡易掲示板の作り方

<h2>画面表示部分を作成する</h2>
まずは、画面に表示される個所を作成していきます。

```php:index.php
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
    <li><!--ここに投稿が表示される--></li>
</ul>
</body>
</html>
```
ここまでは、ほぼほぼHTMLの内容ですので理解できると思います。

また。formの送信先はformタグのaction属性で指定しますが、今回は同じファイルに向けて送信を行うため空欄で大丈夫です。

今後の簡単な流れを説明すると、HTMLのformタグで投稿内容を送信し、PHP側で送信された内容を受け取り、再度HTMLで投稿を表示できるように渡してあげるといった流れになります。

<h2>投稿内容を受け取る</h2>
次は送られてきた投稿内容をPHP側で受け取り編集する箇所を説明していきます。

```php:index.php
<?php

// ファイルの指定
$dataFile = 'datafile.dat';

//name="send_message"のPOST送信があった時
if(isset($_POST["send_message"])){
    //送信されたname="message"とname="user_name"の値を取得する
    $message = trim($_POST['message']);
    $user = trim($_POST['user_name']);

    //messageが空じゃなかったら
    if(!empty($message)){

        //userが空の場合、名無しにする
        if(empty($user)){
          $user = "名無し";
        }
        //日付を取得する
        $postDate = date('Y-m-d H:i:s');
        //ファイルに書き込むメッセージを作成する
        $newData  = $message." / ".$user." / ".$postDate."\n";
        //ファイルを開く
        $fp = fopen($dataFile,'a');
        //ファイルに書き込む
        fwrite($fp,$newData);
        //ファイルを閉じる
        fclose($fp);
    }
}
?>
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
    <li><!--ここに投稿が表示される--></li>
</ul>
</body>
</html>
```
まず、データを書き込むファイルを指定しています。

そしてformからデータがpost送信された場合に、メッセージおよびユーザー名を受け取ります。

また、日付も掲示板に表示させたいので、投稿された日付の取得も行います。

その後、指定したファイルに書き込むためのデータを作成し、ファイルを開き・書き込み・ファイルを閉じる作業を行っています。
<h2>データを取得し表示させる</h2>

```php:index.php
<?php

// ファイルの指定
$dataFile = 'datafile.dat';

//エスケープする関数
function h($s){
return htmlspecialchars($s,ENT_QUOTES,'UTF-8');
}

//name="send_message"のPOST送信があった時
if(isset($_POST["send_message"])){
    //送信されたname="message"とname="user_name"の値を取得する
    $message = trim($_POST['message']);
    $user = trim($_POST['user_name']);

    //messageが空じゃなかったら
    if(!empty($message)){

        //userが空の場合、名無しにする
        if(empty($user)){
          $user = "名無し";
        }
        //日付を取得する
        $postDate = date('Y-m-d H:i:s');
        //ファイルに書き込むメッセージを作成する
        $newData  = $message." / ".$user." / ".$postDate."\n";
        //ファイルを開く
        $fp = fopen($dataFile,'a');
        //ファイルに書き込む
        fwrite($fp,$newData);
        //ファイルを閉じる
        fclose($fp);
    }
}
//一行ずつデータを取り出して配列に入れる
$post_list = file($dataFile,FILE_IGNORE_NEW_LINES);
//逆順に並べ替える
$post_list = array_reverse($post_list);
?>
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
<!--post_listがある場合-->
<?php if (!empty($post_list)){ ?>
    <!--post_listの中身をひとつづつ取り出し表示する-->
    <?php foreach ($post_list as $post){ ?>
    <li><?php echo h($post); ?></li>
    <?php } ?>
<?php }else { ?>
    <li>まだ投稿はありません。</li>
<?php } ?>
</ul>
</body>
</html>
```
まず、データを表示する際のエスケープ処理を独自関数として定義しています。function h($s)の部分です。

また、前回まででファイルにデータを書き込むことができているので、その書き込まれたファイルを取り出し、変数に格納してあげます。
ファイルのデータは昇順になっているので、降順にしたい場合はreverse関数を用いて逆に並べ替えることができます。

その次に、HTML部分でデータの表示を行います。

まず、条件分岐でファイルから取得したpost_listがあるかどうかのif文を書いています。
ある場合はその内容を表示し、ない場合は投稿はありませんというメッセージを表示します。

また、post_listがある場合は、リストとして送られてくるので、foreach文でループ処理を行い、1行ずつ表示してあげます。（先ほど定義したエスケープ処理の関数も使います。）


こんな感じで簡易的ではありますが、掲示板を作成することができます。