PHP formからのデータ処理(GET送信)
クライアントからのデータの送信方法としてURLにデータを含めて送信するGET送信があります(httpリクエストのGETメソッットとも言います)。今回は、GET送信で送られたデータをPHPで取得する方法について説明します。
GETリクエストとは
HTTPのリクエストではパラメーターとして送信したいデータ、または、欲しいデータの条件を送信する事ができます。極端に言うと「データ送ります」がPOSTリクエストで、「この条件のデータをください(条件はこれです)」がGETリクエストです。
POSTリクエストについては改めて説明いたしますが。GETリクエストについてはアドレスバーに表示されているURLそのものになります。GETリクエストではURLに条件を付加することが出来ます。方法はURLの後に「?id=abc&no=3」クエリ文字列を付加します。
この付加データの条件をサーバ側で処理して結果をクライアントに返します。
URLにクエリ文字を付加してGET送信
では具体的にソースコードで見てみましょう。
サーバのPHPファイル「request.php」に対してGETリクエストを送信しましょう。このファイルに対してクエリ文字列を付加します。
GET送信のクエリ文字は以下のパターンで記述します。
1 |
http://localhost/request.php?id=abc&no=123 |
PHPでの受け取り
受け取り側のプログラムを記述しましょう(request.php)。
1 2 3 4 5 6 |
<?php header("Content-type: text/html; charset=utf-8"); echo "getパラメータで送られたidの値は、".$_GET['id']."です"; echo "<br>"; echo "getパラメータで送られたnoの値は、".$_GET['no']."です"; ?> |
GETで送られてきた値はPHPで“$_GET[ ]”を使います。[ ]のなかに、受け取りたいフォームの name属性 を書いてあげることで受け取ることができます。
実際にWebサーバ(XAMPP)で確認してください。
URLエンコード
GET方式に日本語のデータを送信する事はできません(ブラウザによって動作が異なります)。これは日本語が1文字を2バイト分のデータを使用して認識される「マルチバイト文字」というものだからです。これを回避して日本語のデータを送信するためには「URLエンコード」というものを使用します。
エンコードも文字列 = urlencode( 日本語の文字列 )
これはプログラムの中で関数として使用するのでアドレスバーに直接URLを入力する場合は使用できません。使用する場合は以下のように記述してください。ファイル名は「jp.php」としてください。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <title>ゲンジン</title> <meta charset="UTF-8"> </head> <body> <a href="request2.php?idj=<?php echo urlencode('日本語の文字列'); ?>">GETリクエストのリンク</a> </body> </html> |
URLエンコードした文字列を元に戻す関数もちゃんと用意されています。エンコードしたデータを元に戻す事を「デコード」と言いますが、URLエンコードに対応したデコード関数はurldecode()関数です。「request2.php」を以下のように作成してください。
1 2 3 4 |
<?php header("Content-type: text/html; charset=utf-8"); echo "getパラメータで送られたidjの値は、".urldecode($_GET['idj'])."です"; ?> |
formタグからPHPへ送信
今度はHTML内のformタグを使用して送信してみましょう。aタグでのリンクとURLに直接クエリを記述した場合は、日本語の記述に対してURLエンコードをしてましたが、fromタグから送る場合は自動でエンコードしてくれますので自身でエンコード関数を実装しなくても大丈夫です。
以下の送信用のHTMLファイル(送信用にはPHPソースを記述してないので拡張子はHTMLです)とPHPファイルを作成してください。
【form.html】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!DOCTYPE html> <html> <head> <title>ゲンジン</title> <meta charset="UTF-8"> </head> <body> <h2>フォームタグ</h2> <form action="request3.php" method="get"> <input type="text" name="namae" size="40"> <input type="submit" value="送信"> </form> </body> </html> |
受け側のファイルは、以下のソースになります。
【request3.php】
1 2 3 4 |
<?php header("Content-type: text/html; charset=utf-8"); echo "getパラメータで送られたnamaeの値は、".$_GET['namae']."です"; ?> |
GTT送信する場合の注意
GET送信ではいかの内容に注意して適切に使用しなければなりません。
リクエストの最大長
GET送信の特徴は、送信の内容をURLに含めて送るのでURLが長くなってしまします(日本語の場合はエンコードもするので)。URLの長さは,最大でも2,000文字ほどの長さに収める必要があるので少ない情報量でしか送れません。
セキュアな情報を送信できない
送信情報がアドレスに含められるのでIDやパスワードといった知られてはこまる情報が、サーバのログにそのまま残ってしまいます。また個人情報の取り扱いなどもNGとなります。見られて困るデータの場合は GET でなく POST(後述する)を使いましょう。