フリーPHPスクリプト配布サイト。
「PHPの基本」の内容を踏まえて、一言メッセージ投稿ツールを作成してみます。訪問者がメッセージを投稿すると一覧に表示される…という、掲示板のごく簡単な物です。
掲示板としてはシンプルなものですが、それでもプログラムはある程度難しくなっています。じっくり読み進めていってください。
まずは登録内容を一覧表示するPHPを作成します。
ページ上部に投稿フォームがあって、その下に投稿内容が一覧表示される構成にしてみます。プログラムは以下のようになります。ファイル名は index.php
としておきます。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>一言</title>
</head>
<body>
<form action="regist.php" method="post">
メッセージ:<br />
<input type="text" name="message" size="50" value="" /><br />
<br />
<input type="submit" value="投稿する" />
</form>
<?php
$fp = fopen('message.txt', 'r');
while ($line = fgets($fp)) {
echo '<p>' . htmlspecialchars($line, ENT_QUOTES) . "</p>\n";
}
fclose($fp);
?>
</body>
</html>
プログラムの初めの方にある
<form action="regist.php" method="post">
メッセージ:<br />
<input type="text" name="message" size="50" value="" /><br />
<br />
<input type="submit" value="投稿する" />
</form>
この部分は投稿フォームを表示するHTMLです。データの送信先は regist.php
ですが、これは後ほど作成します。
<?php
$fp = fopen('message.txt', 'r');
while ($line = fgets($fp)) {
echo '<p>' . htmlspecialchars($line, ENT_QUOTES) . "</p>\n";
}
fclose($fp);
?>
この部分は投稿内容を一覧表示するプログラムです。index.php
と同じフォルダ内に message.txt
を作成し、あらかじめ以下の内容を書いておきます。
新しいものは上に表示されます。 [2011/02/17 20:45]
一言メッセージを投稿できます。 [2011/02/17 20:45]
こんにちは。 [2011/02/17 20:45]
これで、index.php
にアクセスすると、投稿フォームの下にメッセージが一覧表示されます。データを表示する際に htmlspecialchars
を使用していますが、<
などの記号が入力されていた場合に、正しく表示させるためのものです。
次に、index.php
の投稿フォームから呼び出されるページを作成します。index.php
と同じフォルダ内に regist.php
を作成し、以下の内容を書きます。
<?php
if ($_POST['message'] == '') {
exit('error');
}
$message = $_POST['message'];
$now = date('Y/m/d H:i');
$post_data = "$message ($now)\n";
$read_data = file_get_contents('message.txt');
file_put_contents('message.txt', $post_data . $read_data);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>一言</title>
</head>
<body>
<p>メッセージを投稿しました。</p>
<ul>
<li><a href="index.php">一覧へ戻る</a></li>
</ul>
</body>
</html>
プログラムのはじめにある
if ($_POST['message'] == '') {
exit('error');
}
この部分は、「投稿メッセージがカラならば、error
と表示して処理を中断する」という意味です。つまり、メッセージの入力を必須にしています。
$message = $_POST['message'];
$now = date('Y/m/d H:i');
この部分で、$message
には投稿されたメッセージが、$now
には現在の時刻が格納されます。
$post_data = "$message ($now)\n";
$read_data = file_get_contents('message.txt');
この部分で、$post_data
投稿メッセージと現在の時刻が、$read_data
には message.txt
の内容すべてが格納されます。
file_put_contents('message.txt', $post_data . $read_data);
この部分で、$post_data
の後ろに $read_data
を付加したデータが message.txt
に書き込まれます。つまり、これまでのデータの先頭に、新しい投稿内容が追加されることになります。
あとは投稿が完了した旨を知らせるメッセージを表示しているだけです。これでメッセージを投稿する仕組みが完成です。