フリーPHPスクリプト配布サイト。
トップ > 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から、あらかじめ数件登録しておきます。登録番号は自動的に 1
、2
、3
…と、順に振られていくのを確認してください。
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にデータを登録しています。
あとは投稿が完了した旨を知らせるメッセージを表示しているだけです。これでメッセージを投稿する仕組みが完成です。