1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPでPOSTリクエストのクエリパラメータを受け取る方法を知らなかった話

Posted at

はじめに

こんにちは!高校生でプログラミング勉強中のCureSabaです。
今回は「PHPでPOSTリクエスト時のクエリパラメータの受け取り方」について、自分の気づきをまとめます。

背景

APIを設計しているとき、POSTリクエストで

https://example.com/endpoint?foo=bar

のように、クエリパラメータ付きのURLを使うケースがあります。

「POSTなんだから、パラメータは全部$_POSTで受け取れるよね?」
と思っていましたが、クエリパラメータ(?以降)は$_POSTには入りません

結論

  • クエリパラメータは、HTTPメソッドに関わらず$_GETに格納される
  • POSTリクエストの本文(form-dataやjson)は$_POSTphp://inputで受け取る

実際に試してみる

<?php
// 例: https://example.com/endpoint?foo=bar にPOSTリクエスト

var_dump($_GET);   // クエリパラメータ(foo=bar)が入る
var_dump($_POST);  // POST本文(フォームデータなど)が入る
?>

例えばcurlで…

curl -X POST "https://example.com/endpoint?foo=bar" -d "baz=qux"
  • $_GET['foo' => 'bar']
  • $_POST['baz' => 'qux']

まとめ

  • POSTリクエストでもURLの?以降の値は$_GETで受け取る
  • 「POSTだから全部$_POST」と思い込んでいるとハマるので注意

おまけ:JSONの場合

Content-Typeがapplication/jsonの場合は、
$_POSTには何も入らず、php://inputから取得します。

$json = file_get_contents('php://input');
$data = json_decode($json, true);

終わりに

もし、この記事が役に立ったと思ったら、ぜひコメントやシェアをお願いします。また、質問や改善点などがあれば気軽にコメントしてください!

それでは、良いプログラミングライフを!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?