Beberapa pria bernama salah satu dari kiriman Snipplr saya "omong kosong" karena saya menggunakan if ($_SERVER['REQUEST_METHOD'] == 'POST')
bukannyaif ($_POST)
Memeriksa metode permintaan tampaknya lebih tepat bagi saya karena itulah yang benar-benar ingin saya lakukan. Apakah ada perbedaan operasional antara keduanya atau ini hanya masalah kejelasan kode?
===
alih-alih di==
sini sebagai0 == 'POST'
.$_SERVER['REQUEST_METHOD']
nomornya0
? Sejauh yang saya tahu, itu tidak mungkin.Jawaban:
Ya, mereka tidak melakukan hal yang sama, sungguh.
$_SERVER['REQUEST_METHOD']
berisi metode permintaan (kejutan).$_POST
berisi data pos apa pun.Mungkin saja permintaan POST tidak mengandung data POST.
Saya memeriksa metode permintaan - Saya sebenarnya tidak pernah berpikir untuk menguji
$_POST
array. Saya memeriksa kolom posting yang diperlukan. Jadi permintaan posting yang kosong akan memberikan pengguna banyak pesan kesalahan - yang masuk akal bagi saya.sumber
if ($_SERVER['REQUEST_METHOD'] == 'POST')
cara yang benar, Anda dapat mengirim permintaan posting tanpa data posting.sumber
Saya biasa memeriksa
$_POST
sampai saya mendapat masalah dengan data POST yang lebih besar dan file yang diunggah. Ada arahan konfigurasipost_max_size
danupload_max_filesize
- jika ada yang terlampaui,$_POST
array tidak terisi.Jadi "cara aman" adalah memeriksa
$_SERVER['REQUEST_METHOD']
. Anda masih harus menggunakanisset()
pada setiap$_POST
variabel, dan itu tidak masalah, apakah Anda memeriksa atau tidak memeriksa$_SERVER['REQUEST_METHOD']
.sumber
Jika aplikasi Anda perlu bereaksi atas permintaan jenis tulisan, gunakan ini:
Jika aplikasi Anda perlu bereaksi terhadap data apa pun yang diterima melalui permintaan pos, gunakan ini:
Ini implementasi spesifik, tetapi Anda akan menggunakan keduanya, + $ _FILES superglobal.
sumber
Keduanya benar. Secara pribadi saya lebih suka pendekatan Anda lebih baik karena verbositasnya tetapi itu benar-benar ke preferensi pribadi.
Secara otomatis, menjalankan if ($ _ POST) tidak akan menimbulkan kesalahan - array $ _POST ada terlepas jika permintaan dikirim dengan header POST. Array kosong dilemparkan ke false dalam pemeriksaan boolean.
sumber
Anda dapat mengirimkan formulir dengan menekan tombol enter (yaitu tanpa mengklik tombol kirim) di sebagian besar browser tetapi ini tidak selalu mengirim kirim sebagai variabel - jadi dimungkinkan untuk mengirimkan formulir kosong yaitu
$_POST
akan kosong tetapi formulir akan tetap telah menghasilkan permintaan posting http ke halaman php. Dalam halif ($_SERVER['REQUEST_METHOD'] == 'POST')
ini lebih baik.sumber
$_POST
tidak akan kosong: itu akan menjadi array dengan nilai kosong.sumber
Selama saya mungkin perlu mengakses skrip PHP saya dengan lebih dari satu metode, yang saya lakukan sebenarnya adalah:
sumber
Ia memeriksa apakah halaman telah dipanggil melalui POST (bukan GET, HEAD, dll). Saat Anda mengetik URL di bilah menu, halaman tersebut dipanggil melalui GET. Namun, ketika Anda mengirimkan formulir dengan metode = "posting" halaman tindakan disebut dengan POST.
sumber
Ini benar-benar 6 dari satu, setengah lusin dari situasi lainnya.
Satu-satunya argumen yang mungkin menentang pendekatan Anda adalah $ _SERVER ['REQUEST_METHOD'] == 'POST' mungkin tidak diisi pada server-server / konfigurasi tertentu, sedangkan array $ _POST akan selalu ada di PHP4 / PHP5 (dan jika tidak t ada, Anda memiliki masalah yang lebih besar (- :)
sumber
Keduanya bekerja dengan cara yang sama, tetapi
$_POST
harus digunakan karena lebih bersih. Anda dapat menambahkannyaisset()
untuk memeriksa keberadaannya.sumber
$_POST
akan selalu ada, meskipun mungkin kosong (yang dilemparkan ke booleanfalse
). Dan apa yang Anda maksud dengan "pembersih"?