Я столкнулся с сценариями, которые используют:
isset($_POST['submit'])
а также код, который использует:
$_SERVER['REQUEST_METHOD']=='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 в этом случае), этот код скажет вам две вещи:
POST , а не GET , PUT и т. Д. 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
Просто используя это выражение, вы можете утверждать, что:
POST Они делают разные вещи.
Первая проверяет, установлен ли ключ ( submit ) в массиве $_POST .
Второй проверяет, является ли значение ключа в массиве $_SERVER 'POST' . Думаю, это можно было бы использовать, чтобы определить, были ли данные отправлены с использованием метода «get» или «post», но обычно вам не нужен только тот метод, который использовался, а скорее, какие данные были отправлены.
Что ты пытаешься сделать?
Первый оператор проверяет, был ли метод запроса Post и был ли запрос включен значением для элемента submit . Второй метод проверяет, был ли метод запроса Post .
Чтобы проверить, была ли форма размещена, вторая лучше в смысле, она немного яснее, что делает только одно и только одно. Однако я не стал бы слишком беспокоиться о том, какой из них использовать.