「更新」はデータを変更する画面が必須です。できれば前のデータをデフォルトで表示し、変更できるようにしたほうが良いでしょう。
「追加」と「削除」はいきなりSQL文を実行することもできますが、念のため確認画面を表示することにしました。
また検索(表示)、追加、更新、削除ともにデータベースに接続することになりますので、共通する部分を SampleDB050.php ファイルに関数としてまとめました。
【1】sample103 フォルダをコピーして sample104 フォルダを作成します。

【2】今回は以下のようなファイルの構成になります。SampleDB050.phpは新規に作成します。

*「\」はWindowsではエンマークのことです。
保存先 C:\phpdev\www\test\sample104
ファイル名 SampleDB050.php
<?php
function executeQuery($sql){
$url = "localhost";
$user = "root";
$pass = "";
$db = "SampleDB050";
// MySQLへ接続する
$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");
// データベースを選択する
$sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。");
// クエリを送信する
$result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);
// MySQLへの接続を閉じる
mysql_close($link) or die("MySQL切断に失敗しました。");
//戻り値
return($result);
}
?>
保存先 C:\phpdev\www\test\sample104
ファイル名 select.php
<?php
//ファイルを読み込み
require_once("SampleDB050.php");
// クエリを送信する
$sql = "SELECT * FROM T01Prefecture ORDER BY PREF_CD";
$result = executeQuery($sql);
//結果セットの行数を取得する
$rows = mysql_num_rows($result);
//表示するデータを作成
if($rows){
while($row = mysql_fetch_array($result)) {
$tempHtml .= "<tr>";
$tempHtml .= "<td>".$row["PREF_CD"]."</td><td>".$row["PREF_NAME"]."</td>";
$tempHtml .= "<td><a href=\"update.php?cd=".$row["PREF_CD"]."\" target=\"_self\">更新</a></td>";
$tempHtml .= "<td><a href=\"delete.php?cd=".$row["PREF_CD"]."\" target=\"_self\">削除</a></td>";
$tempHtml .= "</tr>\n";
}
$msg = $rows."件のデータがあります。";
}else{
$msg = "データがありません。";
}
//結果保持用メモリを開放する
mysql_free_result($result);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
<title>全件表示</title>
</head>
<body>
<h3>全件表示</h3>
<?= $msg ?>
<table width = "300" border = "1">
<tr bgcolor="##ccffcc"><td>PREF_CD</td><td>PREF_NAME</td><td colspan="2">EDIT</td></tr>
<?= $tempHtml ?>
<form action="insert.php" method="post">
<tr>
<td><input type="text" name="cd"></td>
<td><input type="text" name="name"></td>
<td colspan="2">
<input type="submit" name="submit" value="追加"><input type="reset" value="リセット">
</td>
</tr>
</form>
</table>
</body>
</html>
保存先 C:\phpdev\www\test\sample104
ファイル名 update.php
<?php
//ファイルを読み込む
require_once("SampleDB050.php");
//データを取得する
$prefCd = $_GET['cd'];
// クエリを送信する
$sql = "SELECT PREF_NAME FROM T01Prefecture WHERE PREF_CD = ".$prefCd;
$result = executeQuery($sql);
//結果セットの行数を取得する
$rows = mysql_num_rows($result);
//表示するデータを作成
if($rows){
$row = mysql_fetch_array($result);
$prefName = $row["PREF_NAME"];
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 更新 \">";
$msg = "データを変更後、更新ボタンをクリックしてください。\n";
}else{
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">前の画面へ戻る</a>\n";
$msg = "データがありません。\n";
}
//結果保持用メモリを開放する
mysql_free_result($result);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
<title>更新確認</title>
</head>
<body>
<h3>更新確認</h3>
<?= $msg ?>
<form action="update2.php" method="post">
<table width = "200" border = "1">
<tr bgcolor="##ccffcc"><td>PREF_CD</td><td>PREF_NAME</td></tr>
<tr>
<td><?= $prefCd ?></td>
<td><input type="text" name="name" value="<?= $prefName ?>"></td>
</tr>
</table>
<br />
<input type="hidden" name="cd" value="<?= $prefCd ?>">
<?= $tempHtml ?>
</form>
</body>
</html>
保存先 C:\phpdev\www\test\sample104
ファイル名 delete.php
<?php
//ファイルを読み込む
require_once("SampleDB050.php");
//データを取得する
$prefCd = $_GET['cd'];
// クエリを送信する
$sql = "SELECT PREF_NAME FROM T01Prefecture WHERE PREF_CD = ".$prefCd;
$result = executeQuery($sql);
//結果セットの行数を取得する
$rows = mysql_num_rows($result);
//表示するデータを作成
if($rows){
$row = mysql_fetch_array($result);
$prefName = $row["PREF_NAME"];
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 削除 \">";
$msg = "このデータでよければ、削除ボタンをクリックしてください。\n";
}else{
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">前の画面へ戻る</a>\n";
$msg = "データがありません。\n";
}
//結果保持用メモリを開放する
mysql_free_result($result);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
<title>削除確認</title>
</head>
<body>
<h3>削除確認</h3>
<?= $msg ?>
<form action="delete2.php" method="post">
<table width = "200" border = "1">
<tr bgcolor="##ccffcc"><td>PREF_CD</td><td>PREF_NAME</td></tr>
<tr><td><?= $prefCd ?></td><td><?= $prefName ?></td></tr>
</table>
<br />
<input type="hidden" name="cd" value="<?= $prefCd ?>">
<?= $tempHtml ?>
</form>
</body>
</html>
保存先 C:\phpdev\www\test\sample104
ファイル名 insert.php
<?php
//データを取得する
$prefCd = $_POST['cd'];
$prefName = $_POST['name'];
//表示するデータを作成
if(empty($prefCd) || empty($prefName)){
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n";
$msg = "未入力の項目があります。\n";
}else{
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 追加 \">";
$msg = "このデータでよければ、追加ボタンをクリックしてください。\n";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
<title>追加確認</title>
</head>
<body>
<h3>追加確認</h3>
<?= $msg ?>
<form action="insert2.php" method="post">
<table width = "200" border = "1">
<tr bgcolor="##ccffcc"><td>PREF_CD</td><td>PREF_NAME</td></tr>
<tr><td><?= $prefCd ?></td><td><?= $prefName ?></td></tr>
</table>
<br />
<input type="hidden" name="cd" value="<?= $prefCd ?>">
<input type="hidden" name="name" value="<?= $prefName ?>">
<?= $tempHtml ?>
</form>
</body>
</html>
【3】C:\phpdev にある 2K-NT-XP-phpdev_start.bat をダブルクリックして、phpdev を起動します。

準備ができたら作成したPHPプログラムを実行してみましょう。
【4】ブラウザのアドレスに http://localhost/test/sample104/select.php と入力し、実行します。
【5】select.php の画面が表示されました。

【6】「1 北海道」の「更新」リンクをクリックします。

【7】「update.php?cd=1」が表示され、更新確認の画面が表示されました。ボタンはクリックしないでください。

*パラメータで値が渡されています。
該当するデータが無い場合の画面

【8】次は「1 北海道」の「削除」リンクをクリックします。

【9】「delete.php?cd=1」が表示され、削除確認の画面が表示されました。

*パラメータで値が渡されています。
該当するデータが無い場合の画面

【10】次は一番最後のフォームに「99 ハワイ」と入力し、「追加」ボタンをクリックします。

【11】「insert.php」が表示され、追加確認の画面が表示されました。

*フォームのPOSTメソッドで値を渡しているため、パラメータはありません。
未入力項目がある場合の画面

【解説】
更新、削除は前の画面から渡されたPREF_CDからSQL文を組み立てて実行し、PREF_NAMEを取得しています。
「PREF_NAMEもパラメータで渡せばよいのでは?」と思うかもしれません。もちろんそうすることもできますが、例えばフィールド数が10くらいになると面倒です。
そこで主キーとなるフィールドの番号だけ渡しておいて、データベースから再度取得できるようにしたほうが応用が広がります。
追加に関してはデータベースにデータが無いため、データを取得できません。そのためフォームのPOSTメソッドを使い、PREF_CDとPREF_NAMEの両方を渡す必要があります。
■SampleDB050.php
(1)関数 executeQuery() は仮引数としてSQL文を受け取り実行して、結果リストを戻り値として返しています。
function executeQuery($sql){
省略
//戻り値
return($result);
}
*この関数は検索、追加、更新、削除共通で使えます。
■select.php
(1)他のファイルを読み込んでいます。読み込んだコードはそのまま使えます。
require_once("SampleDB050.php");
(2)クエリを送信する部分です。ユーザー定義の関数を使うように変更しました。戻り値を $result で受け取って利用します。
$result = executeQuery($sql);
*この部分は検索、追加、更新、削除ともに同じです。
■update.php
(1)SQL文を組み立てている部分です。
$sql = "SELECT PREF_NAME FROM T01Prefecture WHERE PREF_CD = ".$prefCd;
*このSQL文は主キーを抽出条件にしているため、結果は1件だけになります。
(2)結果リストから1行取得している部分です。結果は1件だけなので while を使う必要はありません。
$row = mysql_fetch_array($result);
(3)該当するデータがある場合は「更新」ボタンを、無い場合は「前の画面へ戻る」リンクを作成しています。
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 更新 \">";
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">前の画面へ戻る</a>\n";
(4)データを表示している部分です。PREF_CDは変更できないようにしています。PREF_NAMEは更新前のデータをデフォルトで表示し、簡単に変更できます。
<td><?= $prefCd ?></td>
<td><input type="text" name="name" value="<?= $prefName ?>"></td>
(5)次のページへ渡すデータを隠しフィールドに設定しています。このデータはフォームのPOSTメソッドで渡されます。
<input type="hidden" name="cd" value="<?= $prefCd ?>">
*PREF_NAMEはテキストボックスで入力した値を渡します。
(6)「更新」ボタンか「前の画面へ戻る」リンクを表示している部分です。
<?= $tempHtml ?>
■delete.php
(1)該当するデータがある場合は「削除」ボタンを、無い場合は「前の画面へ戻る」リンクを作成しています。
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 削除 \">";
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">前の画面へ戻る</a>\n";
(2)データを表示している部分です。データは変更できないようにしています。
<tr><td><?= $prefCd ?></td><td><?= $prefName ?></td></tr>
(3)次のページへ渡すデータを隠しフィールドに設定しています。このデータはフォームのPOSTメソッドで渡されます。
<input type="hidden" name="cd" value="<?= $prefCd ?>">
*削除はPREF_CDだけ渡せばOKです。
(4)「削除」ボタンか「前の画面へ戻る」リンクを表示している部分です。
<?= $tempHtml ?>
■insert.php
(1)未入力の項目が1つでもある場合($prefCdが空または$prefNameが空)は「前の画面へ戻る」リンクを、すべて入力されている場合は「追加」ボタンを作成しています。
if(empty($prefCd) || empty($prefName)){
$tempHtml = "<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n";
$msg = "未入力の項目があります。\n";
}else{
$tempHtml = "<input type=\"submit\" name=\"submit\" value=\" 追加 \">";
$msg = "このデータでよければ、追加ボタンをクリックしてください。\n";
}
(2)データを表示している部分です。データは変更できないようにしています。
<tr><td><?= $prefCd ?></td><td><?= $prefName ?></td></tr>
(3)次のページへ渡すデータを隠しフィールドに設定しています。このデータはフォームのPOSTメソッドで渡されます。
<input type="hidden" name="cd" value="<?= $prefCd ?>">
<input type="hidden" name="name" value="<?= $prefName ?>">
*追加の場合は隠しフィールドに2つ設定しています。
(4)「追加」ボタンか「前の画面へ戻る」リンクを表示している部分です。
<?= $tempHtml ?>
【ワンポイント】
更新、削除のリンクはデータベースのデータを元に作成しているため、select.phpで表示されたデータは必ず存在します。したがってデータが無い場合の画面は表示されることがありません。
無い場合の動作を確認するには、ブラウザのアドレスに以下のように入力し、直接ページにアクセスしてください。
http://localhost/test/sample104/update.php?cd=100
http://localhost/test/sample104/delete.php?cd=100
*同じデータベースを複数の人で利用する場合は、タイミングによりデータが無くなる場合があります。またURLのパラメータを不正に操作された時の対策にもなります。