PHPのフォーム送信を理解しよう!GETとPOSTの違いと使いどころ
GETとPOSTによる違い
- GETのリクエストの値はURLに含まれ、$_GETで受け取る
- POSTのリクエストの値はURLに含まれず、$_POSTで受け取る
GETリクエストのURL文字数は最大で2083文字です。
それを超える場合、POSTリクエストを利用する必要があります。
GETとPOSTによる使い分け
GETを使うべき場面
GETでは送信内容がURLに含まれるため、同じURLに再度アクセスすると同じ内容を再現できます。
そのため、検索結果ページなどのURLをブックマークしたり、他の人と共有したいときはGETが適しています。
POSTを使うべき場面
POSTでは送信内容がURLに表示されないため、安全性の面で優れています。
パスワードや個人情報など、他人に見られては困る機密データを送信する場合はPOSTが適しています。
GETによるフォーム
formタグのmethod属性には「GET」、action属性には「遷移先のページ」を指定します。
<form method="GET" action="example.php">
フォームの例:get-result.php
に送信
<form method="GET" action="get-result.php">
<label for="yourname">お名前</label>
<input type="text" id="yourname" name="name"><br>
<label for="yourage">年齢</label>
<input type="text" id="yourage" name="age"><br>
<button type="submit">送信する</button>
</form>
GETで送信されると、フォーム内の入力欄で指定したname
属性の値が、URLの末尾に「?パラメータ=値」の形式で付加されます。
複数のパラメータは「&」で区切られ、例えば以下のようなURLになります。
https://example.com/get-result.php?name=佐藤花子&age=19
送信先のPHPでは、URLに付加されたパラメータを$_GETで受け取ることができます。
<?php
$name = $_GET['name']; // name="name"を受け取る
$age = $_GET['age']; // name="age"を受け取る
?>
<p>お名前:<?php echo $name; ?></p>
<p>年齢:<?php echo $age; ?></p>
<!-- 結果 -->
お名前:佐藤花子
年齢:19
POSTによるフォーム
- formタグ:「method=”GET”」→「method=”POST”」
- 受信側:「$_GET」→「$_POST」
formタグのmethod属性には「POST」、action属性には「遷移先のページ」を指定します。
<form method="POST" action="example.php">
フォームの例:post-result.php
に送信
<form method="POST" action="post-result.php">
<label for="yourname">お名前</label>
<input type="text" id="yourname" name="name"><br>
<label for="yourage">年齢</label>
<input type="text" id="yourage" name="age"><br>
<button type="submit">送信する</button>
</form>
送信されたデータはサーバーを経由して、$_POSTで受け取ることができます。
<?php
$name = $_POST['name']; // name="name"を受け取る
$age = $_POST['age']; // name="age"を受け取る
?>
<p>お名前:<?php echo $name; ?></p>
<p>年齢:<?php echo $age; ?></p>
<!-- 結果 -->
お名前:佐藤花子
年齢:19
フォームでの注意点
isset関数で値の有無を確認
isset関数は、変数に値が設定されており、かつnullでない場合にtrue
を返します。
isset(変数)
これを使うと、入力がない場合のエラーを防げます。
<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
$age = isset($_POST['age']) ? $_POST['age'] : '';
?>
<p>お名前:<?php echo $name; ?></p>
<p>年齢:<?php echo $age; ?></p>
htmlspecialchars関数でXSSを防ぐ
もしユーザーが以下のようなHTMLをフォームに入力し、それをそのまま画面に表示すると、送信先のページで「危険」と書かれたアラートダイアログがポップアップ表示されてしまいます。
<script>alert('危険');</script>
これは「XSS(クロスサイトスクリプティング)」と呼ばれる、Webサイトにおけるセキュリティの脆弱性です。
このような攻撃を防ぐには、htmlspecialchars関数を使って特殊文字をエスケープし、HTMLではなく「ただの文字列」として扱わせる必要があります。
$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
echo "<p>入力内容:{$message}</p>";
このようにすれば、<script>タグはそのまま文字として表示され、意図しないスクリプトの実行を防げます。
まとめ
基本的なフォームの作成自体はそれほど難しくありませんが、そのままではセキュリティや信頼性の面で不十分です。
実際に運用させる際は、十分な検証を行った上で適切な処理を加えることが重要です。

おすすめWEBスクール
WEB制作やWEBデザインを学びたいなら、SNSでも話題の「デイトラ」がおすすめ!
どのコースも10万円前後と業界最安値で、副業や転職に向けて十分なスキルを身につけることができます。
\ クリックしてジャンプ! /
お気軽にコメントどうぞ