フォームが PHP スクリプトに投稿された時、フォームから渡された全て の変数は PHP により自動的にスクリプトから使用可能となります。 この情報にアクセスする手段は複数あります。例を以下に示します。
特定の設定や個別の設定に依存し、HTMLフォームからのデータにアクセス する手段は多くあります。いくつかの例を以下に示します。
GETフォームを使用した場合も同じですが、かわりに適当な定義済みの
GET変数を使用するところが異なります。
GETは、QUERY_STRING (URLの'?'の後の情報)にも代入されます。
例えば、
http://www.example.com/test.php?id=3には、
$_GET['id']
によりアクセス可能なGETデータ
が含まれます。
$_REQUEST および
import_request_variables()も参照ください。
注意:
$_POST
および$_GET
のような スーパーグローバル 配列がPHP 4.1.0で利用可能となっています。
前記のようにPHP 4.2.0より前のバージョンでは、 register_globals のデフォルト値はonでした。 PHP 3では、常にonとなっています。 PHPコミュニティは、このディレクティブに依存しないことを推奨し、 このオプションがoffでのコードの動作を仮定 することを推奨しています。
注意: magic_quotes_gpcの設定 はGET、POSTそしてCookieの値に影響します。onになっていると (It's "PHP!") という値は自動的に (It\'s \"PHP!\") となり、DBへの挿入時の エスケープが不要になります。addslashes()、 stripslashes()そしてmagic_quotes_sybaseも 参照してください。
PHPではフォーム変数のコンテキスト内で配列が使用可能です(FAQの関連箇所も参照してください)。 例えば、関連する変数をグループ化したり、select inputで複数の値を 取得するといったことが可能です。フォームを同じスクリプトに投稿し、 投稿したデータを表示する例を示します。
例 12-11. より複雑なフォーム変数
|
PHP 3では、配列変数は1次元配列に限定されていました。PHP 4以降ではこの ような制約はありません。
フォームを投稿する際、次のタグのように標準の投稿ボタンの代わりに 画像を使用することができます。
画像のどこかがクリックされた場合、二つの変数 sub_x および sub_y が付け加えられてこのフォームはサーバーに転送されます。これらの変 数は、ユーザーがこの画像をクリックした座標を示しています。経験の ある人は、ブラウザにより送られた変数の名前においてアンダースコア がピリオドになってしまっていることを心配するかもしれません。 しかし、PHP はピリオドをアンダースコアに自動的に変換します。
PHP は、Netscapeの規約 に定
義されたHTTP Cookieを完全にサポートします。Cookieは、リモート
ブラウザにデータを保持し、再訪するユーザーを追跡し、特定する機構
です。setcookie() 関数によりCookieをセットす
ることができます。Cookieは、HTTP ヘッダの一部なので、SetCookie
関数をブラウザに何かを出力する前にコールする必要があります。
この制約は、header() 関数のものと同じです。
Cookieのデータは、$_COOKIE
,
$HTTP_COOKIE_VARS
のような適当なCookieデータ
配列で参照可能です。また、 $_REQUEST
でも
参照可能です。詳細および例については、
setcookie()のマニュアルページを参照してください。
単一のCookieに複数の値を代入したい場合は、配列として 代入することが可能です。以下に例を示します。
<?php |
上記スクリプトにおいては、2つの異なるCookieを生成されますが、 この場合、スクリプトではMyCookieという単一の配列になります。 一つのCookieに複数の値を設定したい場合、最初の値に serialize()または explode()を用いることを考えてください。
Cookieは、パスまたはドメインが異ならない限り、 以前のクッキーをブラウザ上の同じ名前の変数に置き換えることに 注意してください。 さて、買い物かご(Shopping Cart) プログラムの場合、カウンタを保持し、 受け渡したいと思うかもしれません。 これは、次のようになります。
例 12-12. setcookie()の例
|
通常、PHP はスクリプトに渡された変数の名前を変更しません。しかし、 ドット(ピリオド、終止符)はPHPの変数名で有効な文字ではないというこ とに注意する必要があります。次の例を見てみましょう。
<?php |
$varname
という名前の変数の後に
文字列結合演算子があり、その後に、裸の文字列(すなわち、既知のキー
または予約語にマッチしない引用符無しの文字列) 'ext' が続くとして
解釈します。この場合、明らかに意図する結果にはなりません。
重要なことを記述しておくと、このため、外部変数に含まれるドットを PHP は自動的にアンダースコアに変換します。
PHPは、変数の型を定義し、必要に応じて変換します。このため、ある変 数の型がある時点で常に明らかであるわけではありません。PHPは、変数 の型を調べる複数の関数をサポートしています。それらは、 gettype(), is_array(), is_float(), is_int(), is_object(), is_string() です。 型の章も参照ください。