Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk menyelesaikan masalah yang thinkphp tidak boleh mendapatkan data pos

Bagaimana untuk menyelesaikan masalah yang thinkphp tidak boleh mendapatkan data pos

PHPz
PHPzasal
2023-04-08 09:30:021010semak imbas

Apabila saya menggunakan ThinkPHP untuk membangunkan projek baru-baru ini, saya menghadapi masalah: selepas menyerahkan borang, data siaran tidak dapat diperoleh. Ini adalah masalah biasa semasa proses pembangunan kadang-kadang kita akan berasa sangat keliru, terutamanya apabila kita telah menemui banyak kaedah di Internet dan masih tidak dapat menyelesaikan masalah tersebut. Artikel ini akan memperkenalkan secara ringkas cara menyelesaikan masalah ini.

1. Masalah

Selepas menyerahkan borang, data pos tidak boleh diperolehi melalui permintaan->param() atau $this->request->param(). yang diperolehi ialah Empty array.

2. Punca masalah

  1. Atribut enctype tidak ditetapkan dalam borang

Apabila borang diserahkan, jika atribut enctype ialah tidak ditetapkan, maka penghantaran data lalai Kaedahnya adalah aplikasi/x-www-form-urlencoded. Pada masa ini, data siaran akan diletakkan dalam pengepala permintaan http dan bukannya badan permintaan. Oleh itu, apabila mendapatkan data siaran, kita perlu menggunakan $this->request->post() atau request()->post().

  1. Tiada pengepala permintaan ditetapkan semasa memanggil antara muka

Apabila memanggil antara muka, kita perlu menetapkan pengepala permintaan yang sepadan, seperti Content-Type: application/json , jika tidak pelayan tidak boleh Menghuraikan data. Jika Jenis Kandungan tidak ditetapkan, pelayan lalai kepada application/x-www-form-urlencoded, dan pada masa ini data pos akan diletakkan dalam pengepala permintaan http dan bukannya badan permintaan, mengakibatkan ketidakupayaan untuk mendapatkan data pos dengan betul.

3. Penyelesaian

  1. Tetapkan atribut enctype

Tambah enctype="multipart/form-data" pada borang supaya ia boleh diperolehi menyiarkan data dengan betul.

  1. Tetapkan pengepala permintaan

Apabila memanggil antara muka, anda boleh menggunakan curl untuk menetapkan pengepala permintaan. Kod sampel adalah seperti berikut:

$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);

4. Ringkasan

Kegagalan mendapatkan data pos adalah masalah biasa Keadaan ini biasanya disebabkan oleh kaedah penghantaran data yang salah atau tetapan pengepala permintaan. daripada. Jika anda menghadapi masalah ini, anda boleh menyelesaikannya satu persatu mengikut kaedah di atas Sudah tentu anda juga boleh menggunakan kaedah lain, seperti menggunakan php://input atau $_POST untuk mendapatkan data pos. Akhir sekali, saya berharap artikel ini dapat menyelesaikan masalah yang sama yang dihadapi oleh pembaca semasa proses pembangunan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah yang thinkphp tidak boleh mendapatkan data pos. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn