Jakiś facet nazwał jedną z moich propozycji Snipplra „bzdurą”, ponieważ if ($_SERVER['REQUEST_METHOD'] == 'POST')
zamiast tego użyłemif ($_POST)
Sprawdzanie metody żądania wydaje mi się bardziej poprawne, ponieważ tak naprawdę chcę zrobić. Czy jest jakaś różnica operacyjna między nimi, czy jest to tylko kwestia przejrzystości kodu?
===
zamiast==
tutaj jako0 == 'POST'
.$_SERVER['REQUEST_METHOD']
być numer0
? O ile wiem, to niemożliwe.Odpowiedzi:
Cóż, tak naprawdę nie robią tego samego.
$_SERVER['REQUEST_METHOD']
zawiera metodę żądania (niespodzianka).$_POST
zawiera dane postów.Żądanie POST może nie zawierać danych POST.
Sprawdzam metodę żądania - właściwie nigdy nie myślałem o przetestowaniu
$_POST
tablicy. Sprawdzam jednak wymagane pola postów. Więc puste żądanie wpisu dałoby użytkownikowi wiele komunikatów o błędach - co dla mnie ma sens.źródło
if ($_SERVER['REQUEST_METHOD'] == 'POST')
jest prawidłowy sposób, możesz wysłać prośbę o wpis bez żadnych danych.źródło
Sprawdzałem,
$_POST
dopóki nie miałem problemów z większymi danymi POST i przesłanymi plikami. Istnieją dyrektywy konfiguracyjnepost_max_size
iupload_max_filesize
- jeśli którakolwiek z nich zostanie przekroczona,$_POST
tablica nie jest zapełniana.Zatem „bezpiecznym sposobem” jest sprawdzenie
$_SERVER['REQUEST_METHOD']
. Nadal jednak musisz używaćisset()
na każdej$_POST
zmiennej i nie ma znaczenia, czy sprawdzasz, czy nie$_SERVER['REQUEST_METHOD']
.źródło
Jeśli Twoja aplikacja wymaga odpowiedzi na żądanie typu post, użyj tego:
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method // validate request, // manage post request differently, // log or don't log request, // redirect to avoid resubmition on F5 etc }
Jeśli Twoja aplikacja wymaga reakcji na jakiekolwiek dane otrzymane pocztą, użyj tego:
if(!empty($_POST)) { // if received any post data // process $_POST values, // save data to DB, // ... } if(!empty($_FILES)) { // if received any "post" files // validate uploaded FILES // move to uploaded dir // ... }
Jest to specyficzne dla implementacji, ale zamierzasz użyć obu + $ _FILES superglobal.
źródło
Obie mają rację. Osobiście wolę twoje podejście lepiej ze względu na jego szczegółowość, ale tak naprawdę zależy to od osobistych preferencji.
Odręcznie, uruchomienie if ($ _ POST) nie spowodowałoby błędu - tablica $ _POST istnieje niezależnie od tego, czy żądanie zostało wysłane z nagłówkami POST. Pusta tablica jest rzutowana na fałsz w kontroli logicznej.
źródło
Możesz przesłać formularz, naciskając klawisz Enter (tj. Bez klikania przycisku przesyłania) w większości przeglądarek, ale niekoniecznie wysyła to jako zmienną - więc jest możliwe wysłanie pustego formularza, tj.
$_POST
Będzie pusty, ale formularz nadal będzie wygenerował żądanie posta http na stronę php. W tym przypadkuif ($_SERVER['REQUEST_METHOD'] == 'POST')
jest lepiej.źródło
$_POST
nie byłoby puste: byłaby to tablica z pustymi wartościami.$this->method = $_SERVER['REQUEST_METHOD']; if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) { if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') { $this->method = 'DELETE'; } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') { $this->method = 'PUT'; } else { throw new Exception("Unexpected Header"); } }
źródło
Tak długo, jak mogę potrzebować dostępu do moich skryptów PHP za pomocą więcej niż jednej metody, tak naprawdę robię to:
if (in_array($_SERVER['REQUEST_METHOD'],array("GET","POST","DELETE"))) { // do wathever I do }
źródło
Sprawdza, czy strona została wywołana przez POST (w przeciwieństwie do GET, HEAD itp.). Po wpisaniu adresu URL w pasku menu strona jest wywoływana przez GET. Jednak gdy wysyłasz formularz z method = "post", strona akcji jest wywoływana z POST.
źródło
To naprawdę 6 z jednego, pół tuzina innej sytuacji.
Jedynym możliwym argumentem przeciwko twojemu podejściu jest $ _SERVER ['REQUEST_METHOD'] == 'POST' może nie być wypełnione na niektórych serwerach internetowych / w niektórych konfiguracjach, podczas gdy tablica $ _POST zawsze będzie istnieć w PHP4 / PHP5 (a jeśli tak nie jest ' nie istnieje, masz większe problemy (- :)
źródło
Oba działają w ten sam sposób, ale
$_POST
powinny być używane, ponieważ są czystsze. Możeszisset()
do niego dodać , aby sprawdzić, czy istnieje.źródło
$_POST
będzie istnieć zawsze, chociaż może być pusty (co jest rzutowane na wartość logicznąfalse
). A co masz na myśli mówiąc „czystsze”?