2010-06-09 4 views
4

У меня есть сайт для объявлений.Зачем использовать метод POST здесь?

На главной странице (индексе) У меня есть несколько полей формы, которые пользователь может заполнить или не заполнить, чтобы указать подробный поиск объявлений.

Ex: Действие

Category: Cars 
    Price from: 3000 
    Price to: 10000 
    Color: Red 
    Area: California 

Формы устанавливается на страницу PHP:

<form action='query_sql.php' method='post'> 

В query_sql.php Принести переменные, как это:

category=$_POST['category']; 
    etc etc... 

Тогда запрос MySql:

$query="SELECT........WHERE category='$category' etc etc.... 
    $results = mysql_query($query); 

Затем я просто показываю результаты запроса пользователю, создавая таблицу, которая динамически заполняется в зависимости от набора результатов.

Однако, согласно ответу полковника шрапнелью в моем предыдущем квартале не должны использовать POST здесь: How to hide URL from users when submitting this form?

причина, почему я использовать пост просто, чтобы скрыть «один-страниц текстового документа» долго URL в адресной строке браузера.

Я очень смущен, это нормально использовать POST или нет?

Это работает отлично и когда я использую GET или POST сейчас ... А это уже на сервере ...

Btw, в связанном вопросе, я не имею в виду, чтобы сделать URL невидимым (или скрыть его) Я просто хотел, чтобы он тоже выглядел лучше (что я сделал с mod_rewrite).

UPDATE:

Если я использую GET, то как я должен сделать URL лучше выглядит (красиво)? Проверить это предыдущая Q из:

How to make this very long url appear short?

+0

Вы должны использовать параметризованные запросы или, по крайней мере, строку, которая выводит входные данные. Было бы тривиально обрабатывать запрос, который бы скомпрометировал вашу базу данных с кодом, который вы показали. – tvanfosson

+0

Другой способ иметь короткий URL (но не SEO) - это сделать POST, сохранить фильтры поиска в таблице DB, получить идентификатор вставленной записи, а затем перенаправить на страницу, например search.php? Searchid = 123456, которая выполняет Поиск. Таким образом, вы можете иметь короткий URL-адрес, имея много параметров. Остерегайтесь структуры таблицы, если вы измените, какие поля будут искать. – Keeper

+0

** Что не так в длинном URL-адресе **? –

ответ

12
  • Поисковые системы не индексируют результаты
  • Люди не могут закладки поиск
  • Люди не могут отправить ссылку на их поиски, чтобы их friends
  • Люди не могут ссылаться на страницы результатов со своих веб-страниц
  • Некоторые люди не могут вернуться на страницу, не получая страшно «Хочешь повторно отправить форму? "

Если я использую GET, то как я должен сделать URL лучше выглядит (красиво)?

Вы не должны. Это не имеет значения. Количество пользователей, которые заметили бы URL-адрес представленной формы, является крошечным, а число тех, кого это касается, еще меньше.

+0

проверить мои обновления PLS –

+0

@Camran Re вашего обновления, я бы сказал, что это другой вопрос. –

+0

Но вы говорите, что поисковые системы игнорируют URL-адреса POST, они также игнорируют URL-адреса, которые являются длинными и уродливыми, например q = 938 & b = alskda & c = 835983jdla & d = 9284 и т. Д. Поэтому я думаю, что в моем случае это не имеет значения, тогда единственное, t проверена еще кнопка обновления или кнопка «Назад», потому что мне было бы очень неприятно, если бы «Вы хотите повторно отправить форму» подошли ... –

1

Идея использования GET over POST заключается в том, что с использованием GET у вас есть URL-адрес поиска, который вы можете изменить в адресной строке, закладке и передать.

Технически оба метода являются точными и в основном взаимозаменяемыми , если вам не нужно решать эти аспекты и передавать данные с одной страницы на другую.

Одно большое различие между GET и POST заключается в том, что параметры GET не должны превышать 1-2 килобайта. Предел размера для запроса POST обычно находится в десятках мегабайт.

+0

Существует одна большая разница: запросы GET должны быть идемпотентными (по стандарту). Не то, чтобы это всегда уважалось ... (например, «щелкните по ссылке, чтобы проверить ваш адрес электронной почты») – Artefacto

+0

@Arte интересно, не знал этого! И да, его часто не уважают ... –

+0

-1 за предложение заменить их - RTFM Pekka! – symcbean

0

Прежде всего помните, что нужно дезинфицировать ваши данные, используя mysql_real_escape_string. GET против POST практически то же самое, за исключением того:

  • С POST вы не можете пометить страницу
  • С ГЭТ Вы не можете добавлять файлы и есть ограничение по длине на строке запроса

Я использую POST только тогда, когда знаю, что страница будет модифицировать серверную часть (то есть обновление БД), а затем сделать перенаправление на другую страницу.

+0

