WEBフォームは、ウェブサイト上でユーザーから様々な情報を受け取るための重要な仕組みです。お問い合わせやアンケート、会員登録、ログインなど、多くの場面で活用されています。フォームから送信されたデータは、サーバー側で処理・取得する必要があり、その代表的な方法としてGETとPOSTがあります。
本記事では、これらの基本的なデータの受け取り方を解説し、実際に動作するシンプルなフォームの例を通して理解を深めていきます。初心者の方でもわかりやすいように、具体的なコードも紹介していきますので、ぜひ参考にしてください。
入力した値をGETで取得する
フォームの送信方法の一つに「GET」があります。GETは、フォームで入力されたデータをURLの末尾にパラメータとして付加して送信する方式です。例えば、検索フォームでキーワードを入力して検索結果ページに遷移する際などによく使われています。
GETは主に以下のような特徴と使いどころがあります。
GETの特徴
- データがURLに表示される
フォームで送信した情報は、?key=value&key2=value2
の形式でURLに含まれます。そのためユーザーや第三者が送信内容を確認しやすい反面、機密情報や長文のデータ送信には不向きです。 - データ量は少なめ
URLの長さにはブラウザやサーバー側の制限があるため、送信できるデータ量は数千文字程度までが実用的です。大量データの送信にはPOSTの利用が推奨されます。 - ブックマークや共有がしやすい
URLにデータが含まれるため、送信結果の状態をそのままブックマークしたり他人と共有したりできます。例えば検索結果のURLをそのままコピーしてメールで送ることが可能です。
コード例(HTML + PHP)
<!-- sample_get.html -->
<form method="get" action="get_receive.php">
名前:<input type="text" name="username">
<input type="submit" value="送信">
</form>
<!-- get_receive.php -->
<?php
if (isset($_GET['username'])) {
// 入力値の特殊文字をエスケープし、XSS攻撃を防止する
$name = htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8');
echo "こんにちは、" . $name . "さん!";
} else {
echo "名前が入力されていません。";
}
?>
解説
この例では、<form>
タグのmethod="get"
属性によって、ユーザーが入力した「username」の値がURLのクエリパラメータとして送信されます。
PHP側ではスーパーグローバル変数$_GET
で送信された値を受け取り、isset
関数で値が存在するかをチェックしています。値があればhtmlspecialchars
関数を使ってHTMLの特殊文字(例:<
, >
, "
)を安全な文字列に変換し、画面に表示しています。これはクロスサイトスクリプティング(XSS)攻撃を防ぐための重要な処理です。
もし名前が送信されていなければ、入力がない旨のメッセージを表示します。
このようにGETはシンプルで扱いやすいため、情報を取得してすぐに結果を表示したい場面に適しています。
入力した値をPOSTで取得する
フォームの送信方法のもう一つの代表的な方法が「POST」です。POSTは、フォームで入力されたデータをHTTPリクエストの本文(ボディ)に含めて送信するため、URLにデータが表示されません。
この特性から、ログインフォームやパスワード送信、個人情報など機密性の高いデータの送信に適しています。また、POSTは送信可能なデータ量に実質的な制限がほとんどなく、大量のテキストやファイルの送信にも対応できます。
特徴
- URLにデータが表示されない
データはHTTPリクエストの本文に含まれるため、ブラウザのアドレスバーには送信内容が見えません。これにより、第三者がURLから送信内容を容易に参照することができず、プライバシー保護の面で優れています。 - 大量のデータを送信可能
GETのようにURL長の制限を受けず、フォーム内のテキストやファイルなど、比較的大きなデータの送信に適しています。 - セキュリティ面でGETより優れているが、暗号化にはHTTPSが必須
URLにデータを含まないため第三者に見られにくいですが、送信内容が暗号化されるわけではありません。送信時に盗聴を防ぐにはHTTPS通信を必ず併用してください。
コード例(HTML + PHP)
<!-- sample_post.html -->
<form method="post" action="post_receive.php">
メールアドレス:<input type="email" name="email" required>
<input type="submit" value="送信">
</form>
<!-- post_receive.php -->
<?php
if (isset($_POST['email'])) {
// 入力されたメールアドレスの特殊文字をエスケープし、XSS対策を実施
$email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
echo "送信されたメールアドレス:" . $email;
} else {
echo "メールアドレスが入力されていません。";
}
?>
解説
<form>
タグのmethod="post"
属性により、フォームのデータはHTTPリクエストの本文としてサーバーに送信されます。PHPではスーパーグローバル変数$_POST
を使って送信データを受け取ります。isset()
関数で入力値の有無を確認し、値が存在すればhtmlspecialchars()
関数でHTML特殊文字を変換し、XSS(クロスサイトスクリプティング)などのセキュリティリスクを防止しています。
POST送信はURLにデータを含まないため、検索結果などの情報を共有する場合には向いていませんが、ユーザーのパスワードやメールアドレスなどの重要な情報を送信する際に適しています。
また、大量のテキストデータやファイルのアップロードもPOST経由で行われることが一般的です。フォームの入力内容がユーザーのプライバシーに関わる場合は、必ずHTTPS通信を使って暗号化を行うことが重要です。
SERVER変数について
PHPの$_SERVER
は、サーバー環境やHTTPリクエストに関する情報を格納しているスーパーグローバル変数です。これはPHPスクリプトの実行環境に関するさまざまな情報を配列形式で提供し、フォームの送信元やリクエストの種類、サーバー名、ユーザーエージェントなど多岐にわたるデータを参照できます。フォーム処理やページ制御、ログ記録、デバッグの際に非常に便利で、ウェブアプリケーションの動的な振る舞いを制御する基盤的な役割を持ちます。
よく使う例
$_SERVER['REQUEST_METHOD']
現在のHTTPリクエストのメソッド名を取得します。
代表的には「GET」や「POST」が返され、フォームの送信方法を判別する際に利用されます。$_SERVER['PHP_SELF']
現在実行中のスクリプトのファイルパスを返します。
例えばフォームの送信先を同じファイルにする場合などに使われます。
XSS対策としてHTMLエスケープが必須です。$_SERVER['QUERY_STRING']
URLのクエリ部分(?
以降のパラメータ文字列)を取得します。
URLパラメータの内容を生で確認したい場合やログ出力などに便利です。$_SERVER['HTTP_HOST']
リクエストが送信されたホスト名を取得します。
例えば「example.com」や「localhost」などが返されます。$_SERVER['REMOTE_ADDR']
クライアント(ユーザー)のIPアドレスを取得します。
アクセスログの記録やアクセス制限を行う際に使用されます。$_SERVER['HTTP_USER_AGENT']
ユーザーのブラウザ情報(ユーザーエージェント)を取得します。
ブラウザやデバイスの判別に役立ちます。$_SERVER['SCRIPT_FILENAME']
実行中のスクリプトの絶対パスを返します。
ファイルのパスを動的に取得したい場合に利用されます。
コード例
<?php
echo "リクエストメソッド: " . $_SERVER['REQUEST_METHOD'] . "<br>";
echo "現在のページ: " . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . "<br>";
echo "クエリ文字列: " . htmlspecialchars($_SERVER['QUERY_STRING'], ENT_QUOTES, 'UTF-8') . "<br>";
echo "ホスト名: " . $_SERVER['HTTP_HOST'] . "<br>";
echo "クライアントIPアドレス: " . $_SERVER['REMOTE_ADDR'] . "<br>";
echo "ユーザーエージェント: " . htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8') . "<br>";
echo "スクリプトのパス: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
?>
解説
$_SERVER
には上記のようにサーバーやクライアントに関するさまざまな情報が格納されています。
例えば、$_SERVER['REMOTE_ADDR']
を使えばユーザーのIPアドレスを取得できるため、アクセス制限やログ記録に活用可能です。$_SERVER['HTTP_USER_AGENT']
はユーザーのブラウザやOSの種類を判別するために利用でき、レスポンシブ対応や特定ブラウザの不具合回避に役立ちます。
また、$_SERVER['HTTP_HOST']
は現在アクセスしているドメイン名を動的に取得するのに便利です。
これらの情報を組み合わせることで、より高度で柔軟なウェブアプリケーションを作成できます。
名前を入れて送信する例
簡単なフォームで「名前」を入力して送信し、挨拶を返す例です。
コード例(HTML + PHP)
<!-- name_form.php -->
<form method="post" action="">
名前:<input type="text" name="username" required>
<input type="submit" value="送信">
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['username'])) {
$name = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
echo "<p>こんにちは、" . $name . "さん!</p>";
}
?>
解説
この例はPHPとHTMLが同じファイル内にあります。$_SERVER['REQUEST_METHOD']
でPOST送信かどうか判定し、名前が入力されていれば挨拶を表示します。
足し算をするフォームの例
2つの数字を入力して足し算の結果を表示する実践例です。フォームの入力値を数値に変換し、計算します。
コード例(HTML + PHP)
<!-- add_form.php -->
<form method="post" action="">
数字1:<input type="number" name="num1" required>
数字2:<input type="number" name="num2" required>
<input type="submit" value="計算">
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$num1 = isset($_POST['num1']) ? (int)$_POST['num1'] : 0;
$num2 = isset($_POST['num2']) ? (int)$_POST['num2'] : 0;
$sum = $num1 + $num2;
echo "<p>結果:{$num1} + {$num2} = {$sum}</p>";
}
?>
解説type="number"
で数値入力を促し、PHP側で(int)
キャストして計算します。ユーザーが送信した値を安全に処理しつつ、結果を動的に表示できます。