Codeworks Notes

 2022-12-28

 2022-12-29

PHP
PHP基礎
バックエンド
フロントエンド

POST メソッドの話

もう今更感が強いんですが、分かっていても整理しておいた方がいいと思って。

送信した情報、どうやって次のページに渡してるの?

Webブラウザで何かを入力させる仕組みを作っていけば必ずやることになる「フォームに入れた値はどうやって受け取るのか」という話。

そんなに難しくないのでささっと行きます。

フォームに何か入れて submit させる仕組み。

<form method="post" action="">
  <input type="text" name="your_name">
  <input type="submit" value="送信する">
</form>

こいつはこんな感じで表示される。

 

入れた内容は action="" に向かって post メソッドで送信されます。
action 属性は送り先なので、ここに指定のPHPファイルやURLを入れると、送信された値を抱えたまま目的のページにジャンプします。action の値を空にすると自分自身のページを再表示します。

受け取り先ではどう渡されているのか

大事なポイントは「 POST された値はスーパーグローバル変数 $_POST に配列で渡される」です。
それが理解できれば寝ててもフォームはできる。

// 送信元の記述
<input type="text" name="your_name">    // ここに「foobar」とか入れたとする
<input type="submit" value="送信する">

// 受け取り先での形はこうなってる
$_POST = array(
  "your_name" => "foobar"
);

テキストボックスに入れた値は value 値として name 値と対になって post されます。$_POST に格納される時には、それぞれ name 値が配列のキー、value 値が配列の値となって連想配列の形を取ります。

渡された値の取り出し方

めちゃくちゃ簡単です。

<?php
  // postされた値を取得
  $name = $_POST['your_name'];
  // 出力
  echo '入力された名前は'.$name.'です';
?>

出力結果

入力された名前はfoobarです

これが基本。
実際には名前やメールアドレスなどをユーザーに入力させ、お問い合わせフォームであれば内容を POST 値から受け取って E-mail にして送信させたり、ユーザー登録して利用するサービスであれば入力された個人情報を安全な形でデータベースに保存し、次回以降のログイン認証で利用したりします。

それ以外にも多岐にわたる用途で入力に対して求められるレスポンスを返す仕組みを実現するためによく使われるのがフォームであり、Webアプリを作る際には仕組みを正しく理解している必要があります。

注意点

input フォームは自由な文字列を入力して送信することができます。
もし「名前」というフォームに名前を入れないで PHP のコードや SQL 文を入れられたらそのまま実行されるので、そこから個人情報ズルズル抜いたりできちゃうことから、悪意あるユーザーが悪いことをできないようにするために、入力された値を無害な文字列に変換するといったセキュリティ面のリスクや対策の知識も必要になってきます。

関連情報

フォームの値を一括浄化する