Метод POST. Золотое правило Web-разработки
<form action="script.php" method="POST">
Введите Ваше имя
<input type="text" name="my_name">
<input type="submit" value="Отправить">
</form>
На стороне сервера параметр будет доступен в массиве $_POST
echo $_POST["my_name"];
Проблема с обновлением страницы
Задача посчитайте сумму двух чисел. Данные из формы передаются методом POST После того как задание выполнено и сумма подсчитана, попробуем перезагрузить страницу, например через F5. Появляется всплывающее окно. Это вызвано тем, что на странице есть POST-параметры . Это окно приводит обычно пользователя в ступор. Пример, ситуации, когда наличие POST параметров приводит к трагической ситуации. Например пользователь добавил комментарий к статье. Через некоторое время он решает посмотреть чужие комментарии и обновляет страницу. При этом он получает окно, с предупреждение о POST-параметрах. При нажатии «Отмена» - обновления страницы не происходит. При нажатии «Далее» его комментарий добавляется еще раз. Единственным выходом для пользователя является скопировать адрес страницы и открыть его в новой вкладке, что не очень User Friendly То есть ОЧЕНЬ ВАЖНО не оставлять пользователя на странице с POST-параметрами. Настолько важно, что это правило часто называют Золотом правилом Веб-разработки!
Перенаправление через header("Location: ")
Для того, чтобы убрать POST параметры, можно перенаправить пользователя на другую страницу через конструкцию (перенаправление на стороне сервера)
header("Location: http://www.example.com/");
Нужно делать до вывода какой-либо информации на экран Кодировка UTF-8 по умолчанию содержит три байта, которые тоже считаются за вывод. Поэтому нужно выставлять кодировку UTF-8 Without BOM
Если мы поставим в header("Location …") адрес того же скрипта, в котором находимся, то можем получить циклическую переадресацию. Для того, чтобы этого не происходило, нужно поместить header location внутрь if-a с проверкой на наличие POST-параметров Это можно сделать через функцию isset, например isset($_POST["res"]); После перенаправления через header location, скрипт продолжает работу, но все данные выводимые через echo пользователь уже не увидит, поэтому имеет смысл сразу же после header location скрипт приостанавливать через exit(0)
Нормализация кодировки для UTF-8 Without BOM
header('Content-Type: text/html; charset=utf-8');
Практика:
- Проверка логина, пароля пользователя в одном скрипте
- Добиваемся правильных ответов о неправильном логине, пароле. При обновлении страницы не должно выскакивать предупреждающего сообщения
- Решаем предыдущую задачу с помощью одного файла.
- Пользователь вводит числа в форму, пока не введет ноль. Необходимо вывести сумму чисел