外部から来る変数
HTML フォーム (GET と POST)
フォームが PHP スクリプトに投稿された時、フォームから渡された全て の変数は PHP により自動的にスクリプトから使用可能となります。 この情報にアクセスする手段は複数あります。例を以下に示します。
例1 簡単なHTMLフォーム
<form action="foo.php" method="post"> Name: <input type="text" name="username" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Submit me!" /> </form>
HTML フォームからデータにアクセスする方法は二種類だけしかありません。 現在使える方法を、以下にまとめます。
例2 簡単なPOST HTMLフォームからのデータにアクセスする
<?php echo $_POST['username'];echo $_REQUEST['username'];?>
GETフォームを使用した場合も同じですが、かわりに適当な定義済みの
GET変数を使用するところが異なります。
GETは、QUERY_STRING
(URLの'?'の後の情報)にも代入されます。
例えば、
http://www.example.com/test.php?id=3
には、
$_GET['id']
によりアクセス可能なGETデータ
が含まれます。
$_REQUEST
も参照ください。
注意:
変数名のドットやスペースはアンダースコアに変換されます。 たとえば
<input name="a.b" />
は$_REQUEST["a_b"]
となります。
PHPではフォーム変数のコンテキスト内で配列が使用可能です(FAQの関連箇所も参照してください)。 例えば、関連する変数をグループ化したり、select inputで複数の値を 取得するといったことが可能です。フォームを同じスクリプトに投稿し、 投稿したデータを表示する例を示します。
例3 より複雑なフォーム変数
<?php if ($_POST) { echo '<pre>'; echo htmlspecialchars(print_r($_POST, true)); echo '</pre>'; } ?> <form action="" method="post"> Name: <input type="text" name="personal[name]" /><br /> Email: <input type="text" name="personal[email]" /><br /> Beer: <br /> <select multiple name="beer[]"> <option value="warthog">Warthog</option> <option value="guinness">Guinness</option> <option value="stuttgarter">Stuttgarter Schwabenbrau</option> </select><br /> <input type="submit" value="submit me!" /> </form>
注意:
外部の変数の名前が、正しい配列の文法で始まっていた場合、 後に続く文字は黙って無視されます。 たとえば、
<input name="foo[bar]baz">
は$_REQUEST['foo']['bar']
になります。
IMAGE SUBMIT 変数名
フォームを投稿する際、次のタグのように標準の投稿ボタンの代わりに 画像を使用することができます。
<input type="image" src="image.gif" name="sub" />
画像のどこかがクリックされた場合、二つの変数 sub_x
および sub_y
が付け加えられてこのフォームはサーバーに転送されます。これらの変
数は、ユーザーがこの画像をクリックした座標を示しています。経験の
ある人は、ブラウザにより送られた変数の名前においてアンダースコア
がピリオドになってしまっていることを心配するかもしれません。
しかし、PHP はピリオドをアンダースコアに自動的に変換します。
外部変数名のドット
通常、PHP はスクリプトに渡された変数の名前を変更しません。しかし、 ドット(ピリオド、終止符)はPHPの変数名で有効な文字ではないというこ とに注意する必要があります。次の例を見てみましょう。
<?php$varname.ext; /* 無効な変数名 */?>
ここで、パーサは、$varname
という名前の変数の後に
文字列結合演算子があり、その後に、裸の文字列(すなわち、既知のキー
または予約語にマッチしない引用符無しの文字列) 'ext' が続くとして
解釈します。この場合、明らかに意図する結果にはなりません。
重要なことを記述しておくと、このため、外部変数に含まれるドットを
PHP は自動的にアンダースコアに変換します。
変数の型の定義
PHPは、変数の型を定義し、必要に応じて変換します。このため、ある変 数の型がある時点で常に明らかであるわけではありません。PHPは、変数 の型を調べる複数の関数をサポートしています。それらは、 gettype(), is_array(), is_float(), is_int(), is_object(), is_string() です。 型の章も参照ください。
HTTP はテキストプロトコルなので、
$_POST
および $_GET
のような
スーパーグローバル配列
に入ってくる内容は、全てとは言えないまでも、ほとんどは文字列のままです。
PHP は決して値を特定の型に変換したりはしません。
以下の例では、$_GET["var1"]
は "null" という文字列を含みますし、
$_GET["var2"]
は、文字列 "123" を含みます。
/index.php?var1=null&var2=123
変更履歴
バージョン | 説明 |
---|---|
7.2.34, 7.3.23, 7.4.11 | セキュリティ上の理由により、外部から入力される Cookie の
名前 はurlデコードされなくなりました。 |