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