PHPを使ってWebアプリケーションを作る際、ユーザーからの入力を受け取るフォーム処理は基本中の基本です。
この記事では、POST
と GET
の違いや使い方、実用的なコード例を交えてわかりやすく解説します。
目次
GETとPOSTの違いを理解しよう
特徴 | GET | POST |
---|---|---|
データの送信方法 | URLに含める | HTTPリクエストボディに含める |
セキュリティ | 低(URLに表示される) | 高(URLに表示されない) |
データサイズ制限 | ブラウザ依存(一般に小さい) | 比較的大きなデータも可 |
主な用途 | 検索、ページ移動 | フォーム送信、ログインなど |
GETを使ったフォームの例
フォーム(HTML)
<form action="search.php" method="get">
<input type="text" name="keyword" placeholder="検索キーワード">
<input type="submit" value="検索">
</form>
このHTMLは、GET
メソッドを使った検索フォームです。ユーザーが入力した検索キーワードをURLのクエリパラメータとして search.php
に送信する構造です。
要素 | 説明 |
---|---|
<form action="search.php" method="get"> | ユーザーが送信した情報を search.php に送る。method="get" により、URLのクエリパラメータとして送信される。 |
<input type="text" name="keyword"> | ユーザーが検索キーワードを入力するテキストボックス。name="keyword" によって、送信時に keyword=○○ の形式で送られる。 |
<input type="submit" value="検索"> | 送信ボタン。押すとフォームの内容が送信される。 |
ユーザーが「WordPress」と入力して送信した場合
- ブラウザのURLバーに表示される例:
search.php?keyword=WordPress
search.php
内での受け取り方(PHP):<?php if (isset($_GET['keyword'])) { $keyword = htmlspecialchars($_GET['keyword'], ENT_QUOTES, 'UTF-8'); echo "検索キーワード:" . $keyword; } ?>
受け取り(PHP)
<?php
if (isset($_GET['keyword'])) {
$keyword = htmlspecialchars($_GET['keyword'], ENT_QUOTES, 'UTF-8');
echo "検索キーワード:" . $keyword;
}
?>
ポイント:
- URLに
?keyword=○○
という形式で送信される - ユーザーの入力をそのまま表示しないために
htmlspecialchars()
を使ってサニタイズする
注意点
- GETメソッドはデータがURLに表示されるため、パスワードなどの機密情報には使わないようにしてください。
htmlspecialchars()
を使ってXSS(クロスサイトスクリプティング)対策をしましょう。
POSTを使ったフォームの例
フォーム(HTML)
<form action="submit.php" method="post">
<input type="text" name="name" placeholder="名前">
<input type="email" name="email" placeholder="メールアドレス">
<input type="submit" value="送信">
</form>
受け取り(PHP)
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
echo "お名前:" . $name . "<br>";
echo "メールアドレス:" . $email;
}
?>
ポイント:
$_POST
でフォームデータを受け取る$_SERVER['REQUEST_METHOD']
で送信方法を確認すると安全htmlspecialchars()
を使ってXSS対策を行う
GETとPOSTの使い分けの目安
- GET:ページの状態を記録したいとき(検索など)、URLで共有したいとき
- POST:ログイン、会員登録、問い合わせフォームなど重要な情報を扱うとき
以下は、記事に追記できる htmlspecialchars()
の詳しい解説です。フォーム処理で必須のサニタイズ関数として、初心者にもわかりやすく説明しています。
セキュリティの基本:サニタイズとバリデーション
フォームから受け取るデータは、悪意ある入力を想定してサニタイズ(無害化)やバリデーション(形式チェック)が必須です。
例:
$name = trim($_POST['name']);
if (!preg_match('/^[\p{L}\s]+$/u', $name)) {
echo "名前の形式が正しくありません。";
}
htmlspecialchars() の使い方と役割
htmlspecialchars()
は、PHPでフォームから受け取ったデータを画面に表示するときに必須のサニタイズ関数です。これを使うことで、ユーザー入力に含まれるHTMLタグやスクリプトを無害化し、XSS(クロスサイトスクリプティング)攻撃を防ぐことができます。
基本構文
htmlspecialchars()
は、以下のように記述します。
$safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
主なパラメータ
- 第1引数:サニタイズしたい文字列
- 第2引数:変換する特殊文字の種類。よく使うのは
ENT_QUOTES
(シングル・ダブルクォーテーション両方を変換)。 - 第3引数:文字エンコーディング。日本語サイトでは
'UTF-8'
を指定するのが一般的。
使用例
$name = $_POST['name'] ?? '';
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo "こんにちは、" . $safe_name . "さん!";
このようにすることで、万が一ユーザーが <script>
タグなどを入力しても、ブラウザにはそのまま文字列として表示され、スクリプトは実行されません。
htmlspecialchars() を使わない危険性
ユーザーが以下のような悪意ある入力をした場合:
<script>alert('攻撃');</script>
htmlspecialchars()
を使わずにそのまま画面に出力すると、JavaScript が実行されてしまい、XSS攻撃が成立します。これにより、
- クッキーの盗難
- 偽フォーム表示
- ページ改ざん
などの重大な被害につながる恐れがあります。
htmlspecialchars() と htmlentities() の違い
htmlspecialchars()
:最低限必要な文字(&、<、>、”、’)をエスケープhtmlentities()
:HTMLで意味を持つすべての文字をエスケープ(過剰な場合もある)
通常は htmlspecialchars()
で十分です。
フォーム入力を安全に扱うためには、受け取ったデータを必ず htmlspecialchars()
などでサニタイズしましょう。
特にユーザーに入力内容を確認画面や完了画面で表示する際には欠かせない処理です。
まとめ
$_GET
と$_POST
を使ってフォームデータを受け取れる- 入力値は必ずサニタイズ・バリデーションしよう
- 用途に応じて GET/POST を正しく使い分けることが大切
フォーム入力の処理はPHPの基本中の基本です。しっかり理解して、安全で正確なアプリケーション開発を目指しましょう!