Содержание
Для передачи информации от браузера к серверу, используют web-формы. Основные атрибуты тега ‘form’:
- action — файл-обработчик формы — $_SERVER[‘PHP_SELF’].
- method — GET или POST. По-умолчанию используется GET.
Простая форма отправки запроса на сервер:
<form action="…"> Логин: <input name="login" type="text"> Пароль: <input name="pwd" type="password"> <input type="submit"> </form>
Метод GET
При отправке формы, браузер по ней пробегается и составляет строку запроса:
GET /form.php?name=admin&lastname=gogol
Т.е. в адресной строке после знака вопроса ? идет QUERY_STRING. Она попадает в глобальный массив $_SERVER[«QUERY_STRING»].
Недостатки метода:
- Данных может быть много, и запрос будет длинным и некрасивым. Дополнение: все браузеры передают поисковые запросы методом get.
- Т.к. все данные передаются через адресную строку, важные данные лучше так не передавать (напрмер, логин и пароль).
- Есть некоторые операции, которые метод get не сможет выполнить: закачка файлов на сервер.
Метод POST
Применяют, чтобы не светить важные данные (id, пароль, логин).
При этом методе браузер также пробегается по форме, составляет строку запроса (!не query_string) следующего вида:
POST /action.php HTTP/1.1 /r/n Host: www.google.ru Accept: */* Accept-Language: ru Referrer: http://yandex.ru/yandsearch?text=Rehc User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) Content-Length: 20 /r/n/r/n — пустая строка, это указатель, что заголовки закончены, а теперь пойдут параметры по методу POST: login=Vasya&pwd=Parol /r/n/r/n - пустая строка, конец запроса POST
Обработка сервером запроса GET и POST (как не надо делать)
Самый простой, способ обработать запрос сервером — это залезть в глобальный массив и узнать параметры атрибута query_string — _SERVER[«QUERY_STRING»] (лучше его не использовать). Но здесь есть два недостатка. Первый, если данные переданы методом post, здесь их не будет. Второй, не удобно вытягивать эту строку, затем разбивать ее на части и рассматривать каждый элемент.
У нас есть 2 служебных массива, которые хранятся в массиве $GLOBALS — $_GET[]. Все, что уходит методом get, попадает в этот массив, а имена элементов автоматом становятся именами ячеек массива $_GET.
Другой служебный массив, хранящийся в $GLOBALS — $_POST. Все, что уходит методом post, попадает в этот массив, а имена элементов автоматом становятся именами ячеек массива $_POST.
ВНИМАНИЕ! Так обрабатывать запросы get и post СТРОГО НЕ РЕКОМЕНДУЕТСЯ! Это дыра в безопасности.
Обработка сервером запроса GET и POST (как надо делать)
Никогда не используйте данные, пришедшие методом post и get напрямую (через глобальный массив $_GET, $_POST). Их всегда нужно фильтровать:
$name = strip_tags($_POST['name']); // вырезает все теги $name = trim($_POST['name']); // вырезает все пробелы $age = abs((int)$_POST['age']); // здесь ждем число, приводим данные к положительному числу $age = is_numeric($_POST['age']); // проверим, на самом ли деле здесь число
Все данные, которые приходят к нам в заголовках, их все можно подменить. Никогда не доверяйте этим заголовкам.