Прежде чем перейти к созданию дальнейшего кода, необходимо хорошенько разобраться в том, как и что именно браузер передаёт на сервер при нажатии на кнопку Отправить .
Методы GET и POST
При нажатии на кнопку браузер формирует запрос, который затем отправляет на сервер при помощи метода GET или POST. В чём различия?
Метод GET имеет ограничение по объёму передаваемых данных - всего 4 килобайта, поэтому используется для отправки небольших запросов, например, данных из адресной строки.
Метод POST не имеет ограничения, поэтому используется для передачи больших запросов, большого количества информации, в том числе текстов, файлов и т.д.
При отправке браузер учитывает данные тега <form>, в котором атрибут method указывает, каким именно способом должна быть передана информация (см. главу 8, строку 30 кода).
Как передаются данные
В запросе может содержаться достаточное количество данных, но в первую очередь для работы сайта важна информация, содержащаяся в адресной строке и данные, введённые пользователем. О том, как составляется адрес страницы, было рассказано в главе 6, поэтому здесь рассмотрим передачу данных.
Когда пользователь введёт все данные и нажмёт кнопку Отправить , браузер сначала проверит правильность заполнения формы, после чего сформирует запрос, в котором буде содержаться адрес, указанный в атрибуте action тега <form> (см. главу 8, строку 30 кода), и все данные, введённые пользователем.
Рассмотрим что получит сервер на примере компонента Feedback_Form, про который шла речь в предыдущих главах; это будет содержимое текстового поля, значение в списке и три загруженных файла изображения. Если какое-либо изображение не будет загружено, буде передана только информация о наличии в форме поля для загрузки.
Сервер при получении запроса переадресует его на нужный сайт, сайт переадресует запрос соответствующему компоненту, а контроллер компонента - соответствующему файлу-обработчику формы (см. главу 6).
Данные, введённые пользователем, передаются в виде массива. Представим себе, что в поле введён некоторый текст, выбран элемент списка и введено одно изображение; тогда после отправки обработчик формы получит два массива:
Array (
[t-dish] => Вопрос
[mess_text] => Этот текст создан для проверки работы формы обратной связи.
[new_message] => Отправить!
)
Array (
[mess_img_1] => Array (
[name] => Файл1.png
[type] => image/png
[tmp_name] => C:\OSPanel\OpenServer\userdata\php_upload\php30D.tmp
[error] => 0
[size] => 618618
)
[mess_img_2] => Array (
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
[mess_img_3] => Array (
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)
Первый массив - это данные в переменной $_POST. Массив формируется из следующих значений:
- список: элемент select, имя - t-dish, значение - "Вопрос";
- текстовое поле: элемент textarea, имя - mess_text, значение "Этот текст создан для проверки работы формы обратной связи";
- кнопка: элемент input, имя - new_message, значение - "Отправить!".
Обратите внимание: ключом в каждой паре (ключ => значение) является имя элемента (атрибут name, см. главы 9-12, строки кода 37, 97, 102, 108, 112). Помимо полей, так же передаётся информация о кнопке и её значении (надписи).
Второй массив - это данные в переменной $_FILES. Массив формируется из следующих значений:
[имя поля для загрузки файла] => массив, состоящий из:
- [name] - имя загружаемого файла;
- [type] - тип файла;
- [tmp_name] - временное имя загружаемого файла и полный путь к нему;
- [error] - код ошибки при загрузке, например, 4 - файл не загружен (отсутствует);
- [size] - размер файла (в байтах).
Для каждого поля все эти данные указываются отдельно. При загрузке в папку $_FILES попадают только данные о файле; сам файл сначала загружается во временную папку (в целях безопасности), после чего он проходит проверку, ему присваивается новое имя (или в качестве нового присваивается старое) и файл сохраняется в нужное место.
Как работать с полученными данными будет подробно рассмотрено в следующих главах.