isset ($ _ POST ) vs $ _SERVER == 'POST'

Я столкнулся с сценариями, которые используют:

isset($_POST['submit']) 

а также код, который использует:

 $_SERVER['REQUEST_METHOD']=='POST' 

Мне было интересно узнать разницу между этими двумя и какой метод лучше всего.

Solutions Collecting From Web of "isset ($ _ POST ) vs $ _SERVER == 'POST'"

Это означают две разные вещи. Во-первых, проверяет, была ли передана форма submit переданного параметра. Многие используют этот фрагмент, чтобы проверить, была ли отправлена ​​форма. Это работает, потому что кнопка отправки технически является <input> поэтому ее значение отправляется вместе с любыми другими элементами, которые были частью формы.

 <?php if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other // Logic } ?> <form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'> <!--- other form stuff --> <input type="submit" name="submit" value="Send!" /> </form> 

Второй фрагмент проверяет, была ли форма отправлена ​​методом POST. Это не обязательно означает, что кнопка формы была нажата. Если он не был отправлен с POST, тогда суперглобал $_POST был бы пустым.

 isset($_POST['submit']) 

Если вы уже знаете, что конкретное значение всегда будет отправлено и, следовательно, будет указывать на ожидаемую отправку формы (поле submit в этом случае), этот код скажет вам две вещи:

  1. Форма отправляется через метод POST , а не GET , PUT и т. Д.
  2. Поле submit отправлено.

 $_SERVER['REQUEST_METHOD'] == 'POST' 

Это говорит вам ровно одну вещь, форма была отправлена ​​через метод POST . Причины его использования включают:

  • Вы хотите различать недопустимое представление формы (например, не все поля были переданы) и другие виды поиска страниц ( GET , PUT и т. Д.),
  • Вы точно не знаете, что собираетесь получить. Возможно, этот код запускается в контроллере, который не знает всех деталей своих зависимых частей.

Первый

 if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!isset($_POST['name'])) { // at this point you know that `name` was not passed as part of the request // this could be treated as an error } } 

Против:

 if (!isset($_POST['name'])) { // the `name` field was not passed as part of the request // but it might also be a GET request, in which case a page should be shown } 

Важный

Проверка поля кнопки отправки в запросе ненадежна, так как форма может быть отправлена ​​другими способами (например, нажатие Enter в текстовом поле).


 $_POST 

Просто используя это выражение, вы можете утверждать, что:

  1. Форма отправляется через POST
  2. Было представлено хотя бы одно поле

Они делают разные вещи.

Первая проверяет, установлен ли ключ ( submit ) в массиве $_POST .

Второй проверяет, является ли значение ключа в массиве $_SERVER 'POST' . Думаю, это можно было бы использовать, чтобы определить, были ли данные отправлены с использованием метода «get» или «post», но обычно вам не нужен только тот метод, который использовался, а скорее, какие данные были отправлены.

Что ты пытаешься сделать?

Первый оператор проверяет, был ли метод запроса Post и был ли запрос включен значением для элемента submit . Второй метод проверяет, был ли метод запроса Post .

Чтобы проверить, была ли форма размещена, вторая лучше в смысле, она немного яснее, что делает только одно и только одно. Однако я не стал бы слишком беспокоиться о том, какой из них использовать.