クエリパラメータを用いたデータの受け渡し
クライアントがデータを送信する仕組み
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
の部分がクエリ文字列です。
クエリ文字列は、パラメータ名=値
の組み合わせを&
でつなぎ合わせた形となっており、?
から始まります。
プロパティ名や値に特殊な文字(主にアルファベット以外の文字を指します)が含まれる場合は注意が必要です。例えば、日本語の文字は 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
属性によって指定できます。早速例を見てみましょう。
<form method="get" action="members.php">
<p>名前: <input type="text" name="user-name" /></p>
<p><input type="submit" value="送信" /></p>
</form>
ようこそ!<?php print($_GET['user-name']); ?>さん!
フォームの送信先の画面のアドレスバーに注目しましょう。index.html
で入力された値が、URL のクエリパラメータとして引き渡されているのが分かります(なお、昨今のブラウザは URL エンコードされた文字列 をデコードしてアドレスバーに表示する機能を持っているため、アドレスバーにエンコード済みの文字列が表示されていません)。
PHP では、クエリパラメータによって渡されたデータは、$_GET
グローバル変数に連想配列の形式で自動的に格納されます。この変数はプログラム中のどこからでもアクセスすることが可能となっています。
課題
前回の課題における、素数の最大値を GET パラメータを用いて設定できるようにしましょう。intval
関数を用いると、文字列を数値に変換できます。