Saya memiliki CMS khusus yang saya buat yang berfungsi dengan sempurna di kotak dev saya (Ubuntu / PHP5 + / MySQL5 +).
Saya baru saja memindahkannya ke kotak produksi untuk klien saya dan sekarang semua pengiriman formulir muncul sebagai array $ _POST kosong.
Saya menemukan trik untuk memverifikasi bahwa data benar-benar sedang diteruskan menggunakan file_get_contents('php://input');
dan data muncul dengan baik di sana - $_POST
/ $_REQUEST
array selalu kosong.
Saya juga telah memverifikasi bahwa header jenis konten juga benar melalui firebug ( application/x-www-form-urlencoded; charset=utf-8
).
Masalah ini terjadi terlepas dari apakah formulir dikirimkan melalui AJAX atau pengiriman formulir biasa.
Bantuan apa pun sangat dihargai!
Jawaban:
Saya tahu pertanyaan ini tentang POST melalui Formulir, tetapi datang ke sini mencari jawaban untuk masalah serupa saat POSTING dengan tipe konten JSON. Menemukan jawabannya dan ingin membagikannya karena saya menghabiskan banyak waktu.
Saat menggunakan tipe konten JSON, array $ _POST tidak akan terisi (hanya dengan formulir multi-bagian yang saya percaya)
Inilah yang berhasil untuk memperbaiki masalah:
semoga ini membantu seseorang!
sumber
Content-Type
header menjadiapplication/x-www-form-urlencoded
dan kemudian membuat serial data Anda dengan$.param(dataObject)
. Itu akan membantu.title=something&body=anything
. Saya ingin mendapatkan vale of title & body. $ dataobject ["title"] kembali kosong. Dalam kasus saya $ _POST kosong. Dan satu-satunya cara untuk mendapatkannya menggunakan file_get_contents ("php: // input") ... kecuali bahwa itu tidak dikodekan json.Berikut kemungkinan penyebab lainnya - formulir saya dikirimkan ke domain.com tanpa WWW. dan saya telah menyiapkan pengalihan otomatis untuk menambahkan "WWW". Array $ _POST dikosongkan dalam proses. Jadi untuk memperbaikinya yang harus saya lakukan adalah mengirimkan ke www.domain.com
sumber
htaccess
adalah penyebab POST tidak berfungsi. Saya secara otomatis menambahkan garis miring ke semua url, tetapi dalam kode sebagai TINDAKAN saya menggunakan url tanpa garis miring. Jawaban Anda membantu, karena saya tidak pernah berpikir untuk memeriksa .htaccess. +1.htaccess
file saya . Itu menghapus.php
ekstensi dari URL, dan formulir sayaPOST
menuju ke URL dengan ekstensi.Saya memiliki masalah serupa. Ternyata perbaikan sederhana. Dalam bentuk yang saya miliki
dimana direktori adalah nama dari ... direktori tersebut. Array POST saya benar-benar kosong. Saat saya melihat url di browser saya, itu ditampilkan dengan garis miring di bagian akhir.
Menambahkan garis miring ke akhir tindakan saya berhasil -
Array $ _POST saya penuh lagi!
sumber
<form>
tag tidak memilikiname
atribut, dan hanya di IE.Pastikan, di php.ini:
track_vars
(ini hanya tersedia pada versi PHP yang sangat lama) disetel keOn
variables_order
berisi surat ituP
post_max_size
diatur ke nilai yang wajar (mis. 8 MB)suhosin.post.max_vars
dansuhosin.request.max_vars
berukuran cukup besar.Saya kira saran kedua saya akan menyelesaikan masalah Anda.
sumber
Saya telah menemukan bahwa ketika memposting dari HTTP ke HTTPS,
$_POST
isinya kosong. Ini terjadi saat menguji formulir, tapi butuh beberapa saat sampai saya menyadarinya.sumber
Saya menemukan masalah yang serupa namun sedikit berbeda dan butuh waktu 2 hari untuk memahami masalahnya.
Dalam kasus saya, array POST juga kosong.
Kemudian diperiksa dengan file_get_contents ('php: // input'); dan itu juga kosong.
Kemudian saya menemukan bahwa browser tidak meminta konfirmasi untuk mengirim ulang data formulir setelah jika saya menyegarkan halaman yang dimuat setelah pengiriman POST. Itu langsung menyegarkan halaman. Tetapi ketika saya mengubah URL formulir ke yang berbeda, itu melewati POST dengan benar dan meminta pengiriman ulang data ketika mencoba menyegarkan halaman.
Kemudian saya memeriksa apa yang salah dengan URL sebenarnya. Tidak ada kesalahan dengan URL, namun itu menunjuk ke folder tanpa index.php di URL dan saya memeriksa POST di index.php.
Di sini saya meragukan pengalihan dari / ke /index.php menyebabkan data POST hilang dan URL yang diuji dengan menambahkan index.php ke URL.
Itu Berhasil.
Diposting di sini agar seseorang merasa terbantu.
sumber
Tidak memiliki solusi yang elegan saat ini tetapi ingin membagikan temuan saya untuk referensi di masa mendatang bagi orang lain yang mengalami masalah ini. Sumber masalahnya adalah 2 nilai php yang diganti dalam file .htaccess. Saya baru saja menambahkan 2 nilai ini untuk meningkatkan batas ukuran file untuk unggahan file dari default 8MB menjadi sesuatu yang lebih besar - Saya mengamati bahwa hanya memiliki 2 nilai ini di file htaccess sama sekali, apakah lebih besar atau lebih kecil dari default, menyebabkan masalah .
Saya menambahkan variabel tambahan untuk meningkatkan batas untuk semua vars suhosin.post.xxx/suhosin.upload.xxx tetapi sayangnya ini tidak berpengaruh pada masalah ini.
Singkatnya, saya tidak bisa menjelaskan "mengapa" di sini, tetapi telah mengidentifikasi akar penyebabnya. Perasaan saya adalah bahwa ini pada akhirnya adalah masalah suhosin / htaccess, tetapi sayangnya salah satu yang tidak dapat saya selesaikan selain menghapus 2 nilai yang diganti php di atas.
Semoga ini membantu seseorang di masa depan karena saya menghabiskan beberapa jam untuk mencari tahu. Terima kasih untuk semua yang meluangkan waktu untuk membantu saya dengan ini (MrMage, Andrew)
sumber
Saya bisa memecahkan masalah menggunakan enctype = "application / x-www-form-urlencoded" karena defaultnya adalah "text / plain". Ketika Anda check in $ DATA, pemisahnya adalah spasi untuk "teks / biasa" dan karakter khusus untuk "urlencoded".
Salam Frank
sumber
Menonaktifkan
enable_post_data_reading
pengaturan akan menyebabkan ini. Menurut dokumentasi:sumber
Jika Anda memposting ke file index.php dalam direktori misalnya /api/index.php pastikan dalam formulir Anda, Anda menentukan direktori lengkap ke file misalnya
Ini
ATAU
bekerja.
Tapi ini gagal
sumber
/my_uri
akan berhasil tetapi tidak/my_uri/
.Oke, ini bodoh dan saya akan mempermalukan diri sendiri di depan umum, tetapi saya membuat skrip pengujian kecil untuk sesuatu di PHP dan ketika
$_POST
array saya kosong, StackOverflow adalah tempat pertama yang saya lihat dan saya tidak menemukan jawaban yang saya butuhkan .Saya hanya menulis
dan lupa untuk menentukan metodenya
POST
!Saya yakin seseorang akan terkekeh, tetapi jika ini membantu orang lain yang melakukan hal yang sama, maka saya tidak keberatan! Kita semua melakukannya dari waktu ke waktu!
sumber
Dalam kasus saya, saat memposting dari HTTP ke HTTPS, $ _POST kosong. Masalahnya, formulir tersebut memiliki tindakan seperti ini //example.com. Saat saya memperbaiki url ke https://example.com , masalahnya hilang.
sumber
masalah yang sama di sini!
saya mencoba menyambung ke kode server lokal saya melalui permintaan pos di tukang pos, dan masalah ini membuang banyak waktu saya!
untuk siapa saja yang menggunakan proyek lokal (mis. tukang pos): gunakan alamat IPv4 Anda (ketik ipconfig di cmd) daripada kata kunci "localhost". dalam kasus saya:
sebelum:
setelah:
sumber
REFERENSI: http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Metode POST
Kami akan membuat beberapa modifikasi sehingga metode POST akan digunakan saat mengirim permintaan ...
Beberapa header http harus disetel bersama dengan permintaan POST apa pun. Jadi kami mengaturnya di baris ini ...
Dengan baris di atas kita pada dasarnya mengatakan bahwa pengiriman data dalam format pengiriman formulir. Kami juga memberikan panjang parameter yang kami kirim.
Kami menetapkan penangan untuk peristiwa perubahan 'status siap'. Ini adalah penangan yang sama yang kami gunakan untuk metode GET. Anda dapat menggunakan http.responseText di sini - masukkan ke dalam div menggunakan innerHTML (AHAH), eval it (JSON), atau apa pun.
Akhirnya, kami mengirim parameter dengan permintaan tersebut. Url yang diberikan dimuat hanya setelah baris ini dipanggil. Dalam metode GET, parameter akan menjadi nilai null. Namun pada metode POST, data yang akan dikirim akan dikirim sebagai argumen fungsi kirim. Variabel params dideklarasikan di baris kedua sebagai
lorem=ipsum&name=binny
- jadi kami mengirim dua parameter - 'lorem' dan 'name' dengan nilai 'ipsum' dan 'binny' masing-masing.sumber
Dalam kasus saya itu karena saya menggunakan jQuery untuk menonaktifkan semua input pada halaman sebelum menggunakan jQuery untuk mengirimkan formulir. Jadi saya mengubah "nonaktifkan setiap masukan bahkan jenis 'tersembunyi'":
untuk "menonaktifkan hanya input jenis 'tombol'":
Ini agar pengguna tidak bisa secara tidak sengaja menekan tombol 'pergi' dua kali dan menyemprot DB kami! Tampaknya jika Anda meletakkan atribut 'disabled' pada formulir jenis 'tersembunyi', nilainya tidak akan dikirim jika formulir dikirimkan!
sumber
Bagi saya, .htaccess mengalihkan ketika mod_rewrite tidak diinstal. Instal mod_rewite dan semuanya baik-baik saja.
Secara khusus:
sedang mengeksekusi.
sumber
Saya hanya menghabiskan waktu berjam-jam untuk memperbaiki masalah serupa. Masalah dalam kasus saya, adalah file
secara default, di php.ini. Saya memiliki formulir yang sangat besar tanpa unggahan. php.ini diatur ke upload_max_filesize = "100M" dan post_max_size = "108M" dan itu pasti bukan masalah dalam kasus saya. Perilaku PHP sama untuk max_input_vars jika melebihi 1000 variabel dalam formulir. Ia mengembalikan dan mengosongkan array _POST. Saya berharap saya dapat menemukannya satu jam, dan jam yang lalu.
sumber
Saya tahu ini sudah tua, tetapi ingin membagikan solusi saya.
Dalam kasus saya, masalahnya ada di .htaccess saya karena saya menambahkan variabel untuk meningkatkan batas unggah maks PHP saya. Kode saya seperti ini:
Kemudian saya perhatikan bahwa nilainya harus seperti xxM bukan xxMB dan ketika saya mengubahnya menjadi:
sekarang $ _POST saya mengembalikan data seperti biasa sebelumnya. Semoga ini bisa membantu seseorang di masa depan.
sumber
Selain posting MRMage:
Saya harus mengatur variabel ini untuk menyelesaikan masalah yang beberapa
$_POST
variabel (dengan array besar> 1000 item) menghilang:"
request
", bukan "post
" adalah solusinya ...sumber
Mungkin bukan solusi yang paling nyaman, tetapi saya menemukan bahwa jika saya menyetel
action
atribut formulir ke domain root, index.php dapat diakses dan mendapatkan variabel yang diposting. Namun jika saya menyetel URL yang ditulis ulang sebagai tindakan, itu tidak akan berhasil.sumber
Ini mirip dengan apa yang dikatakan @icesar .
Tapi saya mencoba untuk mengirim barang ke api saya, terletak di
site/api/index.php
, hanya postingsite/api
karena diteruskanindex.php
dengan sendirinya. Namun, ini tampaknya menyebabkan sesuatu menjadi kacau, karena saya$_POST
dikosongkan dengan cepat. Cukup memposting kesite/api/index.php
secara langsung alih-alih menyelesaikannya.sumber
Masalah saya adalah saya menggunakan
<base>
tag HTML untuk mengubah URL dasar situs pengujian saya. Setelah saya menghapus tag itu dari tajuk,$_POST
datanya kembali.sumber
Dalam kasus saya (halaman php di server OVH mutualisé)
enctype="text/plain"
tidak berfungsi ($_POST
dan yang sesuai$_REQUEST
kosong), contoh lain di bawah berfungsi. ``
Lebih lanjut di sini: method = "post" enctype = "text / plain" tidak kompatibel?
sumber
Saya mendapatkan kesalahan berikut dari Mod Security:
Setelah saya menghapus konfigurasi keamanan mod saya untuk menguji, semuanya berfungsi seperti yang diharapkan. Sekarang saya hanya perlu mengubah aturan saya agar tetap aman tetapi cukup fleksibel untuk kebutuhan saya :)
sumber
Pastikan Anda menggunakan name = " your_variable_name " di tag masukan.
Saya salah menggunakan id = " your_variable_name ".
Saya menghabiskan banyak waktu untuk menangkap serangga.
sumber
Pastikan bahwa
name
properti setiap bidang ditentukan.Ini membuat Anda menjadi POST kosong di PHP
Tapi, ini akan berhasil
sumber
Oke, saya pikir saya harus meletakkan kasus saya di sini .... Saya mendapatkan array posting kosong dalam kasus tertentu .. Formulir berfungsi dengan baik, tetapi beberapa kali pengguna mengeluh bahwa mereka menekan tombol kirim, dan tidak ada yang terjadi .... Setelah menggali beberapa saat, saya menemukan bahwa perusahaan hosting saya memiliki modul keamanan yang memeriksa input pengguna dan membersihkan seluruh larik posting (tidak hanya data berbahaya) jika ditemukan demikian. Dalam contoh saya, seorang guru matematika mencoba memasukkan persamaan: dy + dx + 0 = 0; dan data dihapus sepenuhnya.
Untuk memperbaikinya, saya hanya menyarankan dia sekarang untuk memasukkan data di area teks sebagai dy + dx + 0 = nol, dan sekarang berhasil .... Ini dapat menghemat waktu seseorang ..
sumber