>  기사  >  PHP 프레임워크  >  thinkphp에서 포스트 데이터를 얻을 수 없는 문제를 해결하는 방법

thinkphp에서 포스트 데이터를 얻을 수 없는 문제를 해결하는 방법

WBOY
WBOY앞으로
2023-05-29 21:25:102182검색

1. 문제

폼을 제출한 후 request->param() 또는 $this->request->param()을 통해 게시물 데이터를 얻을 수 없으며 빈 배열을 얻습니다.

2. 문제 원인

  1. 양식에 enctype 속성이 설정되지 않았습니다

양식 제출 시 enctype 속성이 설정되지 않은 경우 기본 데이터 전송 방법은 application/x입니다. -www-form-urlencoded. 이제 데이터는 요청 본문 대신 HTTP 요청 헤더에 배치됩니다. 따라서 post 데이터를 가져올 때는 $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. 요청 헤더 설정

인터페이스를 호출할 때 컬을 사용하여 요청 헤더를 설정할 수 있습니다. 샘플 코드는 다음과 같습니다.

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제