PHP データを次のページで受け取る方法。

前回 select.php でデータを渡す準備はできたので、今回はデータを受け取るページを作ります。データを受け取ることができれば、あとはSQL文を組み立てて実行するだけなので簡単です。そこで今回は受け取る方法に専念することにします。

PHPに限らずWebアプリケーションで追加、更新、削除を行なう場合は、ページ間でデータの受け渡しが必要です。(JavaScriptなどを使う場合は別)

しかし各Webページは基本的に独立しているので、ページ間でデータを受け渡しすることができません。そのためいくつか方法が用意されています。

データを受け渡す主な方法
1.パラメータを使う
2.フォームを使う
3.隠しフィールドを使う
4.クッキーを使う
5.セッションを使う

1、2、3の方法についてはこれまでのステップで何度か使っていますので、今回もこれらの方法で行ないます。4、5については必要になった時に解説します。


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

php-183.gif


【2】今回は以下のようなファイルの構成になります。select.phpの変更はありません。他のファイルは新規に作成します。

php-184.gif

*「\」はWindowsではエンマークのことです。

保存先 C:\phpdev\www\test\sample103
ファイル名 select.php

<?php
  $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("データベースの選択に失敗しました。");

  // クエリを送信する
  $sql = "SELECT * FROM T01Prefecture";
  $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$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);

  // MySQLへの接続を閉じる
  mysql_close($link) or die("MySQL切断に失敗しました。");
?>

<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\sample103
ファイル名 update.php

<?php
  $prefCd = $_GET['cd'];
?>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
    <title>更新</title>
  </head>
  <body>
    PREF_CD:<?= $prefCd ?><br />
  </body>
</html>


保存先 C:\phpdev\www\test\sample103
ファイル名 delete.php

<?php
  $prefCd = $_GET['cd'];
?>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
    <title>削除</title>
  </head>
  <body>
    PREF_CD:<?= $prefCd ?><br />
  </body>
</html>


保存先 C:\phpdev\www\test\sample103
ファイル名 insert.php

<?php
  $prefCd = $_POST['cd'];
  $prefName = $_POST['name'];
  $submit = $_POST['submit'];
?>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
    <title>追加</title>
  </head>
  <body>
    PREF_CD:<?= $prefCd ?><br />
    PREF_NAME:<?= $prefName ?><br />
    submit:<?= $submit ?><br />
  </body>
</html>



【3】C:\phpdev にある 2K-NT-XP-phpdev_start.bat をダブルクリックして、phpdev を起動します。

php-02.gif

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


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


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

php-185.gif


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

php-186.gif


【7】「update.php?cd=1」が表示され、画面には「PREF_CD:1」と表示されています。

php-188.gif

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


【8】ブラウザの「戻る」ボタンをクリックします。

php-189.gif


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

php-187.gif


【10】「delete.php?cd=1」が表示され、画面には「PREF_CD:1」と表示されています。

php-190.gif

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


【11】ブラウザの「戻る」ボタンをクリックします。

php-191.gif


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

php-192.gif


【13】「insert.php」が表示され、画面には以下のように表示されています。

PREF_CD:99
PREF_NAME:ハワイ
submit:追加

php-193.gif

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


【14】ブラウザの「戻る」ボタンをクリックします。

php-194.gif


【15】次は「リセット」ボタンをクリックします。

php-195.gif


【16】テキストボックスがクリアされました。

php-196.gif


【解説】

(1)今回は select.php の変更ありません。


(2)update.php と delete.php はリンクのパラメータで値を渡しているので、「GETメソッド」になります。そのため値を受け取るときは $_GET[' '] を使います。

$prefCd = $_GET['cd'];

*PREF_CDさえわかれば他の情報はデータベースから再度取得できます。


(3)insert.php はフォームの「POSTメソッド」で値を渡しているので、受け取るときは $_POST[' '] を使います。

$prefCd = $_POST['cd'];
$prefName = $_POST['name'];
$submit = $_POST['submit'];

*新規のデータなので、PREF_CDとPREF_NAMEの両方が必要です。

submitの値(valueで設定)も渡されている点に注目してください。この値は「ボタンが押されたかどうか」の判断に利用できます。

例えば $submit に値が代入されたということは、アドレスにURLを入力して直接ページにアクセスしたのではなく、フォームのボタンをクリックしてPOSTメソッドでアクセスしたのだと判断できます。

・パラメータで変数の値を不正に変更されることを防ぐ
・自分自身のファイルを呼び出す時の条件判断に使う


【ワンポイント】

「GETメソッド」はパラメータとして値を渡すため、大きなデータを渡すのには向きません。URLが長くなるし文字数に制限があります。また値が見えてしまうためパスワードのような重要なデータの受け渡しは危険です。日本語のデータを使うときにはエンコード、デコードが必要です。

「POSTメソッド」は大きなデータの受け渡しもできます。値も見えないためGETメソッドに比べると安全です。日本語もそのまま使えます。


スポンサードリンク

スポンサードリンク






PHP初心者入門講座TOPへ