Да, есть разница, технически и концептуально.То, как эта разница влияет на вас, зависит от сервера приложений, который обрабатывает запрос (ну и от ваших предпочтений, конечно).
Техническое различие:
В большинствена серверах приложений источник параметра (URL или FORM) определяет, где они находятся.В PHP параметры url помещаются в $_GET
и поля формы в суперглобальных $_POST
соответственно.Если вас не волнует техническая разница, для вашего удобства есть $_REQUEST
суперглобальный.
Концептуальная разница:
Наиболее логично провести различие между двумя типами параметров запроса:
- Такие, которые требуются длярендеринг страницы, то есть они ничего не изменяют в базе данных, если вы отправите запрос снова.
- Такие, которые изменяют базу данных, то есть являются деструктивными (именно поэтому браузеры спрашивают, согласны ли вы с публикациейстраница снова , если вы нажмете обновить).
Первые называются идемпотент и должны быть переданы через GET.Хорошим примером будет строка поиска или идентификатор записи.Независимо от того, как часто вы обновляете данные, база данных остается неизменной.
Другой тип параметра - это данные, которые должны храниться в БД.Это было бы разрушительным в том смысле, что фактически изменяет содержимое базы данных.Эти параметры должны быть переданы через POST.
Кстати, это также хороший способ решить, должна ли ваша форма быть method="GET"
или method="POST"
: всякий раз, когда ввод формы идемпотентен в базе данных, используйтеПолучить форму.Например, форма пользовательский поиск должна быть GET, форма пользовательских предпочтений должна быть POST.
Теперь вы можете утверждать, что в вашем случае идентификатор записиявляется идемпотентом, но другой информации в вашей форме нет.В этом случае я считаю наиболее идиоматичным использование
<form action="mysite.com/index.php?id=1234" method="POST">
<!-- ...more inputs here -->
</form>
, поскольку GET mysite.com/index.php?id=1234
будет запрашивать именно эту запись.
Однако делать это не нужно - конечно, вы можете опубликовать идентификатор как скрытый ввод.
Однако следует помнить о двух вещах:
- В этом случае в журналах HTTP-сервера не будет доказательств того, какая запись была опубликована пользователем (если вы заботитесь об этом).
- Этот вид разделения работает только для форм POST.GET формы игнорируют параметры в атрибуте
action
, вы должны указать все их как скрытые поля ввода.