Если обновить страницу, то данные отправятся еще раз

Вот как выглядит страница если нажать f5 (обновить) если вы только что отправили форму с POST данными.
php уроки

То есть сайт предлагает отправить POST данные еще раз. Если же используется метод GET, то запроса на повторную отправку не будет.

Кстати, вместо сайта мы видим предложение отправить повторно пост данные - так получилось если нажать кнопку назад.
То есть на скриншоте дублирование информации (это я так постарался), на практике у обычных пользователей такое редко случается, обычно ТОЛЬКО окошко всплывает, а сам сайт виден.

В общем, чтобы этого окошка не было и оно не вводило в ступор юзеров и ТЕМ БОЛЕЕ не отправляло повторно данные, а это еще важнее, представьте при комментировании будут отправляться комментарии дважды или трижды (смотря сколько раз пользователь обновит страницу).
Рассмотрим подробнее. Ситуация такая: юзер регистрируется, заполняет форму, нажимает отправить, данные уходят, все принимается, на него заводится на сайте аккаунт, и тут же отображается профиль. Юзер ничего не думая, просто нажимает F5, видит ЭТО САМОЕ, естественно он жмет ДАЛЕЕ, страница перегружается и его выкидывает из профиля, ибо он повторно отправил данные регистрации, а такие логин, емейл и пр - уже есть. и юзер в недоумении, он то хотел всего навсего обновить страницу.
Правило: после отправки формы крайне желательно (я бы сказал обязательно) перегрузить страницу, чаще всего это делается с помощью функции header(Location: ...)
Где вместо многоточия указываете адрес страницы, на которую пользователя перекинет, например, header('Location: 2.php'); или так: header('Location: 2.php?message=ok');. Таким образом, когда мы выполнили все необходимые действия (сделали запись в базе данных, отправили письмо и т. д.), мы можем перезагрузить страницу, но уже без POST данных.
Есть и другие способы: с помощью html тега и с помощью яваскрипта, но они менее надежны.



Совет:
Для тега FORM (или его контейнера) ставить id, а для атрибута action добавлять якорь! Чтобы после отправки формы пользователь возвращался к форме, а не к верху страницы. Но если надобности нет, то вообще не заполнять атрибут action, а с некоторых пор он стал не обязательным.
В идеале, конечно же, перед отправкой формы делать проверку яваскриптом, чтобы пользователю не приходилось исправлять неверно введенные данные (например, с помощью jValidate )



Пред. урок След. урок