Существует также ограничение на запрос GET: http://stackoverflow.com/questions/266322/http-uri-get-limit – Alsciende

1

Вы, вероятно, хотите, чтобы выполнить некоторую проверку на предмет на входах пользователей смягчать от атак SQL-инъекции, как это выглядит, как вход непосредственно манипулирует оператор SQL

0

ответ адрес Дэвид Dorward в большинстве точек - однако большой он пропускает вопрос кеширования.

POST и GET имеют очень специфическую семантику. POST должен означать, что запрос изменяет данные в системе, а GET - NOT. Поэтому ответ на POST нельзя кэшировать. Но ответ на GET может быть кэширован (в зависимости от отправленных заголовков).

Содержимое NB не просто кэшируется в браузере.

С.

+0

Запросы POST могут быть кэшированы, если отправляются подходящие заголовки HTTP-ответа. – Quentin

1

GET следует использовать для запросов, которые либо только для чтения или не имеют каких-либо побочных эффектов на данные (то есть они должны быть idempotent, как упомянуто в HTTP documentation). Вы должны иметь возможность отправлять запрос GET столько раз, сколько хотите, не влияя на то, какие результаты будут возвращены. (Возможно, вы не всегда получаете тот же результат, хотя, возможно, что-то еще, возможно, изменилось в то же время, но запрос GET не должен изменять сами данные).

Так что поиск подпадает под эту категорию, так как вы не должны изменять какие-либо данные в вашей системе, которые повлияют на вывод при поиске, вы просто предоставляете данные пользователю на основе какого-то параметра, который они вам дают ,

Конечно, некоторые данные, которые вы всегда хотите обновить, такие как статистика (как указано в комментариях), и это нормально с GET, так как это не повлияет на ответ, это просто сохранить запись все сделанные запросы и т. д.

POST следует использовать, когда любое разрушительное действие выполняется (путем разрушения, я имею в виду, когда данные изменены, а не просто удалить). Поэтому добавьте, обновите, удалите и т. Д.

Именно поэтому браузер обычно запрашивает, хотите ли вы повторно отправить запрос POST, но не для GET.Это связано с тем, что POST предназначен для использования, когда данные будут изменены.

Кроме того, некоторые браузеры могут предварительно извлекать страницы из ссылок на вашей странице (чтобы попытаться дать иллюзию скорости, когда ссылка в конечном итоге нажата). Если действие GET делает что-то деструктивное (например, удаление записи), то это может быть непреднамеренно вызвано просто, посетив страницу, на которую ссылается ссылка.

Если вы беспокоитесь о том, что ваши URL-адреса выглядят «грязными», вы можете использовать что-то вроде mod_rewrite, чтобы сделать URL-адреса более дружественными для людей. Таким образом, "http://yoursite.com/search/cars/red" может отображаться на карте "http://yoursite.com/search.php?category=cars&color=red".

+0

Вероятность того, что поиск изменит данные в вашей системе. Валистичность важна. Кроме того, только потому, что операция не меняет систему, не является причиной ее идемпотента. Идемпотенты получают одинаковый результат для одного и того же ввода, поиск не может, несмотря на то, что он не изменил систему. OTOH Я согласен, что поиск должен использовать GET –

+0

Idempotence не обязательно означает, что тот же вход = тот же результат. Это означает, что если вы даете один и тот же ввод несколько раз, он не будет иметь никаких побочных эффектов на результат (но результат может быть другим, если что-то еще обновило данные). Таким образом, статистика в порядке, поскольку они не будут влиять на результат, и вы захотите собрать их для каждого запроса в любом случае. Я обновил свой ответ, чтобы попытаться сделать это немного яснее, хотя, боюсь, я просто сделал это более запутанным :) –

0

Похоже, вы обеспокоены недружественными URL-адресами, то есть хотите иметь дружественные URL-адреса на своем сайте/приложении. Если это так, вы можете продолжать использовать POST в своем сценарии, но выполнять перенаправление после POST. Выполняя перенаправление после публикации, перенаправленный URL-адрес, который отображает результаты вашего поиска, может стать дружественным и коротким, в то время как вы можете использовать POST для передачи большего количества параметров в запросе на сервер и избегать длинной строки запроса, связанной с Введите URL.

Чтобы узнать больше перенаправлять-после-почте, проверить эту статью http://www.theserverside.com/news/1365146/Redirect-After-Post

0

вы рассматривали:

Подавая форму через GET (или POST), то на стороне сервера прочитать содержимое формы (из URL-адреса или данных сообщения), сформируйте хороший URL-адрес, затем 301-перенаправление на этот URL-адрес.

Таким образом, у вас есть полный контроль над URL (например, его не до браузера/формы, как выглядит URL-адрес), и вы получаете все преимущества использования GET, например. bookmarkable, linkable, back-button friendly и т. д.

Смежные вопросы