メインコンテンツまでスキップ

クエリパラメータを用いたデータの受け渡し

クライアントがデータを送信する仕組み

PHP を用いることで、サーバー上でプログラムを動作させることができました。それでは、サーバー上で動作するプログラムに対し、ユーザーの入力内容を伝え、それによって動作を変更するにはどうしたら良いのでしょうか。

もっとも単純な方法は、URL にクエリ文字列と呼ばれる追加情報を付加することです。東京大学の学務システム UTAS を例にとってみましょう。ブラウザで UTAS にログインし、トップページを表示させると、その URL は

https://utas.adm.u-tokyo.ac.jp/campusweb/campusportal.do?page=main&tabId=home になっています。https://utas.adm.u-tokyo.ac.jp/campusweb/campusportal.doまではよく見る形式で?page=main&tabId=homeの部分がクエリ文字列です。

UTAS

クエリ文字列は、パラメータ名=値の組み合わせを&でつなぎ合わせた形となっており、?から始まります。

プロパティ名や値に特殊な文字(主にアルファベット以外の文字を指します)が含まれる場合は注意が必要です。例えば、日本語の文字は URL として使用することができないため、そのままではクエリ文字列の中に含めることができません。これらの文字を使用する場合、URL として使用可能な形式に変換してやる必要があります。

例えば、日本語のは UTF-8 においてE38182(6 桁の 16 進数)で表されます。この時、を URL で使用可能な形式に変換する(URL エンコード)場合、%E3%81%82となります。

ヒント

コンピューター上では、文字列をデータとして扱うために、すべての文字に対し一意のコードを割り当てています。これが文字コードです。Web の世界では、UTF-8が標準です。

よく言われる文字化けは、製作者側の意図と異なる文字コードでデータを開こうとする場合に起こる現象です。

クエリ文字列を用いて PHP にユーザー入力を渡す

HTML において、method属性をgetに指定したformタグを使用してinput要素を囲むと、input要素に入力された値をクエリ文字列を使用してサーバー側に送信することができます。

このとき、各input要素のname属性に指定された値が、クエリ文字列におけるパラメータ名として使用されます。データの送信先の URL はformタグのaction属性によって指定できます。早速例を見てみましょう。

index.html
<form method="get" action="members.php">
<p>名前: <input type="text" name="user-name" /></p>
<p><input type="submit" value="送信" /></p>
</form>
members.php
ようこそ!<?php print($_GET['user-name']); ?>さん!

クエリパラメータによるデータ送信

フォームの送信先の画面のアドレスバーに注目しましょう。index.htmlで入力された値が、URL のクエリパラメータとして引き渡されているのが分かります(なお、昨今のブラウザは URL エンコードされた文字列をデコードしてアドレスバーに表示する機能を持っているため、アドレスバーにエンコード済みの文字列が表示されていません)。

PHP では、クエリパラメータによって渡されたデータは、$_GETグローバル変数に連想配列の形式で自動的に格納されます。この変数はプログラム中のどこからでもアクセスすることが可能となっています。

課題

前回の課題における、素数の最大値を GET パラメータを用いて設定できるようにしましょう。intval関数を用いると、文字列を数値に変換できます。