画面遷移するGET
以下の例は、入力画面のform
でテキストを入力し別ページにGETでデータを渡す。遷移後のページでスーパーグローバル変数$_GET
を介してデータを受け取り、それを表示している。GETメソッドをPOSTに変更しても動作する。
入力ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>GETの例~入力ページ</title> </head> <body> <h1>入力ページ</h1> <form method="get" action="get_display.php"> <label> 名前を入力: <input type="text" name="user_name"> <input type="submit" value="送信"> </label> </form> </body> </html> |
遷移後の表示ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $message = ''; if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (!isset($_GET['user_name'])) { $message = '何らかのトラブルです'; } else if ($_GET['user_name'] === '') { $message = '名前を入力してください'; } else { $message = 'ようこそ'; $message .= htmlspecialchars($_GET['user_name'], ENT_QUOTES, 'UTF-8'); $message .= 'さん'; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>GETの例~表示ページ</title> </head> <body> <h1>遷移後の表示ページ</h1> <p><?php echo $message; ?></p> </body> </html> |
入力ページの要点
- htmlファイルでもいいが、将来の変更可能性を見据えてphpファイル
form
要素でmethod
属性をget
に、action
属性で遷移先のページを指定- テキスト入力は
input
要素でtype
属性をtext
に、name
属性の値は受信側の変数で使われる - 送信ボタンは
input
要素のtype
属性をsubmit
にして配置
遷移後のページの要点
- スーパーグローバル変数
$_SERVER['REQUEST_METHOD']
で送信側のメソッドが'GET'
であることを確認('POST'
の場合は以降が無視されて$message
は空のまま) - スーパーグローバル変数
$_GET
は連想配列で、送信側のname属性で指定した値をキーとして値を取り出す isset()
で$_GET
がundefinedの場合はエラー処理- テキストボックスが空のままGETされると空文字列になるため、必要に応じてその処理
- テキストが有効な場合表示処理
- ユーザー入力を表示する場合は必ず
htmlspecialchar()
で特殊文字を変換
画面遷移しないPOST
次の例ではページ遷移をせず、formからPOSTで送信されたデータを同一ページに反映させている。POSTメソッドをGETに変更しても動作する。
要点は1つ前の画面遷移する場合と同じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php $message = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!isset($_POST['user_name'])) { $message = '未入力状態'; } else if ($_POST['user_name'] === '') { $message = '名前を入力してください'; } else { $message = 'ようこそ'; $message .= htmlspecialchars($_POST['user_name'], ENT_QUOTES, 'UTF-8'); $message .= 'さん'; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>画面遷移なしのPOST</title> </head> <body> <h1>入力・表示画面</h1> <form method="post"> <label> 名前を入力: <input type="text" name="user_name"> <input type="submit" value="送信"> </label> </form> <p><?php echo $message; ?></p> </body> </html> |