コードロード

エラー討伐

【PHP】Content-Typeがapplication/jsonのPOSTから値を取得する

課題

PHP$name = (string)filter_input(INPUT_POST, 'name') でPOSTの値を取得できない。

原因

$_POST() または (キャスト)filter_input(INPUT_POST, 'key') では、そもそも application/json を取得できない。

公式リファレンスでは下記のように書いてある。

Content-Type に application/x-www-form-urlencoded あるいは multipart/form-data を用いた HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列です。 https://www.php.net/manual/ja/reserved.variables.post

解決方法

file_get_content('php://input')JSONファイルを取得して、 json_decode() でオブジェクトに変換して取り出す。

$json   = file_get_contents('php://input');
$object = json_decode($json);

PostmanでのPOST送信の方法

  1. メソッドをPOSTに設定
  2. Content-Typeを application/json

    f:id:naka_no_mura:20220114135533p:plain

  3. Bodyタグのrawを選んで、JSONになっていることを確認。

  4. JSON形式で送信したい値をセット
  5. 送信

    f:id:naka_no_mura:20220114135547p:plain

参考

Postman POSTが送信できない | OCテックノート

【PHP】JSONデータのPOST受け取りで application/x-www-form-urlencoded とapplication/json の両方に対応 - Qiita

[PHP]POSTされたJSONデータを受け取る方法 - D-NET