ホームページ  >  記事  >  PHPフレームワーク  >  thinkphpが投稿データを取得できない問題の解決方法

thinkphpが投稿データを取得できない問題の解決方法

WBOY
WBOY転載
2023-05-29 21:25:102175ブラウズ

1. 問題

フォームを送信した後、request->param() または $this->request->param() を使用します。投稿データが取得できず、空の配列が取得されます。

#2. 問題の原因

  1. #enctype 属性が次の形式で設定されていません

#フォームの送信時に enctype 属性が設定されていない場合、デフォルトのデータ送信方法は application/x-www-form-urlencoded です。データはリクエスト本文ではなく HTTP リクエスト ヘッダーに配置されるようになります。したがって、投稿データを取得する場合は、$this->request->post() または request()->post() を使用する必要があります。

  1. インターフェイスが呼び出されるとき、リクエスト ヘッダーは設定されません。

インターフェイスが呼び出されるとき、対応するリクエスト ヘッダーを設定する必要があります。 Content-Type: application /json として指定する場合、それ以外の場合、サーバーはデータを解析できません。 Content-Type が設定されていない場合、サーバーはデフォルトで application/x-www-form-urlencoded に設定され、この時点で投稿データはリクエスト本文ではなく http リクエスト ヘッダーに配置されるため、データを正しく投稿してください。

3. 解決策

  1. enctype 属性を設定します

フォームに enctype= を追加しますmultipart/form-data」を指定することで、ポストデータが正しく取得できるようになります。

  1. リクエスト ヘッダーの設定

インターフェイスを呼び出すときに、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);

以上がthinkphpが投稿データを取得できない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。