Формы: как человек что-то отправляет

Зачем:Форма превращает посетителя в клиента, и от неё зависит результат сайта. После урока вы собираете форму под главное действие своего проекта, подписываете каждое поле, включаете проверку в браузере и ставите отдельную галочку согласия на обработку персональных данных.

30 минут

Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.

HTML-форма — элемент <form> с подписанными полями, через который посетитель отправляет данные на сервер. Браузер проверяет их по атрибутам вроде required.

Форма: главное, ради чего сайт

Всё, что мы делали до сих пор, посетитель читает. Форма единственное место, где он отвечает: оставляет заявку, записывается, заказывает, подписывается. Поэтому именно от неё зависит, получится ли у сайта то, ради чего он создан: ваше главное действие из брифа.

В 2014 году, в этой эпохе нашей машины времени, у форм появилось много нового. В HTML5 пришли типы полей (email, tel, date), встроенная проверка и атрибут autocomplete; телефоны научились показывать нужную клавиатуру. Раньше всё это делали скриптом, а теперь оно встроено в браузер.

Из чего состоит форма

<form action="/zayavka" method="post">
  <label for="f-name">Как к вам обращаться</label>
  <input id="f-name" name="name" type="text" autocomplete="name" required>

  <label for="f-phone">Телефон</label>
  <input id="f-phone" name="phone" type="tel" autocomplete="tel" required>

  <button type="submit">Записаться на консультацию</button>
</form>
  • <form> объединяет поля. action говорит, куда отправить данные, method как: get или post.
  • <input>: поле. Атрибут type определяет вид и проверку, а name имя, под которым значение уйдёт на сервер. Без name поле не отправится.
  • <textarea>: многострочное поле, <select>: выбор из списка.
  • <label> это подпись, связанная с полем: у подписи for="f-name", у поля id="f-name". Нажатие на подпись ставит курсор в поле, а программа чтения называет поле по подписи.
  • <button type="submit">: отправка. На ней пишут действие («Записаться»), а не «Отправить».

Посмотрите на схему: слева форма, справа запрос, который построит браузер, и сообщения проверки. Переключайте метод и тип поля.

От формы к запросу
Запрос, который построит браузер
POST /zayavka HTTP/1.1
Host: zarechye.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

name=%D0%90%D0%BD%D0%BD%D0%B0&contact=anna%40example.org
Что говорит проверка в браузере

Все поля в порядке: браузер отправил бы форму.

POST кладёт данные в тело запроса, в адресе их нет. Именно так отправляют заявки и всё, что меняет что-то на сервере. Но и тело открыто, если соединение без защиты: поэтому форму отдают только по HTTPS. Обратите внимание на запись «%40» вместо «@» и «+» вместо пробела: данные формы кодируются, чтобы пройти по адресу без потерь.

Проверьте себя: какое поле не уйдёт на сервер?

Поле без атрибута name: имя нужно, чтобы значение попало в запрос.

GET и POST

GET кладёт данные в адрес: /poisk?q=границы. Так хорошо работает поиск: результат можно сохранить в закладки и переслать ссылкой. POST кладёт данные в тело запроса, а не в адрес. Заявки, регистрации и всё, что меняет что-то на сервере, отправляют именно так. Телефон человека не должен оказаться в истории браузера и в строке адреса.

И конечно, форму отдают и принимают только по HTTPS: иначе тело запроса можно прочитать по дороге. Вы разбирали это в уроке про TLS.

Откуда сервер знает, что делать с данными? У нас пока нет сервера, и мы просто пишем action="/zayavka". В части про серверы вы увидите, что за этим адресом стоит программа. А для статических сайтов, где своего сервера нет, бывают готовые сервисы приёма форм.

Типы полей, подсказки и проверка

Тип подсказывает браузеру, что за данные ждёт поле:

  • type="tel" это телефон: на телефоне откроется цифровая клавиатура;
  • type="email" это почта: браузер проверит, что есть @;
  • type="date", type="number", type="url": дата, число, адрес.

Атрибут autocomplete говорит, что за данные просят: name, tel, email, street-address. Браузер подставит сохранённое значение, и человек заполнит форму за секунды. Это ещё и требование доступности: тем, кому трудно печатать, автозаполнение помогает больше всех.

