я наткнулся скрипты, которые используют:
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
будет пустым.
Они делают разные вещи.
Первый проверяет, установлен ли ключ (submit
) в массиве $_POST
.
Второе проверяет, является ли значение ключа в массиве $_SERVER
равным 'POST'
. Думаю, это можно было бы использовать, чтобы определить, были ли данные отправлены с использованием метода «get» или «post», но обычно вам не нужен только тот метод, который использовался, а скорее, какие данные были отправлены.
Что вы пытаетесь сделать?
Первый оператор проверяет, был ли метод запроса Post
и был ли запрос включен значением для элемента submit
. Второй метод проверяет только, был ли метод запроса 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
Не проверяйте кнопки отправки, чтобы обнаружить отправку формы. Это не удается, когда пользователи отправляют форму через ключ ввода (в некоторых браузерах) и некоторые методы представления формы javascript. Его очень раздражает для пользователей, когда подача формы беззвучно терпит неудачу ... – goat
@rambocoder в любом случае, ваш комментарий заставил меня изменить несколько вещей в моем ответе, чтобы решить вашу проблему ... посмотреть PLS –
Они несравнимы , они выполняют разную работу – zerkms
Проверка существования '$ _POST ['submit']', w здесь 'submit' - это имя кнопки' type = submit name = submit', является одной из наиболее распространенных (и хромых) привычек, которая запускается среди php-кодеров. Ваш код полностью терпит неудачу, когда пользователь отправляет форму через ключ ввода в значительном фрагменте общей базы веб-браузера. Не делай этого, это очень любитель. – goat
@chris Thanx для информации, не знал этого. Я довольно новичок в php. – Madz