3月21日 ここ数ヶ月,改定新版「基礎PHP」を中心にPHPの勉強をしているこうしろうだが,本のサンプルばかりを打ち込んでいてもつまらないので,ちょっとしたアプリケーションを作ってみることにした。題材は単語帳,英単語と日本語訳,そして説明をブラウザからデータベースに登録し,検索できるようにしようと言ったのは私だ。

 まずは,データベースとテーブルを作成するSQL文をtango.sqlというテキストファイルに作成する。

----------------------------------------------------------

drop database if exists tango;
create database tango;
use tango;
drop table if exists tango_table;
create table tango_table(
 tid int(10) unsigned auto_increment primary key,
 tenglish varchar(20) not null,
 tjapanese varchar(40) not null,
 tintro text
) TYPE=MyISAM;
grant select,insert,update,delete,create,
  drop on tango.* to tuser@localhost identified by 'tango';

----------------------------------------------------------
 かいつまんで説明すると,tangoデータベースが存在していたら,削除してからデータベースを作成,そしてtango_tableテーブルが存在していたら,同様に削除してからテーブルを作る。  テーブルの項目は,主キーがオートインクリメント属性のint型,英単語(tenglish)と日本語訳(tjapanese)がvarchar型(可変長文字列型)で,説明は長い文章を格納できるようにtext型にした。grant文でtuserを作成し,権限を与えている。パスワードはtangoだ。

 このSQL文をMySQLモニタで,source c:/mysql/sq/tango.sqlと入力して実行する。こう書くとすんなり終わってしまうが,こうしろうは予約語のスペルを間違えたりしながら,なんとかテーブルを作成した。

 次に,入力フォームを作成する。新規に英単語を入力し,データベースに登録するためのフォームだ。「text型のフィールドだけは,textareaにせんなんぞ。うん,textarea知らん?スクロールバーの付く,大きいテキストボックスみたいなやつのこと。アンケートとかで自由にお書き込みくださいの欄に使ってあるだろう。ネットで調べてみ」と適当なアドバイスをした。
----------------------------------------------------------

<html>
<head><title>単語帳―追加―</title></head>
<body>
<h1>単語帳―追加―</h1>
<h3>各項目入力してください。</h3>
<form action="tango_add.php" method="post">
<table border="1" cellspacing="0">
<tr>
<td>英単語</td>
<td><input type="text" name="english"></td>
</tr>
<tr>
<td>日本語</td>
<td><input type="text" name="japanese"></td>
</tr>
<tr>
<td>説明</td>
<td><textarea name="introduce" rows="6" cols="40"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="追加">
<input type="reset" value="リセット">
</td>
</tr>
</table>
</body>
</html>

----------------------------------------------------------
 しばらくすると,このようなフォームが出来上がっていた。

 英単語,日本語,説明を入力し,追加ボタンを押すと実行されるスクリプトtango_add.phpが以下である。
----------------------------------------------------------

<html>
<head><title>単語の追加</title></head>
<body>
<?php
$english = $_POST['english'];
$japanese = $_POST['japanese'];
$introduce = $_POST['introduce'];
if($english == "" or $japanese == ""){
 exit ("英単語or日本語が入力されていません。");
}
$host = "localhost";
if (!$conn = mysql_connect($host, "tuser", "tango")) {
 die("データベース接続エラー.<br />");
}
mysql_select_db("tango", $conn);
$sql = "insert into tango_table(tenglish, tjapanese, tintro)
values('$english', '$japanese', '$introduce')";
mysql_query($sql, $conn) or die("登録できませんでした。");
print("登録しました。");
?>
</body>
</html>

----------------------------------------------------------
 入力フォームから,$_POST配列で渡ってくるデータを変数に格納してから,mysql_connect関数でデータベースに接続,mysql_select_db関数でtangoデータベースを選択している。

 単語を追加するinsert文を$sql変数に作成し,mysql_query関数で実行する。ごくごく基本的なレコードの登録処理である。

 「登録しました。」と表示されれば処理は成功だが,このままではいくつか問題がある。ひとつは入力データに漏れがあって,入力フォームに戻ったときに入力した内容が消えてしまっていることだ。

 「セッションを使って,セッション変数に入力値を保存するようにしないとね」と課題を残し,この日はおしまい。