2009-09-03 14 views
258

Powiel możliwe:
PHP detecting request type (GET, POST, PUT or DELETE)Sprawdź, czy wniosek jest GET lub POST

ta powinna być łatwa.

Mam skrypt, aw skrypcie chcę określić, czy żądanie przychodzi za pomocą metody GET lub POST.

Jaki jest prawidłowy sposób to zrobić?

myślę o użyciu coś jak ten

if (isset($_POST)) { 
    // do post 
} else { 
    // do get 
} 

ale głęboko w moim sercu nie czuję jest to właściwy sposób. Dowolny pomysł?

+0

Dlaczego nie można spróbować $ _REQUEST [ „nazwa_zmiennej”] jeśli zmienne przetwarzania niezależnie od typu żądania? –

+3

@AnoopPete - ponieważ nie o to pytano. $ _REQUEST zaakceptuje GET, POST, PUT, DELETE (cokolwiek). Nie tylko ta okropna praktyka może prowadzić do zagrożeń bezpieczeństwa. Wyobraź sobie, że twoja logika oczekuje po prostu formy POST, ale pozwalasz na akceptację wszystkich/wszystkich metod. To może mieć tragiczne konsekwencje w niewłaściwych rękach. – Marcus

+0

spróbuj użyć tego, aby pomóc ci w uzyskaniu formy lub post, jeśli ($ _REQUEST ["name"] || $ _REQUEST ["age"]) { echo "Welcome". $ _REQUEST ['name']. "
"; echo "Jesteś". $ _REQUEST ['age']. " lat."; exit(); } – sarvesh

Odpowiedz

639

Lepsze wykorzystanie $_SERVER['REQUEST_METHOD']:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // … 
} 
+0

@Gumbo potrzebujemy '===', co się stanie, jeśli użyłem '==' –

+3

Możesz użyć '===' * lub * '=='. Ta pierwsza jest po prostu dobrą praktyką, ponieważ sprawdza, czy zmienne są "identyczne". (EG: '5 == '5'' to' prawda', ale '5 ===' 5'' to' fałsz') – Justin

+2

Rozważ także powrót 405, jeśli nie jest to GET ani POST. if ($ _SERVER [ 'REQUEST_METHOD'] === 'POST') {// nie zakładać } elseif ($ _SERVER [ 'REQUEST_METHOD'] === 'GET') {// dostają } else { kod_odpowiedzi http (405); die(); } –