Webサイト制作におけるPHPでのフォーム作成(その1:送信方法とスーパーグローバル変数)
Webサイト制作において、ユーザーからの入力を受け取る部分をPHPで作ることにより、データの送受信を行うことができるようになる。
今回はWebサイト内の問い合わせページなどで用いられることが多いフォーム作成の基本についてまとめておく。
formタグ
フォーム部分は必ず全体をformの始終タグで囲まなければならない。
formタグの書き方は下記の通り。
<form method="POST"or"GET" action="データ送信先URL"> フォームの中身 </form>
フォームには"POST"(ポストデータ)または"GET"(クエリ文字列)の2つのデータ送信方法があり、formタグのmethod属性でどちらかを指定する。
デフォルトの送信方法は"GET"で、指定を省略した場合は"GET"になる。
"POST"と"GET"の違いは下記の通り。
POST(ポストデータ)
- ある程度まとまったデータの送信に向いている。
- URLの最後に入力情報が追加されないので、個人情報などのセキュリティ面に関するデータのやりとりに向いている。
GET(クエリ文字列)
- まとまったデータの送信には不向き。
- URLの最後に入力情報(クエリ情報)が追加されて表示されるため、個人情報などのセキュリティ面に関わるデータのやりとりには不向き(パスワードなどの入力情報が表示されてしまう)。
- 検索した場合などは、URLに検索情報が反映される(URLが検索結果のページのものになる)ので、検索結果のページを復元したい場合や、ブックマークしたい場合などには向いている。
スーパーグローバル変数
スーパーグローバル変数とは、PHPがあらかじめ用意している(定義済みの)常時アクセス可能な変数のこと。データの送信方法に関するスーパーグローバル変数は、method属性の値ごとに変数名が決まっている。
method属性値 | スーパーグローバル変数名 | 使用時(データ取得時)の書き方 |
---|---|---|
POST | $_POST | $_POST['名前(name属性値)'] |
GET | $_GET | $_GET['名前(name属性値)'] |
※参照http://php.net/manual/ja/language.variables.superglobals.php
送信されるデータは、inputタグなどのフォーム構成要素の「name属性値」と「入力データ」または「value属性値」とを1セットとして、スーパーグローバル変数($_POSTまたは$_GET)に格納されて、formタグのaction属性で指定したURLへ送られる。
以下、"POST"の確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPデータ送信1:POST</title> </head> <body> <?php print ('コメント:'.@$_POST['greeting']); // 入力内容を表示 ?> <form method="POST" action="<?php print $_SERVER['PHP_SELF'] ?>"> <input type="text" name="greeting"> <input type="submit" value="送信" name="sub"> </form> </body> </html>
以下、"GET"の確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPデータ送信2:GET</title> </head> <body> <?php print ('コメント:'.@$_GET['greeting']); // 入力内容を表示 ?> <form method="GET" action="<?php print $_SERVER['PHP_SELF'] ?>"> <input type="text" name="greeting"> <input type="submit" value="送信" name="sub"> </form> </body> </html>
上記コード内にて用いている便利な機能について簡単にまとめておく。
- 「$_SERVER['PHP_SELF']」:現在実行しているスクリプトのファイル名をドキュメントルートから取得する。formタグのaction属性値にphpで出力(指定)することで、送信データの送り先を送信元ページ(同一ページ内)にすることができる。危弱性において問題ありだが、ローカルのテストサーバーなどでコードを試すときに使う分には結果を確認しやすいので便利。
- エラー制御演算子「@」:PHPの式の前に「@」をつけることで、その式で生成されたエラーメッセージを無視することができる。上記コードでは初回アクセス時に「$_POST」or「$_GET」の値が存在しないことによるエラーメッセージを無視している。
以下、参照。