PHP 確認画面を表示する方法。

今回は select.php から渡されたデータをもとに、確認するための画面をPHPで作成します。

「更新」はデータを変更する画面が必須です。できれば前のデータをデフォルトで表示し、変更できるようにしたほうが良いでしょう。

「追加」と「削除」はいきなりSQL文を実行することもできますが、念のため確認画面を表示することにしました。

また検索(表示)、追加、更新、削除ともにデータベースに接続することになりますので、共通する部分を SampleDB050.php ファイルに関数としてまとめました。


【1】sample103 フォルダをコピーして sample104 フォルダを作成します。

php-197.gif


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

php-198.gif

*「\」は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-02.gif

準備ができたら作成したPHPプログラムを実行してみましょう。


【4】ブラウザのアドレスに http://localhost/test/sample104/select.php と入力し、実行します。


【5】select.php の画面が表示されました。

php-199.gif


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

php-186.gif


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

php-200.gif

*パラメータで値が渡されています。

該当するデータが無い場合の画面
php-201.gif


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

php-187.gif


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

php-202.gif

*パラメータで値が渡されています。

該当するデータが無い場合の画面
php-203.gif


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

php-192.gif


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

php-204.gif

*フォームのPOSTメソッドで値を渡しているため、パラメータはありません。

未入力項目がある場合の画面
php-205.gif


【解説】

更新、削除は前の画面から渡された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のパラメータを不正に操作された時の対策にもなります。


スポンサードリンク

スポンサードリンク






PHP初心者入門講座TOPへ

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。