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」の値が存在しないことによるエラーメッセージを無視している。

以下、参照。