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