PHP 簡易掲示板の作成① 〜投稿機能〜

以下の機能の付いた簡易掲示板を作成する。
1. 投稿機能：　{番号}<>{名前}<>{コメント}<>{投稿された時間} という形で投稿内容が表示されるようにする。また、各投稿にパスワードを設定できるようにする。
2. 削除機能：指定した番号の投稿を削除できるようにする。また、パスワード認証も行う。
3. 編集機能：指定した番号の投稿を編集できるようにする。ここでもパスワード認証を行う。



今回は、1. **投稿機能**の実装を目指す。

#手順１　入力フォームの作成#
名前、コメント、パスワードの入力欄を作り、次のtoukou_1.phpにPOST送信する。

```keijiban.php
<html>
<body>
<form action="toukou_1.php" method="post"> <!--ファイル、methodの指定-->
  <table border="1">
    <tr>
      <td>名前</td>
      <td><input type="text" name="name" required></td> <!--名前の入力フォーム作成-->
　　　 <td>コメント</td>
      <td><input type="text" name="comment" required></td> <!--コメント入力フォーム作成-->
      <td>パスワード設定
      <td><input type="text" name="pass" required></td> <!--パスワード入力フォーム作成-->
      <td colspan="2" align="center">
        <input type="submit" value="送信"> <!--送信ボタン作成-->
    </tr>
  </table>
</form>
</body>
</html>
```
#手順２　入力データの保存#
toukou_1.txtにPOSTで受け取った文字列を保存する。{パスワード}<>{番号}<>{名前}<>{コメント}<>{投稿された時間}の形式で保存する。

```toukou_1.php
<?php
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $date = date("Y/m/d H:i:s");
    $pass = $_POST['pass'];
    
    $filename = 'toukou_1.txt'; /*保存先にファイル名を$filenameに代入*/
    
    $fp = fopen($filename,'a'); /*ファイルを追記モードで開く*/
    
    fwrite($fp,$pass.' <> '.$name.' <> '.$comment.' <> '.$date."\n"); /*情報をファイルに書き込む*/
    
    fclose($fp); /*ファイルを閉じる*/
?>

<?php
    unlink('toukou_2.txt'); /*ここでtoukou_2.txtを削除するコードを入れておく。理由は後ほど。*/
    ?>

<?php
    header('Location:toukou_2.php'); /*次の処理を行うファイルへ移動させる*/
    ?>
```

#手順３　実際に表示する投稿内容の作成#
現在、toukou_1.txtにはパスワードも入力してある状態なので、別のファイルtoukou_2.txtにパスワードを削除し投稿番号を追加した、実際に掲示板としてブラウザ上に表示する内容を保存する。

```toukou_2.php
<?php
    
$data = file_get_contents('toukou_1.txt'); /*toukou_1.txtを読み込む*/
$element = explode( "\n",$data);/*toukou_1.txtを各行で分割する。file関数でも良い？*/
$cnt = count( $element ); /*分割した要素の数（行数）をカウントする*/

    for( $i=0;$i<$cnt;$i++ ){ /*行末までループする*/
    
    $fp = fopen("toukou_2.txt","a"); /*追記モードで開く*/
    $num = count( file('toukou_2.txt')); /*ファイルのデータの行数をかぞえて＄numに代入*/
    $num++; /*投稿番号の取得*/
        $youso = explode(" <> ",$element[$i]); /*各１行を　＜＞　で分割する。*/
    fwrite($fp,$num.' <> '.$youso[1].' <> '.$youso[2].' <> '.$youso[3]."\n"); /*パスワード（$youso[0]）以外の情報をファイルに書き込む*/
    fclose($fp);
    }
?>

<?php
    header('Location:toukou_3.php'); /*次の処理を行うファイルへ移動する*/
    ?>
```

#手順４　送信完了の確認と投稿内容の表示#
利用者の利便性を考え、投稿を行った後に投稿完了のメッセージを表示する。また、投稿フォームの上に投稿された内容を表示する。

```toukou_3.php
<?php
echo "名前とコメントを送信しました";
?>

<html>
<body>
<form>
<input type="button" onClick="location.href='keijiban.php'" value="簡易掲示板に戻る">
</form>
</body>
</html>
<!--掲示板に移動するボタンを作成する-->
```

フォームを作成したkeijiban.phpにtoukou_2.txtの内容を表示するプログラムを組み込む。

```keijiban.php
<html>
<head><title>簡易掲示板</title></head>
<body>
簡易掲示板<br /><br />

<?PHP
    $file_name = "toukou_2.txt"; /*読込ファイルの指定*/
    $ret_array = file( $file_name ); /*ファイルを全て配列に入れる*/
    for( $i = 0; $i < count($ret_array); ++$i ) { /*行末までループする*/

        echo( $ret_array[$i] . "<br />\n" ); /*配列を順番に表示する*/

    }
    ?>

<!--これより下は手順１で作成したもの-->

<form action="toukou_1.php" method="post"> 
  <table border="1">
    <tr>
      <td>名前</td>
      <td><input type="text" name="name" required></td> 
　　　 <td>コメント
      <td><input type="text" name="comment" required></td> 
      <td>パスワード設定
      <td><input type="text" name="pass" required></td>
      <td colspan="2" align="center">
        <input type="submit" value="送信"> 
    </tr>
  </table>
</form>
</body>
</html>
```

ブラウザ上で表示すると以下のように表示されます。
![スクリーンショット 2018-09-19 15.59.57.png](https://qiita-image-store.s3.amazonaws.com/0/290560/c2dbca49-259a-7a73-3047-61fc00c93c95.png)