Проверку включают атрибутами: required (поле обязательно), minlength, pattern (шаблон), min и max. Браузер сам не даст отправить неверную форму и покажет сообщение. Для простых проверок этого достаточно. Но запомните главное: проверка в браузере удобство, а не защита. Запрос можно отправить в обход вашей формы, поэтому сервер всегда проверяет данные заново.

Проверьте себя: зачем нужен autocomplete?

Браузер подставит сохранённые данные, и человек быстрее заполнит форму. Для людей, которым трудно печатать, это ещё и вопрос доступности.

Меньше полей, больше заявок

Каждое поле это препятствие. Спрашивайте только то, без чего вы не можете выполнить действие: для записи это имя и способ связи, остальное можно выяснить потом. Не требуйте то, что у вас уже есть. Не делайте полей «отчество» и «индекс» там, где они не нужны.

Подпись поля пишите для человека, а не для базы данных. «Как к вам обращаться» теплее, чем «ФИО». А на кнопке напишите, что произойдёт: «Записаться на консультацию».

Согласие на обработку персональных данных

Имя и телефон это персональные данные: сведения, по которым можно узнать человека. Если вы их собираете, вы становитесь оператором и должны соблюдать закон «О персональных данных» (152-ФЗ). Подробно о нём в части про право и качество; в форме нужно минимум:

  • отдельная галочка согласия, которую посетитель ставит сам. Атрибут checked не используйте, предустановленная галочка согласием не считается;
  • согласие отдельное и конкретное: его нельзя прятать в общем соглашении с сайтом. Закон требует, чтобы человек понимал, на что именно соглашается;
  • ссылка на политику обработки персональных данных, где написано, какие данные, зачем и как долго хранятся, и как отозвать согласие;
  • форма работает по HTTPS.

Это не юридическая консультация, а ориентир для учебного проекта. Для настоящего сайта проверьте тексты согласия и политики у юриста: требования закона меняются, в последний раз в 2025 году.

Проверьте себя: можно ли поставить галочку согласия отмеченной заранее?

Нет. Согласие должно быть осознанным действием человека, а предустановленная галочка таким не считается.

Практика

Вы начинаете эпоху 2014 года: страница ниже похожа на вашу из 2005-го, но это новая версия сайта (в эпохах машины времени каждый раз собирается своя). Добавьте в неё форму для главного действия вашего проекта.

Если ваше главное действие «позвонить» или «прочитать», форма всё равно полезна как запасной путь: человеку, который не любит звонить, она даёт оставить номер.

Что было не так с формами раньше

Поля подписывали обычным текстом рядом, проверяли только скриптами, которые у кого-то не работали, а телефон просили «в любом формате». Галочек согласия не было вовсе, и данные собирались без всякого уведомления. Сегодня браузер и закон требуют больше. И то и другое защищает человека.

Практика

Готовлю вашу страницу…

Тест

Вопрос 1 из 6

Почему у поля должен быть label, а не только подсказка placeholder?

Один ответ

Карточки

Эти карточки попадут в повторение, когда вы завершите урок.

  • Из чего состоит форма?

    Ответ

    Элемент form с action (куда) и method (как), поля input, textarea, select с именами name, подписи label и кнопка button type="submit".

  • Как подписывать поле?

    Ответ

    Элементом label, связанным с полем: for="id" у подписи и id у поля. Placeholder не заменяет подпись.

  • Зачем разные type у input?

    Ответ

    Телефон (tel), почта (email), дата (date), число (number): браузер показывает подходящую клавиатуру и проверяет формат.

  • GET или POST для заявки?

    Ответ

    POST: данные в теле запроса. GET кладёт их в адрес, где они остаются в истории и логах. Форму отдают только по HTTPS.

  • Что нужно от согласия на обработку персональных данных?

    Ответ

    Отдельная галочка, не отмеченная заранее, со ссылкой на политику. Согласие осознанное и конкретное. Юридические детали: часть 15.

Источники

Дальше

Теперь вы знаете: формы и поля, проверка полей в браузере и согласие на обработку данных.