「PHPで掲示板を作る」という授業をやっている。
PHPのサイトや資料では、MySQLというデータベースを使った掲示板のサンプルが多い。
しかし、勉強としてはデータの持ち方を学ぶのにテキスト形式のファイルに書き込んだり読み込んだりしてみたい。
ローカルでXAMPPなどを使って試すように作ってある。
実際にアップロードしてしまうとすぐに攻撃対象になるのでやめてください。
(理由:タグ書き込みOKで、誰でも書き込めてしまうため)
使用するまえにkeijiban1.txtという名称のファイルを作ってから実行して下さい。
プログラム【xKeijiban1.php】
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<title>ひとこと掲示板 ver1</title>
</head>
<body>
<p><strong>ひとことどうぞ!</strong></p>
<form name="form1" action="xKeijiban1.php" method="post">
<table>
<tr><td>おなまえ</td><td><input type="text" name="name" size="20" /></td></tr>
<tr><td>ひとこと</td><td><input type="text" name="hitokoto" size="40" /></td></tr>
</table>
<input type="submit" value="投稿してみる" />
<input type="reset" value="けす" />
</form>
<?php
$filename = "keijiban1.txt";
// POSTされていたら
if($_SERVER['REQUEST_METHOD'] === 'POST'){
// フォームデータ取得
$name = $_POST["name"];
$hitokoto = $_POST["hitokoto"];
$line = $name."\t".$hitokoto."\n";
// 書き込み
$allbody = file_get_contents($filename);
$allbody = $allbody.$line;
file_put_contents($filename, $allbody);
}
// 掲示板表示
$tmp = file($filename); // ファイル内容を一行ずつ配列に取得
$allbody = array_reverse($tmp); // 配列の内容を逆順にする(新しい順に表示するため)
foreach($allbody as $line){
$buf = preg_split("/\t/", $line);
$line = "<p>".$buf[1]."(".$buf[0].")</p>";
print $line;
}
?>
</body>
</html>
必要最小限にしたため、ファイル読み書きにfopenやflockなど使っていない。
まずはこれを参考に拡張してみたい。
データはタブ区切りで書き込まれる。そうなるとタブが書き込まれたときに掲示板データが壊れてしまう危険がある。
問題:タブが書き込まれたときはどうしたら良いか?
などと学生には質問しようと考えている。


コメント