一言メッセージ投稿ツール

トップ > 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 に書き込まれます。つまり、これまでのデータの先頭に、新しい投稿内容が追加されることになります。

あとは投稿が完了した旨を知らせるメッセージを表示しているだけです。これでメッセージを投稿する仕組みが完成です。