一言メッセージ投稿ツール(MySQLを利用)

トップ > PHP入門 > 一言メッセージ投稿ツール(MySQLを利用)

目次

広告

プログラムの概要

「MySQLの基本」の内容を踏まえて、一言メッセージ投稿ツールを作成してみます。訪問者が名前とメッセージを投稿すると一覧に表示される…という、掲示板のごく簡単な物です。

プログラムの概要

テーブルの作成

まずは一言メッセージのデータ登録用にテーブルを作成します。今回は以下のようなテーブルを作成するものとします。

CREATE TABLE messages(
  no      INT AUTO_INCREMENT PRIMARY KEY,
  name    VARCHAR(255),
  message TEXT,
  created DATETIME
);

no には登録番号を、name には投稿者の名前を、message には投稿メッセージを、created には投稿日時をそれぞれ格納するものとします。AUTO_INCREMENT PRIMARY KEY は、指定しておくと自動的に連番を作成してくれるようになります。とりあえず今は、決まり文句だと思って指定してみてください。

このテーブルにデータを登録する場合、実行するSQL文は以下のようになります。phpMyAdminから、あらかじめ数件登録しておきます。登録番号は自動的に 123 …と、順に振られていくのを確認してください。

INSERT INTO messages(name, message, created) VALUES('名前', 'メッセージ', '2011-01-02 13:40:16')

もしくは、以下のようなSQLでも同様に登録することができます。今回は登録番号を指定しないので、登録番号の部分には NULL と指定しておきます。これでも、名前・メッセージ・投稿日時のみを指定して登録することができます。

INSERT INTO messages VALUES(NULL, '名前', 'メッセージ', '2011-01-02 13:40:16');

実際に、何件か記事を登録してみてください。

メッセージ一覧ページの作成

データが準備できたら、まずは登録内容を一覧表示する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="name" size="30" value="" /><br />
  メッセージ:<br />
  <textarea name="message" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="投稿する" />
</form>
<?php

$con = mysql_connect('127.0.0.1', 'root', '1234');
if (!$con) {
  exit('データベースに接続できませんでした。');
}

$result = mysql_select_db('phpdb', $con);
if (!$result) {
  exit('データベースを選択できませんでした。');
}

$result = mysql_query('SET NAMES utf8', $con);
if (!$result) {
  exit('文字コードを指定できませんでした。');
}

$result = mysql_query('SELECT * FROM messages ORDER BY no DESC', $con);
while ($data = mysql_fetch_array($result)) {
  echo "<p>\n";
  echo '<strong>[No.' . $data['no'] . '] ' . htmlspecialchars($data['name'], ENT_QUOTES) . ' ' . $data['created'] . "</strong><br />\n";
  echo "<br />\n";
  echo nl2br(htmlspecialchars($data['message'], ENT_QUOTES));
  echo "</p>\n";
}

$con = mysql_close($con);
if (!$con) {
  exit('データベースとの接続を閉じられませんでした。');
}

?>
</body>
</html>

プログラムの初めの方にある

<form action="regist.php" method="post">
  名前:<br />
  <input type="text" name="name" size="30" value="" /><br />
  メッセージ:<br />
  <textarea name="message" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="投稿する" />
</form>

この部分は投稿フォームを表示するHTMLです。データの送信先は regist.php ですが、これは後ほど作成します。

$result = mysql_query('SELECT * FROM messages ORDER BY no DESC', $con);
while ($data = mysql_fetch_array($result)) {
  echo "<p>\n";
  echo '<strong>[No.' . $data['no'] . '] ' . htmlspecialchars($data['name'], ENT_QUOTES) . ' ' . $data['created'] . "</strong><br />\n";
  echo "<br />\n";
  echo nl2br(htmlspecialchars($data['message'], ENT_QUOTES));
  echo "</p>\n";
}

この部分は投稿内容を一覧表示するプログラムです。データを表示する際に htmlspecialchars を使用していますが、< などの記号が入力されていた場合に、正しく表示させるためのものです。

これで、index.php にアクセスすると、投稿フォームの下にメッセージが一覧表示されます。

メッセージ投稿ページの作成

次に、index.php の投稿フォームから呼び出されるページを作成します。index.php と同じフォルダ内に regist.php を作成し、以下の内容を書きます。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>一言</title>
</head>
<body>
<?php

if ($_REQUEST['name'] == '' or $_POST['message'] == '') {
  exit('error');
}

$con = mysql_connect('127.0.0.1', 'root', '1234');
if (!$con) {
  exit('データベースに接続できませんでした。');
}

$result = mysql_select_db('phpdb', $con);
if (!$result) {
  exit('データベースを選択できませんでした。');
}

$result = mysql_query('SET NAMES utf8', $con);
if (!$result) {
  exit('文字コードを指定できませんでした。');
}

$name    = $_REQUEST['name'];
$message = $_REQUEST['message'];
$created = date('Y-m-d H:i:s');

$result = mysql_query("INSERT INTO messages(name, message, created) VALUES('$name', '$message', '$created')", $con);
if (!$result) {
  exit('データを登録できませんでした。');
}

$con = mysql_close($con);
if (!$con) {
  exit('データベースとの接続を閉じられませんでした。');
}

?>
<p>メッセージを投稿しました。</p>
<ul>
  <li><a href="index.php">一覧へ戻る</a></li>
</ul>
</body>
</html>

登録フォームから送信されたデータを受け取り、SQLを使用してデータベースに記録しています。

プログラムのはじめにある

if ($_REQUEST['name'] == '' or $_POST['message'] == '') {
  exit('error');
}

この部分は、「名前かメッセージがカラならば、error と表示して処理を中断する」という意味です。つまり、名前とメッセージの入力を必須にしています。

$name    = $_REQUEST['name'];
$message = $_REQUEST['message'];
$created = date('Y-m-d H:i:s');

この部分で、$name には投稿された名前が、$message には投稿されたメッセージが、$created には現在の時刻が格納されます。その後、INSERT でMySQLにデータを登録しています。

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