Работа с формами в PHP
Для сбора данных формы используются суперглобальные переменные PHP $_GET
и $_POST
.
Формы
Формы используют для передачи информации от клиента на сервер. Формы широко используются для регистрации пользователей, отправки комментариев на форумах и социальных сетях, оформления заказов в интернет-магазине и т.д.
HTML формирует основу и описывает из каких элементов состоит и как выглядит форма. Но без PHP-обработчика, то есть PHP-скрипта, который принимает эти данные и обрабатывает их нужным образом, в создании форм нет никакого смысла.
Практически любой современный сайт содержит как минимум несколько различных HTML-форм.
Подробно ознакомиться с HTML-формами можно здесь.
В приведенном ниже примере отображается простая HTML-форма с двумя полями ввода и кнопкой отправки:
Пример
Попробуй сам »<html>
<body>
<form action="action_form.php" method="POST">
Имя: <input type="text" name="firstname" value="">
Фамилия: <input type="text" name="lastname" value="">
<input type="submit" value="Отправить">
</form>
</body>
</html>
Обработка данных формы
Когда пользователь заполняет форму и нажимает кнопку «Отправить», данные формы отправляются в PHP-обработчик «action_form.php».
Теперь, когда мы создали форму, нам нужно понять, как обрабатывать данные, введенные пользователем в нашем серверном PHP-скрипте. Существует два механизма передачи данных из HTML-формы на сервер: GET
и POST
. В нашем примере выше мы указали POST
, но в любом случае задача чтения этих данных в нашем PHP-скрипте одинаково проста.
PHP помещает данные из формы в ассоциативный массив (информацию о массивах PHP смотрите в разделе «Массивы PHP» ), к которому можно получить доступ из сценария PHP на стороне сервера. Для методов POST
и GET
имена переменных массива соответственно $_POST
и $_GET
.
Чтобы показать пользователю заполненную в форме информацию, мы можем просто отобразить переменные. PHP-обработчик «action_form.php» можно записать так:
<body>
Вы ввели следующие данные:
Имя: <?php echo $_POST["firstname"]; ?>
Фамилия: <?php echo $_POST["lastname"]; ?>
</body>
</html>
Результат обработки данных будет примерно таким:
Вы ввели следующие данные: Имя: Иван Фамилия: Иванов
Такого же результата можно достичь с помощью метода HTTP GET заменив в форме method="POST" на method="GET", а в обработчике $_POST
на $_GET
.
Пример
Попробуй сам »<!DOCTYPE HTML>
<html>
<body>
<form action="send.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
Php-обработчик "send.php" выглядит так:
<body>
Привет <?php echo $_GET["name"]; ?><br>
Твой email: <?php echo $_GET["email"]; ?>
</body>
</html>
В вышеуказанном коде не хватает очень важного: Вам необходимо проверить данные формы, чтобы защитить скрипт от вредоносного кода.
Примечание: Помните о БЕЗОПАСНОСТИ при обработке форм PHP! Правильная проверка вводимой пользователями данных необходима для защиты формы от хакеров и спамеров!
Методы GET и POST
Существуют два способа, с помощью которых клиенты через формы могут отправлять данные на веб-сервер — это методы GET
и POST
.
Методы GET и POST создают ассоциативный массив (например, array (key1 => value1, key2 => value2, key3 => value3, ...)). Массив содержит пары ключ/значение
, где ключи — это имена элементов управления формы, а значения — входные данные от пользователя.
И GET и POST рассматриваются как переменные $_GET
и $_POST
. Это суперглобальные объекты, а это значит, что они всегда доступны, независимо от области видимости — и мы можем получить к ним доступ из любой функции, класса или файла.
$_GET
— это массив переменных, переданных текущему скрипту через параметры URL.
$_POST
— это массив переменных, переданный текущему скрипту с помощью метода HTTP POST.
Метод GET
Информация, отправленная из формы с помощью метода GET, видна всем — GET создает длинную строку, которая отображается в логах сервера и в адресной строке браузера. Например:
index.html?page=title&name=Nicol
Здесь первая часть строки до символа (?)
— это полный путь к файлу, а остальная часть — передаваемые данные. Данные разделяются на блоки «имя=значение» посредством (&)
. В данном случае мы получили 2 глобальных переменных $_GET['page']
и $_GET['name']
, их содержимым являются «title» и «armed» соответственно. Поскольку переменные отображаются в URL-адресе, страницу можно добавить в закладки. В некоторых случаях это может быть полезно.
GET также имеет ограничения на объем отправляемой информации. Метод GET предназначен для отправки только до 1024 символов.
Метод GET не может отправлять на сервер двоичные данные, например изображения или текстовые документы.
GET может использоваться для отправки не конфиденциальных данных.
Примечание: Не используйте метод GET для отправки на сервер паролей или другой конфиденциальной информации!
Метод POST
Метод POST передает информацию через HTTP-заголовки. Информация кодируется и помещается в заголовок QUERY_STRING
.
Информация, отправляемая методом POST, проходят через HTTP-заголовок, поэтому уровень безопасности зависит от протокола HTTP. Используя Secure HTTP, можно обеспечить защиту важной информации.
Метод POST, в отличие от GET, не устанавливает ограничения, а значит, если вы передаёте объёмную информацию, то лучше пользоваться именно им.
Так же к преимуществам метода POST стоит отнести возможность передавать файлы на сервер.