PHP スクリプトで一番簡単な例とすれば、Webページ上で何かの入力を行いそれをサーバ側に送信し、 何かの処理を行った後で、クライアント側に返事を返す処理だと思います。
どのWebサイトでも必ずユーザからの入力データを元にして、サーバ側でいろんな処理を行って、 必要とされる表示を行っています。 それぞれのWebサイトで必要とされるものデータがそれぞれに異なっていて、簡単なものから複雑なものがあります。
この記事では HTML の FORM タグを使ったデータの送信について説明します。
FORMタグを使った送信
簡単なデータ送信の例として「名前」「住所」を入力し PHP スクリプトに送信する HTML スクリプトを作成してみました。([begin-2-1.html])
<!DOCTYPE?html> <html> <head> <meta charset="UTF-8"> <title>FORMタグを使った送信</title> </head> <body> <h1>FORMタグを使った送信</h1> <form action="begin-2-1.php" method="post"> 名前:<input type="text" name="name" /><br> 住所:<input type="text" name="addr" /><br> <input type="submit" /> </form> </body> </html>
<form>から</form>で囲まれた中のフォームの部品である INPUT タグのデータを FORM タグの action 属性のスクリプトファイルに送られます。 データの送信方法は FORM タグの method 属性に従います。
method 属性には「post」「get」が指定可能で、
- post:フォームのデータを本文として送信(多量のデータの送信が可能)
- get :actionのURLの後ろにデータを追加して送信(送信できるデータ量には制限あり)
「get」は以下の様なURLで送信したことと同様です。
この「post」「get」データが PHP スクリプトに渡された時に、 そのスクリプトの中から参照できる $_POST 及び $_GET 変数にデータが格納されています。
$_POST 及び $_GET はスーパーグローバル変数と呼ばれるもので、 PHP のシステムに組込まれた変数でスクリプトのどの場所からでも参照可能です。
$_POST 及び $_GET は配列変数で、識別子の名前が「name」として渡されたデータは $_POST["name"] で参照できます。
ここで配列変数が出てきましたが、配列のキー(指標的なもの)として文字列や数値が指定できます。
($_POST["name"] という表現は直感的に分かりやすいと思います。)
この後の項目で変数については少し説明します。
FORMタグの内容の受信
それでは上記の HTML スクリプトからのデータを受信し、結果を表示する PHP スクリプトを作成します。([begin-2-1.php])
<!DOCTYPE?html> <html> <head> <meta charset="UTF-8"> <title>FORMタグの内容の受信</title> </head> <body> <h1>FORMタグの内容の受信</h1> <?php echo "名前:".$_POST["name"]."<br>"; echo "住所:".$_POST["addr"]."<br>"; ?> <br> <a href="begin-2-1.html">入力に戻る</a> </body> </html>
先ず HTML スクリプトを実行してみます。
実行は私のローカルPCにインストール済みの xampp のローカルフォルダで行います。 尚、xampp とはローカルでWebサーバのシステムが構築でき PHP 及びデータベースの MySQL が実行できます。
「送信」ボタンを押下すると「begin-2-1.php」が呼び出されて、入力データの「名前」「住所」を表示します。
「入力に戻る」リンクを押下すると「begin-2-1.html」に戻りますが、入力領域はクリアされて初期状態からの表示になります。
PHPの変数について
PHP の変数について少し説明します。
変数とは「ある値を格納する箱」の様なもので、箱の中身は「数値」「文字列」「オブジェクト」などです。
以下の様な感じで変数を宣言(定義)できます。 「文字列」はダブルクオート("")及び、 シングルクオート('')のどちらでも可能です。
<?php // 数値の宣言 $num = 100; // 文字列の宣言(ダブルクオートで囲む) $str1 = "これは文字列です。"; // 文字列の宣言(シングルクオートで囲む) $str2 = 'This is string.'; ?>
尚、PHP の変数の宣言の制約は以下の様になっています。
- 先頭文字は必ず $(ドルマーク) から始める
- 使える文字は半角英数字と「_」(アンダースコア)のみ
- $(ドルマーク) のうしろに数字は使えない
- 半角英字の大文字、小文字は区別される
上記の $_POST の説明のところで配列変数であると説明しましたので、配列について説明します。
配列は「ある値を格納する箱」が複数存在し、それぞれを区別するためのキー(指標的なもの)を持っています。
配列の中のデータを参照・設定する場合には、そのキーを指定し代入などを行います。 このキーには「数値」及び「文字列」のどちらでも指定できます。
<?php // 配列の宣言(これは特に必要無し) $arr = array(); // 数値キーで宣言 $arr[1] = "数値キーで指定したデータその1です。"; $arr[2] = "数値キーで指定したデータその2です。"; // 文字列キーで宣言 $arr["KEY"] = "文字列キーで指定したデータその1です。"; $arr["aaa"] = "文字列キーで指定したデータその2です。"; // 配列の内容を全て表示 foreach($arr as $key => $val) { echo "キー[".$key."]=[".$val."]
\n"; } ?>
これを実行すると以下の様に表示されます。
ところで、foreach の命令分の定義は以下の通りです。
foreachは配列データをループ処理するための命令文です。foreachの構文には以下の2通りあります。 foreach (配列変数 as $key => $value) { 文 } foreach (配列変数 as $value) { // キーが必要無い場合 文 } 変数説明: $key : 配列変数の各要素のキー値(指標) $value : 配列変数の各要素の値
同一スクリプトでのFORMタグの内容の受信
上記のスクリプトでは PHP タグの action に別のPHPファイルを指定しましたが、 自分自身に指定することができます。 HTML スクリプトの記述を含んだ PHP スクリプトとして作成し、 「送信」ボタン押下時に自分自身のスクリプトを再度呼出すことになります。
以下にそのスクリプトの例を示します。
<?php /* [begin-2-4.php] */ // $_POST["name"]の存在確認 if (isset($_POST["name"]) == false) { // 存在しない場合、送信ページの出力 ?> <!DOCTYPE?html> <html> <head> <meta charset="UTF-8"> <title>FORMタグを使った送信</title> </head> <body> <h1>FORMタグを使った送信</h1> <form action="begin-2-4.php" method="post"> 名前:<input type="text" name="name" /><br> 住所:<input type="text" name="addr" /><br> <input type="submit" /> </form> </body> </html> <?php } else { // 存在する場合、送信ページの出力 ?> <!DOCTYPE?html> <html> <head> <meta charset="UTF-8"> <title>FORMタグの内容の受信</title> </head> <body> <h1>FORMタグの内容の受信</h1> <?php echo "名前:".$_POST["name"]."<br>"; echo "住所:".$_POST["addr"]."<br>"; ?> <br> <a href="begin-2-4.php">入力に戻る</a> </body> </html> <?php } ?>
このスクリプトは$_POST["name"]の存在を確認して、存在しない場合には入力画面を出力し、存在する場合は渡された(POSTされた)データを出力します。 ここではif文の説明はしませんが、変数の存在を確認するPHPの関数であるisset()は以下の様な宣言になっています。
機能:変数が宣言されていること、そして null とは異なることを検査する isset( mixed $var , mixed ...$vars ) : bool 引き数: $var :検査対象変数 $vars :別の検査対象変数 返り値:var が存在して null 以外の値をとれば true、そうでなければ false を返します。
この記事のまとめ
PHP スクリプトで POST 通信を使ったデータの渡し方について説明しました。
このスクリプトを発展させて、マスタデータのメンテナンス処理等の作成を目指します。
ただ、今回の方法ではまだまだ不都合な点があり、 入力されたデータについてエラーチェックを行って元の入力ページに戻すことは考慮されていませんので、 この辺りも含めて次回以降に紹介します。
コメント