概要
GETメソッドの挙動・手順を確認した。
- 普通にHTML/PHPファイルが呼ばれると、GETメソッドになる
- なので初回起動時の処理はGETメソッド前提で、
$_GET
変数は定義済み、要素数0をチェック $_GET
の要素数が0より大きければ初回以降のGETメソッド処理- 初回以降の
$_GET
の要素チェックは''
との比較でok
確認コード
以下のHTMLとPHPで動作を確認する。
HTML
- フォームからGETメソッドで送信する
- 送信するのはテキストボックスの内容のみ
- PHP側で処理された
$msg
を出力する
1 2 3 4 5 |
<form method="get"> <input type="text" name="get_input"> <input type="submit" value="GET"> </form> <p><?php foreach ($msg as $m) echo $m, '<br>'; ?></p> |
PHP本体
- 全体の処理開始以降、節目の経過を
$msg
に累積記録し、HTMLでの出力に備える
1 2 3 4 5 6 7 8 9 10 11 12 |
$msg = []; $msg[] = '開始しました'; if ($_SERVER['REQUEST_METHOD'] === 'GET') { $msg[] = '$_SERVER[\'REQUEST_METHOD\'] === \'GET\'を確認しました'; if (isset($_GET) !== false) { $msg[] = '$_GETはセットされています(要素数:'. count($_GET) .')'; if (isset($_GET['get_input']) !== false) { $msg[] = '$_GET[\'get_input\']はセットされています'; $msg[] = '$_GET[\'get_input\']の内容は\'' . $_GET['get_input'] . '\'です'; } } } |
結果
初期起動時
HTMLの表示は以下の通り。
- 起動時にGETで始まっている
- そのため
$_GET
変数も定義済みになっている - ここには書いていないが
var_dump
で確認すると'Array ()'
となっている - ただし
$_GET
の要素数は0
1 2 3 |
開始しました $_SERVER['REQUEST_METHOD'] === 'GET'を確認しました $_GETはセットされています(要素数:0) |
このときブラウザーでのURL表示は以下のとおり。
1 |
http://localhost:8000/tests/get.php |
起動後のGET時
テキストボックスに’abc’と入れて送信した結果が以下の通り。
1 2 3 4 5 |
開始しました $_SERVER['REQUEST_METHOD'] === 'GET'を確認しました $_GETはセットされています(要素数:1) $_GET['get_input']はセットされています $_GET['get_input']の内容は'abc'です |
このときブラウザーでのURL表示は以下のとおり。ファイル位置の後ろに?
でパラメーターが加えられている。
1 |
http://localhost:8000/tests/get.php?get_input=abc |
なお、上記の実行後にはテキストボックスの内容は空になっている。
再度GETの実行時
1 2 3 4 5 |
開始しました $_SERVER['REQUEST_METHOD'] === 'GET'を確認しました $_GETはセットされています(要素数:1) $_GET['get_input']はセットされています $_GET['get_input']の内容は''です |
このときのブラウザーでのURL表示は以下のとおり。
1 |
http://localhost:8000/tests/get.php?get_input= |
リロード時
ブラウザーのリロードで再読み込みをすると、最後に表示されていたURLのままでリロードされ、同じ結果が表示される。
?以降のパラメーター部分を消してリロードしても、元のパラメーターが付加されたURLに戻ってしまう。
パラメーター部分を消してENTER、つまり直接URLを入力すれば初期状態からスタートする。
改竄に対して
上記コードで、Chromeの検証ツールでinput要素のname属性を改竄した場合、元のisset($_GET['get_input'])
が存在しなくなるのでチェックが必要。
1 2 3 |
開始しました $_SERVER['REQUEST_METHOD'] === 'GET'を確認しました $_GETはセットされています(要素数:1) |
まとめ
処理の流れ
初回起動時
- ファイルを最初に実行する場合はGETメソッド
- 初期起動時の$_GETは要素数0の配列
フォームからのGETメソッド
- その後フォームからGETメソッドが実行されると、INPUT要素の内容がURLのパラメーターに付加されてページの最初から実行される
リロード時
- ブラウザー機能でリロードしただけではURLはリフレッシュされず、直前のパラメーターで再実行される
GETのみの場合
処理全体を通してGETメソッドのみの場合、$_SERVER
によるチェックは不要になる。
GET処理とPOST処理を併用する場合は、GET処理を切り分ける必要がある。
action属性
form
要素のaction
属性をaction="./get.php"
と設定しても、リロード時には元のパラメーターが復活する。この属性はGETメソッドを指定したそのフォームからの送信でないと効果がない。