Все видели формы. Все заполняли формы. Но кодировали ли вы форму?
Форма в сети является любой областью на странице Web, где можно ввести информацию, например, ввод текста или чисел в текстовом поле, постановка флажка, установка радио-кнопки, или выбор варианта из списка. Форма затем, после нажатия на кнопку отправки, посылается на Web-сайт.
Использование форм в Web встречается повсеместно, для ввода имен пользователей и паролей на экране регистрации, комментарии в блоге, заполнение профиля на сайте социальной сети, или сообщение информации для счета на сайте магазина.
Создать форму легко, но как насчет соответствия формы стандартам Web?
К данному моменту, если вы проработали учебный курс по стандартам Web, будем надеяться, что вы уже убедились, что стандарты Web являются способом движения вперед. Код, который необходимо создать для доступной формы в соответствии со стандартами, требует не больше работы для реализации, чем неряшливая форма.
Поэтому, давайте начнем с самой основной и простой формы, которую кто-то, возможно, захочет использовать, и после этого понемногу будем ее усложнять — в этой лекции будут рассмотрены все основные элементы, которые необходимо знать для создания элегантной, доступной формы с помощью HTML. Лекция имеет следующую структуру:
Давайте начнем с действительно базовой формы комментария, разновидности формы, которая будет использоваться на Web-сайте для предоставления людям возможности высказать свое мнение о чем-то, например, о написанной статье, или позволяющая кому-то вступить с вами в контакт, не зная вашего адреса e-mail. Код выглядит следующим образом:
<form> Name: <input type="text" name="name" id="name" value="" /> Email: <input type="text" name="email" id="email" value="" /> Comments: <textarea name="comments" id="comments" cols="25" rows="3"></textarea> <input type="submit" value="submit" /> </form>
Если ввести этот код в документ HTML, а затем открыть документ в браузере, код будет представлен, как показано на рисунке 20.1.
Попробуйте использовать ее самостоятельно — введите приведенный выше код в собственный пример документа HTML и загрузите его в браузер. Попробуйте поэкспериментировать с различными элементами управления формы, чтобы увидеть, что с ними можно делать.
Если посмотреть код, то можно увидеть открывающий тег <form>, закрывающий тег </form>, и дополнительный код между ними. Этот элемент содержит два текстовых поля ввода, в которые читатель страницы может ввести свое имя и адрес e-mail, и текстовую область, в которую можно ввести комментарий, чтобы отправить на сайт владельца.
Что мы здесь имеем?
Тег <form> может иметь несколько атрибутов, которые будут объяснены на втором шаге, но помните о том, что формы нельзя вкладывать друг в друга.
Каждый тег input должен иметь атрибут type, чтобы определить, что он будет получать: возможными значениями атрибута являются text, button, checkbox, file, hidden, image, password, radio, reset или submit.
Каждый тег <input> должен также иметь имя, которое может определить кодировщик. Атрибут name информирует получателя данных, куда форма будет отправлена (будет ли это база данных, или сообщение e-mail, присланное администратору сайта через серверный сценарий), как называется информация в поле ввода. Когда форма посылается, большинство сценариев используют атрибут name для размещения данных формы в базе данных, или в сообщении e-mail, которое может прочитать человек.
Поэтому, если элемент <input> предназначен для ввода читателем / пользователем своего имени, то атрибут name будет иметь форму name="имя" или name="фамилия", и т.д. Если тег <input> предназначен для ввода адреса e-mail, то атрибут name будет иметь форму name="email". Чтобы облегчить жизнь себе и тем, кто будет использовать форму, рекомендуется называть элемент <input> семантическим образом.
Под семантическим я понимаю наименование в соответствии с его функцией, как описано выше. Если input предназначен для получения адреса e-mail, назовите его name="email". Если это должен быть реальный адрес читателя/пользователя, назовите его name="реальный адрес".
Чем более точное использование слов, тем легче будет не только кодировать, а затем выполнять задачи обслуживания в будущем, но также для человека или базы данных, получающих форму. Старайтесь быть кратким и точным при определении смысла.
Примеры использования атрибута value:
Для пустого значения атрибута value ввод пользователя определяет значение этого атрибута:
Предопределенное значение:
В область textarea можно вводить произвольный текст. Не только одну обычную строку текста, как в элементе <input>, но в элементе textarea можно ввести несколько строк ввода, и можно даже определить сколько доступно строк для ввода текста. Обратите внимание на атрибуты cols и rows — они требуются для каждого элемента textarea, и определяют, сколько столбцов и строк составляют текстовую область. Значения измеряются в символах.
Итак, вы заполнили показанную выше форму, и щелкнули на кнопке отправки Submit - почему же ничего не произошло, и почему она выглядит так неинтересно и размещена в одной строке? Ответ состоит в том, что мы еще ее не структурировали, или не определили место, где будут собираться данные отправленной формы.
Давайте изменим немного форму:
<form id="contact-form" action="script.php" method="post"> <input type="hidden" name="redirect" value="http://www.opera.com" /> <ul> <li> <label for="name">Name:</label> <input type="text" name="name" id="name" value="" /> </li> <li> <label for="email">Email:</label> <input type="text" name="email" id="email" value="" /> </li> <li> <label for="comments">Comments:</label> <textarea name="comments" id="comments" cols="25" rows="3"></textarea> </li> <li> <input type="submit" value="submit" /> <input type="reset" value="reset" /> </li> </ul> </form>
Эта форма при представлении в браузере будет выглядеть, как показано на рисунке 20.2:
Здесь сделаны небольшие добавления к базовой, простой форме. Давайте рассмотрим эти изменения:
Если вы озабочены безопасностью данных в форме, например, если вы посылаете номер кредитной карты на сайт магазина, то нужно использовать протокол https с помощью уровня защищенных сокетов (SSL). По сути это означает, что данные будут посылаться через протокол https, а не через протокол http. Посмотрите на URL, когда в следующий раз будете совершать покупку на сайте магазина, или при использовании онлайнового банка — вы, вероятно, увидите в панели адреса https://, а не http://. Различие состоит в том, что соединение https немного медленнее, чем http, но данные шифруются, поэтому при передаче данные будут недоступны злоумышленнику. При необходимости выясните у провайдера Web-хостинга, как они могут обеспечить услуги https и SSL.
Создание серверных сценариев находится за рамками данного курса — свяжитесь со своим поставщиком хостинга, чтобы выяснить, что они могут предложить, или обратитесь за помощью к хорошему программисту.
Вот несколько ресурсов, которые могут помочь, если вы захотите исследовать вопрос создания серверных сценариев:
С целью разделения структуры разметки, представления и поведения идеальным решением является использование сценария, который будет заставлять форму также перенаправлять пользователя после отправки формы. Вы не хотели бы, чтобы пользователи оставались сидеть перед страницей с формой, размышляя о том, что делать дальше, после того, как они отправили форму; я уверена, что вы согласитесь с тем, что для пользователя значительно лучше быть перенаправленным на страницу, которая содержит ссылки, показывающие "что делать дальше" после успешной отправки формы. Эта строка в частности определяет, что после отправки этой формы пользователь будет перенаправлен на домашнюю страницу компании Opera.
Некоторые люди считают, что для разметки формы нужно использовать не неупорядоченный список, а список определений. Другие считают, что список вообще не должен использоваться, а нужно использовать CSS для стилевого оформления тегов <label> и <input>. Читатель может самостоятельно исследовать эти дискуссии и прийти к своему собственному мнению, что будет более семантически правильно. Для данного простого упражнения будет использоваться неупорядоченный список.
Вторая форма выводится немного лучше, но пока еще достаточно коряво. Надо внести еще несколько дополнений, прежде чем применить некоторое стилевое оформление.