画面からの入力データを扱う


7.3 画面からの入力データを扱う

 前節では、Webブラウザから入力するための部品の種類や、データの送信方法について学習しました。本節では送信されてきたデータをPHPで扱う方法について説明していきます。


7.3.1 フォームのPOST送信データを扱う方法

 Web画面からのPOST送信データを扱うにはスーパーグローバル変数の$_POSTを利用します。
 $_POSTの実体は連想配列なので、キーにHTMLフォームの部品名を指定します。部品名は、フォーム部品のタグでname属性にした名前です。

書式:POST送信データを受け取る

凡例:POST送信データを受け取る

 送信元のフォーム部品のname属性の値を使って、送信先で値を取得するので、必ず同じ値を使う必要があります。

 上記で示した凡例はテキストボックスと「隠しフィールド」のみですが、他のフォーム部品でも送信先でname属性の値である「部品名」を利用します。
 Web画面でフォーム部品を使えば、ユーザーが入力したデータや選択したデータを送信できますが、ユーザーの入力情報だけではなく、動作状態などの別データを一緒に送信させたい場合もあります。その場合は、凡例のようにフォーム部品の隠しフィールドである「<input type=”hidden” …>(ヒドゥン)」を使います。

 では、実際に送信元からPOST送信で送られるデータを送信先で受け取るサンプルを確認していきましょう。


POST送信データを受け取って利用するプログラム

 別画面から送信された入力データと隠しフィールドのデータを受け取り、そのデータと配列に用意した画像のファイル名を使ってWebブラウザにトランプ画像を表示させます。

ソース・フォルダ:myproj_super_intro/ch07
ファイル名    :postForm.php
アクセスURL   :http://localhost/myproj_super_intro/ch07/postForm.html

➢ postForm.php

1<html>
2    <head>
3        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4        <title>隠しフィールドデータを送信する</title>
5    </head>
6    <body>
7        <form action="usePostData.php" method="post">
8            好きな数値入力:<input type="text" name="num1" >(※0~13の範囲)<br>
9            隠しフィールド:※画面には表示されない<br>
10            <?php
11            $num=0;
12            echo '<input type="hidden" name="num2" value="',$num,'">';
13            ?>
14            <input type="submit" value="送信">
15        </form>
16    </body>
17</html>

ソース・フォルダ:myproj_super_intro/ch07
ファイル名    :usePostData.php
アクセスURL   :postForm.htmlからの画面遷移でアクセスされる


➢ usePostData.php

1<?php
2    //array関数を使ってトランプの画像名を配列で作成
3    $cards = array("Jk.png","01.png","02.png","03.png","04.png","05.png","06.png",
4                   "07.png","08.png","09.png","10.png","11.png","12.png","13.png");
5 
6    //フォームのPOST送信データを各変数に代入
7    $iNum = $_POST['num1'];
8    $hNum = $_POST['num2'];
9?>
10<html>
11    <head>
12        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
13    </head>
14    <body>
15    ■入力番号のカード 隠しフィールド番号のカード<br>
16    <?php
17        echo '<img src="../cards/' , $cards[$iNum] , '">    '; //全角スペースを4つ入れる(カード間の間隔を作るため
18        echo '<img src="../cards/' , $cards[$hNum] , '">';
19    ?>
20    </body>
21</html>

実行結果


解説

 今回のプログラムは、データを入力する送信元のWeb画面の「postForm.php」と、その画面からのデータの受け取り先の「usePostData.php」の2つのファイルから構成されています。
 7行目はフォームのデータの送信先を「usePostData.php」、送信方法を「post」で設定しています。
 8行目は数値を入力してもらうためのテキストエリアを、部品名「num1」で設定しています。
 9~13行目は隠しフィールドを部品名「num2」、送信データを変数$numの値「0」で設定しています。
 14行目は送信の実行ボタンを表示名「送信」で設定しています。送信ボタンがないとデータを送ることができないので、<form>タグを利用する場合、送信ボタンは一緒に設置します。

図 7.3.1 POSTデータを送信


 続いて、データ受信先になる「usePostData.php」の処理について説明を行います。

 図7.3.2で示していますが、今回の実行結果ではフォームデータは「11」と「0」という情報がPOST送信で送られてきます。このPOST送信データを取得したいので、7、8行目でスーパーグローバル変数$_POST(連想配列)を利用します。隠しフィールドも入力データも受取り方は同じです。

   7: $iNum = $_POST['num1'];
   8: $hNum = $_POST['num2'];

図 7.3.2 連想配列$_POSTから入力データを取得して変数へ代入

 17、18行目ではPOST送信されてきたデータが格納されている変数$iNumと$hNumを配列変数$cardsの添字に利用し、画像のファイル名を取得させ、Web画面に対応するトランプ画像が表示されます。

   17: echo '<img src="../cards/' , $cards[$iNum] , '">'; //全角スペースを4つ入れる(カード間の間隔を作るため)
   18: echo '<img src="../cards/' , $cards[$hNum] , '">';
◉ポイント

・ POST送信で送られるフォームデータをPHP側で利用するには、$_POSTを利用して行う。
・ 各フォーム部品のデータを$_POSTから取得するには、HTMLで設定した部品名をキーに取得できる。
・ 隠しフィールドを使うと、任意の情報をユーザーの入力情報とは別に送信することができる。


NEXT>> 7.4 本章のまとめ

f