Posted at

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

以下の機能の付いた簡易掲示板を作成する。

1. 投稿機能: {番号}<>{名前}<>{コメント}<>{投稿された時間} という形で投稿内容が表示されるようにする。また、各投稿にパスワードを設定できるようにする。

2. 削除機能:指定した番号の投稿を削除できるようにする。また、パスワード認証も行う。

3. 編集機能:指定した番号の投稿を編集できるようにする。ここでもパスワード認証を行う。

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


手順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>


手順2 入力データの保存

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'); /*次の処理を行うファイルへ移動させる*/
?>



手順3 実際に表示する投稿内容の作成

現在、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]); /*各1行を <> で分割する。*/
fwrite($fp,$num.' <> '.$youso[1].' <> '.$youso[2].' <> '.$youso[3]."\n"); /*パスワード($youso[0])以外の情報をファイルに書き込む*/
fclose($fp);
}
?>

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



手順4 送信完了の確認と投稿内容の表示

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


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" ); /*配列を順番に表示する*/

}
?>

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

<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