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によるフォーム

GETとの違いは2点だけ
  • 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万円前後と業界最安値で、副業や転職に向けて十分なスキルを身につけることができます。

役に立ったら他の方にシェア

お気軽にコメントどうぞ

コメントする

目次