最近在使用 ThinkPHP 開發專案的時候,遇到了一個問題:提交表單後,無法取得 post 資料。這在開發過程中是比較常見的問題,有些時候我們會感到十分困惑,尤其是在網路上找了許多方法仍然沒能解決問題的時候。本文將簡單介紹如何解決這個問題。
一、問題現象
提交表單後,透過request->param() 或$this->request->param() 取得不到post 數據,得到的是空數組。
二、問題原因
在表單提交時,如果enctype 屬性沒有設置,那麼預設的資料傳輸方式是application/x-www-form-urlencoded。此時,post 的資料會放在 http 請求頭中,而不是請求體中。所以,在取得 post 資料時,我們需要使用 $this->request->post() 或 request()->post()。
在介面呼叫時,我們需要設定對應的請求頭,例如Content-Type:application/json,否則伺服器無法解析數據。如果沒有設定 Content-Type,則伺服器預設為 application/x-www-form-urlencoded,而此時 post 的資料會放在 http 請求頭中,而不是請求體中,導致無法正確取得 post 資料。
三、解決方法
在表單中加入enctype="multipart/form-data",這樣就能夠正確取得post 數據了。
在介面呼叫時,可以使用 curl 設定請求頭。範例程式碼如下:
$data = array( 'username' => 'admin', 'password' => '123456' ); $url = 'http://www.example.com/login'; $ch = curl_init(); $header = array( 'Content-Type: application/json', 'Content-Length: '.strlen(json_encode($data)) ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch);
四、總結
無法取得 post 資料是一個常見的問題,出現這種情況一般都是由於資料傳輸方式或請求頭設定不正確導致的。如果遇到這個問題,可以依照上述方法逐一解決,當然也可以使用其他方法,例如:使用 php://input 或 $_POST 等取得 post 資料的方式。最後,希望本文能解決讀者在開發過程中遇到的類似問題。
以上是thinkphp取得不到post資料怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!