前回GETでリクエストされたデータをJSONで返すプログラムを紹介した。
今回はPOSTされたJSONデータを受け取り、その後の処理に繋げる方法を記す。
JSONはPOSTのパラメータとして受け取るのではなく本文データ(body)として受け取る。
その方法は以下の通り
$body = file_get_contents('php://input');
受け取ったJSONデータは 関数 json_decode() で配列に変換して扱いやすくする。このとき第二引数を true にすると連想配列に変換される。
$json = json_decode($body, true);
基本的な処理方法はこんな感じ。
後は配列から値を取り出し、様々な処理に使用すればよい。
次の例はPOSTされたJSONデータを使ってデータベースを更新するプログラムである。
……と、その前に、受け取るJSONの仕様を次のように定義しておく
denno : 伝票No
meisaiarray : 伝票明細の配列
meisaino : 伝票明細の要素(伝票明細No)
itemcode : 伝票明細の要素(商品コード)
suryou : 伝票明細の要素(数量)
こんな感じのJSONデータを受け取ると想定する。
↓↓↓↓↓↓↓↓
{
"denno": 10000001,
"meisaiarray": [
{
"meisaino": 1,
"itemcode": "code001",
"suryo": 3
},
{
"meisaino": 2,
"itemcode": "code002",
"suryo": 15
}
]
}
前回同様データベースはPostgreSQLを使っているが、他のデータベースに応用可能だ。
<?php
#定数
define('PG_CONNECT_STRING', 'host=localhost port=5432 dbname=mydb user=oreore password=orenopass'); //DB接続文字列
$body = file_get_contents('php://input'); //BODYの取得
if (is_null($body)) {
# error データが無い
http_response_code(500); //HTTPレスポンスコード(500サーバーエラー)
echo "no data (JSON)";
exit();
}
$json = json_decode($body, true); //JSONに変換 第二引数をTrueにすると連想配列になる
if (is_null($json)) {
# error JSONをデコードできない
http_response_code(500); //HTTPレスポンスコード(500サーバーエラー)
echo "JSON error";
exit();
}
#PostgeSQLに接続
$pgconn = pg_connect(PG_CONNECT_STRING);
if (!$pgconn) {
# error DBに接続できない
http_response_code(500); //HTTPレスポンスコード(500サーバーエラー)
echo "cannot connect PostgreSQL";
exit();
}
$denno = $json['denno']; //伝票No
$meisaiarray = $json['meisaiarray']; //明細の配列
for ($i=0; $i < sizeof($meisaiarray); $i++) {
# 要素の取り出し
$denno = (int)$meisaiarray[$i]['denno'];
$meisaino = (int)$meisaiarray[$i]['meisaino'];
$itemcode = (string)$meisaiarray[$i]['itemcode'];
$suryou = (int)$meisaiarray[$i]['suryou'];
# SQLを作成
$sql = "UPDATE denpyotable SET" .
" meisaino=" . $meisaino .
",itemcode='" . $itemcode . "'" .
",suryou=" . $suryou .
" WHERE denno=" . $denno . ";";
pg_exec($pgconn, $sql); //SQL実行
}
pg_close($pgconn); //DB接続切断
http_response_code(200); //HTTPレスポンスコード(200正常終了)
exit();
?>
1件のコメント