POST請求成功,但資料保存方式錯誤
P粉317679342
P粉317679342 2024-02-26 17:59:55
0
1
351

我嘗試向端點發送 POST 請求,收到 200 回應,但我發送的資料錯誤地保存在資料庫中;

我想知道問題是出在我的 post 請求上還是出在處理該請求的後端程式碼。

更具體地說:我正在向 Laravel MariaDB 後端發送 POST 請求。我沒有編寫後端程式碼,我得到的所有“細節”是:

post請求有3個欄位:

  • user_id:病患 ID
  • 密碼:病患密碼(所有病患均相同)
  • payload:一個 json 有效負載,其架構如下:
    • 'epoch_start' => '必填|數字',
    • 'epoch_end' => 'required|numeric|gte:epoch_start',
    • '大小' => '必要|數字|gt:0',
    • #'溫度' => '必需|陣列|最小:大小',
    • '壓力' => '必要|陣列|最小:大小',
    • '移動' => '必需|陣列|最小:大小',

這是處理請求的控制器:

has(['user_id', '密碼', '有效負載'])) {
            $password = $request->get('password');
            $user_id = $request->get('user_id');

            $user = User::where('id', $user_id)->firstOrFail();
            if($user->role != "病人") return new Response('Forbidden', 403);
            if($password != "HIDDENPASS") return new Response('Forbidden', 403);


            $payload = $request->get('payload');
            $data = json_decode($payload, true);

            $規則= [
                '紀元開始' => '必填|數位',
                '紀元結束' => '必需|數|gte:epoch_start',
                '尺寸' => '必填|數|gt:0',
                '溫度' => '必需|陣列|最小值:大小',
                '壓力' => '必需|陣列|最小值:大小',
                '運動' => '必需|陣列|最小值:大小',
                '溫度。*' => '數字',
                '壓力。*' => '數字',
                '運動。*' => '數字',
            ];

            $validator = Validator::make($data, $rules);

            if ($validator->passes()) {
                $s = 新感測器;
                $s->user_id = $user->id;
                $s->epoch_start = Carbon::parse($data["epoch_start"]);
                $s->epoch_end = Carbon::parse($data["epoch_end"]);
                $s->大小 = $data["大小"];
                $s->溫度 = json_encode($data["溫度"]);
                $s->壓力 = json_encode($data["壓力"]);
                $s->movement = json_encode($data["movement"]);
                $s->儲存();
                響應()->json(['成功'=>'成功'], 200);
            } 別的 {
                dd($validator->errors());
            }

        } 別的 {
            返回新的回應('禁止',403);
        }
    }
}

如果我使用Postman嘗試這個Post請求(我也嘗試使用curl和python的請求模組),我會收到200個回應,並且資料以這種方式保存到資料庫中。

問題出在「溫度」、「壓力」和「運動」欄位上,更具體地說,是資料庫周圍的雙引號:由網路應用程式進行的涉及此資料的計算都是錯誤的,但是,如果我手動刪除雙引號(來自PhpMyAdmin)計算是正確的。

為了完整起見,這裡是表格結構。

有沒有辦法避免這些欄位周圍出現雙引號?

我的POST請求是否有問題,或是相關的問題?

我不熟悉PHP,但如果我沒有記錯的話,這些資料的處理應該由這些行來管理:

$s->temperature = json_encode($data["temperature"]);
$s->pressure = json_encode($data["pressure"]);
$s->movement = json_encode($data["movement"]);

並且 json_encode 傳回一個字串,所以我開始認為後端程式碼在這裡有問題,但我想要第二個意見。

提前致謝

編輯:好的,感謝 @samuel-olufemi 的回答和 @sumit 的評論,我可以得出結論,json_encode 與 MariaDB 使用的長文本資料類型相結合是主要問題。 所以我嘗試儲存數組值而不對其進行編碼,將這 3 行更改為:

$s->temperature = $data["temperature"];
$s->pressure = $data["pressure"];
$s->movement = $data["movement"];

#並且根據我的願望,資料儲存時沒有雙引號。感謝大家的幫忙和時間。

P粉317679342
P粉317679342

全部回覆(1)
P粉794177659

您的實作是正確的。這個問題是由於 Maria DB 長文本資料類型管理 JSON 資料的方式造成的。

你可以看看這個答案

https://dba.stackexchange .com/questions/192754/json-functions-double-quotes-added-when-going-through-a-variable

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!