Одним из основных способов передачи данных веб-сайту является обработка форм. Формы представляют специальные элементы разметки HTML, которые содержат в себе различные элементы ввода - текстовые поля, кнопки и т.д. И с помощью данных форм мы можем ввести некоторые данные и отправить их на сервер. А сервер уже обрабатывает эти данные.
Создание форм состоит из следующих аспектов:
Создание элемента <form><form>
в разметке HTML
Добавление в этот элемент одно или несколько поле ввода
Установка метода передачи данных. Чаще всего используются методы GET
или POST
Установка адреса, на который будут отправляться введенные данные
Итак, создадим новую форму. Для этого определим новый файл form.php, в которое поместим следующее содержимое:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <h3>Форма ввода данных</h3> <form action="user.php" method="POST"> <p>Имя: <input type="text" name="name" /></p> <p>Возраст: <input type="number" name="age" /></p> <input type="submit" value="Отправить"> </form> </body> </html>
Атрибут action="user.php"
элемента form
указывает, что данные формы будет обрабатывать скрипт user.php,
который будет находиться с файлом form.php
в одной папке. А атрибут method="POST"
указывает, что в качестве метода передачи данных будет применяться метод POST.
Теперь определим файл user.php
, который будет иметь следующее содержание:
<?php $name = "не определено"; $age = "не определен"; if(isset($_POST["name"])){ $name = $_POST["name"]; } if(isset($_POST["age"])){ $age = $_POST["age"]; } echo "Имя: $name <br> Возраст: $age"; ?>
Для обработки запросов типа POST в PHP используется встроенная глобальная переменная $_POST.
Она представляет ассоциативный массив данных, переданных с помощью метода POST. Используя ключи, мы можем получить отправленные
значения. Ключами в этом массиве являются значения атрибутов name
у полей ввода формы.
Например, так как атрибут name
поля ввода возраста имеет значение age
(<input type="number" name="age" />
),
то в массиве $_POST
значение этого поля будет представлять ключ "age": $_POST["age"]
И поскольку возможны ситуации, когда поле ввода будет не установлено, то в этом случае желательно перед обработкой данных проверять
их наличие с помощью функции isset(). И если переменная установлена, то функция isset() возвратит значение true
.
Теперь мы можем обратиться к скрипту form.php и ввести в форму какие-нибудь данные:
И по нажатию кнопки введенные данные методом POST будут отправлены скрипту user.php:
Необязательно отправлять данные формы другому скрипту, можно данные формы обработать в том же файле формы. Для этого изменим файл form.php следующим образом:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php $name = "не определено"; $age = "не определен"; if(isset($_POST["name"])){ $name = $_POST["name"]; } if(isset($_POST["age"])){ $age = $_POST["age"]; } echo "Имя: $name <br> Возраст: $age"; ?> <h3>Форма ввода данных</h3> <form method="POST"> <p>Имя: <input type="text" name="name" /></p> <p>Возраст: <input type="number" name="age" /></p> <input type="submit" value="Отправить"> </form> </body> </html>
Поскольку в данном случае мы отправляем данные этому же скрипту - то есть по тому же адресу, то у элемента форма можно не устанавливать
атрибут action
.
Стоит отметить, что в принципе мы можем отправлять формы и запросом GET, в этом случае для получения тех же значений формы применяется массив $_GET, который был рассмотрен в прошлой теме:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php $name = "не определено"; $age = "не определен"; if(isset($_GET["name"])){ $name = $_GET["name"]; } if(isset($_GET["age"])){ $age = $_GET["age"]; } echo "Имя: $name <br> Возраст: $age"; ?> <h3>Форма ввода данных</h3> <form method="GET"> <p>Имя: <input type="text" name="name" /></p> <p>Возраст: <input type="number" name="age" /></p> <input type="submit" value="Отправить"> </form> </body> </html>