Я столкнулся с сценариями, которые используют:
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
.
Чтобы проверить, была ли форма размещена, вторая лучше в смысле, она немного яснее, что делает только одно и только одно. Однако я не стал бы слишком беспокоиться о том, какой из них использовать.