Поле со списком php
Динамические списки (Динамический select) и MySQL
Если вас интересует получение данных для динамических списков не из базы данных, а из массивов, вам нужна другая статья.
Если же ваши данные хранятся в таблице СУБД MySQL или какой-то иной, вам будет полезна информация из этой статьи. Я описываю алгоритм получения данных для раскрывающихся списков в HTML-теге SELECT с помощью JavaScript. Сам сценарий написан на PHP.
Если кому-то лень читать и хочется открыть книгу на последней странице, можно скачать все файлы в архиве.
Многим эта статья поможет написать дипломную или курсовую работу. Итак, техническое задание. Проект «Производители автомобилей и марки автомобилей».
Информация в этой статье для вас, скорее всего, сегодня уже является устаревшей. Вряд ли вы пытаетесь что-то «писать» для PHP версией старше чем 5.5. А если и пытаетесь. зачем оно вам? Среди материалов я уже разместил статью с построением динамических списков (динамических select-ов), работающих в трио с MySQL и PDO. Там работоспособный код. Смело переходите в ту статью.
- Cоздать HTML-форму, в которой можно выбрать производителя автомобиля и марку автомобилей выбранного производителя.
- Данные в списке моделей автомобилей должны быть уникальны для каждого производителя.
- Страница не должна перезагружаться после выбора производителя.
Задача ясна. Что мы можем добавить от себя? Если выбранный производитель меняется, значит из перечня моделей нужно удалить всё то, что имело отношение к предыдущему производителю. Если производитель не выбран, поле выбора модели должно быть пустым. А лучше сделать его еще и неактивным.
Начать нужно с таблиц в MySQL. Для того, чтобы решить задачу, нужно создать две таблицы в базе данных: producers (производители) и models (модели).
Теперь пополним таблицы данными.
Чтобы подключаться к нашей базе данных мы будем использовать уже знакомый вам сценарий подключения к СУБД.
Теперь можно создать HTML-форму. Сразу скажу, что здесь у нас будут работать в связке PHP, MySQL и jQuery. Именно с помощью jQuery select с перечнем моделей автомобилей будет получать данные из базы данных (динамические списки, так сказать).
Если вы внимательно просмотрите код, заметите в нем ранее нигде не объявленную функцию getModels(). В самом начале кода для файла HTML-формы мы подключили два внешних файла: database.php (для подключения к СУБД) и functions.php (для объявления пользовательских функций). Вот во втором файле и была объявлена функция getModels(). Код самого файла я приведу ниже. А упомянутая функция просто получает из базы данных MySQL перечень производителей автомобилей.
Теперь нашей форме нужно придать какой-нибудь простенький внешний вид. Для этого мы создадим очень небольшой CSS-файл со стилями.
После этого наша форма будет выглядеть примерно вот так:
Приведу код содержимого файла functions.php . Комментарии внутри файла достаточны. Думаю, более ничего дописывать нет необходимости.
Итак, у нас есть два раскрывающихся списка. В одном из них производители автомобилей, в другом — модели автомобилей. Списки зависимы. Список select#model зависит от выбора в списке select#producer . Содержимое списка производителей у нас уже есть. Его нам обеспечил сам сервер. А вот чтобы получить содержимое списка моделей, да еще и зависящее от выбранного производителя, придется потрудиться JavaScript-у. Весь наш пользовательский JavaScript-сценарий помещен в файл scripts.js .
Именно в этом файле написан обработчик события выбора производителя, после которого создается AJAX-запрос к веб-серверу, способный вернуть в ответ перечень моделей автомобиля выбранного производителя.
Если вы внимательно просмотрите код JavaScript, увидите, что AJAX-запросы будут отправляться файлу requests.php . Этот файл обратно в ответ на запрос будет отправлять данные. Если говорить конкретно — перечень моделей автомобилей в ответ на выбор производителя машин. Привожу его код.
Вот и всё. Задача решена. Можно выбрать производителя.
После этого можно выбрать модель автомобиля.
Можно сменить производителя. Тогда содержимое списка моделей очистится и обновится новым перечнем.
А можно вообще ничего не выбрать среди производителей. Тогда список моделей сбросится, а потом отключится.
Все файлы, упомянутые в статье, я поместил в архив.
Информация в этой статье для вас, скорее всего, сегодня уже является устаревшей. Вряд ли вы пытаетесь что-то «писать» для PHP версией старше чем 5.5. А если и пытаетесь. зачем оно вам? Среди материалов я уже разместил статью с построением динамических списков (динамических select-ов), работающих в трио с MySQL и PDO. Там работоспособный код. Смело переходите в ту статью.
Обработка списка формы при помощи PHP. Теги select и option
В этой статье вы узнаете, как добавить в форму прокручиваемый список, как настроить возможность единичного, так и множественного выбора; как обрабатывать данные, полученные из списка; как проверять данные; как выполнять различные действия в зависимости от полученных данных.
Список. Один вариант выбора
Давайте рассмотрим новый термин «список» (select box), также известный, как «ниспадающий список» или «прокручиваемый список» (как его только не называют). Каждый пункт списка определяется при помощи тега option. Тег option , как и другие элементы ввода, имеет атрибут value , а также текст, заключенный внутри тегов option . Это значит: когда пользователь выберет «Male» , переменной «formGender» ( $_POST[‘formGender’] ) будет присвоено значение «M» .
Выбранное пользователем значение можно узнать при помощи стандартного массива $_POST , также как обычное текстовое поле ввода.
Всегда хорошо делать первую строку в списке пустой. Это побуждает пользователя сделать выбор и позволяет определить, выбрал ли пользователь что-нибудь из списка. Конечно, потребуется проверка:
Список. Выбираем несколько вариантов
Предположим, вы захотите создать список, которые предоставит пользователю возможность выбрать несколько вариантов.
Ниже представлена HTML разметка:
Отметьте схожесть с группой флажков. Для начала установите атрибут multiple=«multiple» в теге select . Во-вторых, поместите квадратные скобки в конец значения атрибута name . Сейчас нет необходимости делать первый вариант выбора в списке пустым, так как мы просто проверим, выбрал ли пользователь что-нибудь или нет. Чтобы выбрать несколько значений, используйте при кликах клавиши shift и ctrl .
PHP код для обработки данного списка очень схож с php кодом для обработки группы флажков. $_POST[‘formCountries’] возвратит массив из выбранных пользователем значений.
Как обычно, используем isset , чтобы убедиться в том, что пользователь выбрал хоть что-нибудь.
Используем конструкцию switch
Сейчас давайте опять вернемся к списку, в котором присутствует всего один вариант выбора. Наша задача сделать так, чтобы каждому варианту выбора соответствовало строго определенное действие. Конечно, можно использовать инструкцию if , однако она в данном случае способна загрязнить код. Давайте рассмотрим два пути: динамические команды и инструкцию switch .
У каждого из этих двух подходов есть свои плюсы и минусы. Метод основанный на switch ‘е в сущности есть ни что иное, как лаконичная запись ряда конструкций «if» . После ключевого слова case перечисляются возможные варианты значений. В случае совпадения результата вычисления выражения (значение переменной $varCountry ) с каким-либо значением, произойдут действия, записанные далее, вплоть до конструкции break . В нашем случае произойдет переадресация к соответствующей для каждой страны странице. Если ни одна страна найдена не будет, то выведется сообщение «Error» , стоящее за ключевым словом default .
Второй метод заключается в передаче выбранного значения функции header , которая перенаправит пользователя к корректной странице.
Первый метод требует написания большего объема кода, но он и более безопасен, так как он позволяет посредством формы переадресовать пользователя к заранее запрограммированным вариантам, при отсутствии варианта выбора будет выведено сообщение об ошибке и выполнение сценария будет прекращено.
Второй метод более краткий (значительно), зато его безопасность сильно снижена. Так любой пользователь может делать с формой, что хочет, и вводить любое значение, какое пожелает. При использовании второго метода сначала желательно проверить выбранные страны, чтобы застраховать себя от переадресации к «вредной» странице.
По материалам. Надеюсь хоть кому-то поможет)
Поле со списком php
Список, список, список… Открываешь файл любого интернет-проекта, основанного на технологии PHP+MySQL, и первое, что видишь — это куски кода, примерно такого вида:
Подобным образом выводится список ссылок на отдельные страницы раздела сайта, хранящиеся в базе данных, фирмы в каталоге, подписчики рассылки в интерфейсе администрирования, статистика ресурса и многое другое.
Каждый раз, набирая подобный код в PHP-редакторе, видишь, что снова и снова проделываешь одну и ту же работу с минимальными вариациями. Различия только в коде SQL-запроса, типе и количестве выводимых полей и в HTML-тэгах, т.е. в дизайне. А если делаешь одну работу два раза, то это повод не только заскучать, но и задуматься о том, как ее себе облегчить. Да и попытки немного изменить дизайн сайта часто требуют модификации именно этого участка кода, а значит и его последующей отладки.
На протяжении нескольких лет работы с PHP у меня выработался определенный стандарт написания кода для вывода списков, и в результате захотелось обобщить этот опыт и сделать нечто стандартное, подходящее для любой ситуации, связанной с выводом результатов SQL-запроса в виде списка средствами PHP.
В результате все простые списки были препарированы на шесть частей (это самая простая их модель):
- Обрамление списка: это то, внутри чего список находится, есть в нем хотя бы один элемент или нет.
- Пустой список: если наш запрос не возвращает ни одной строки, то все-таки стоит вывести на сайт некоторое пояснение, например, „список пуст”, или „редактор в отпуске, новостей больше не будет”, или оставить здесь пустое значение.
- Начало списка: если в списке есть хотя бы один элемент, то список можно начать какой-нибудь фразой, например, „начало списка”, или разместить здесь заголовок, который в случае пустого списка может и не выводиться.
- Конец списка: нужен для тех же целей, что и предыдущий пункт – фраза „конец списка” или какие-либо итоговые данные по всем строкам, которые в случае пустого списка могут и отсутствовать.
- Элемент списка: собственно это и есть вывод данных каждой строки запроса; в отличие от предыдущих пунктов этот элемент применяется к каждой строке запроса, выводя её в одном и том же дизайне внутри обрамления списка.
- Разделитель элементов списка: иногда элементы списка отделяются чем-нибудь друг от друга – запятыми, вертикальными черточками, тире и прочим, причем в начале и конце списка эти разделители могут отсутствовать.
Вышеуказанную структуру я называю шаблоном списка. Остается написать код некоего класса, который, имея на входе SQL-запрос, порождает объект, содержащий результат выполнения этого запроса. В классе также требуется метод, который на основании разработанного выше шаблона выдаст нам требуемый HTML-код.
Можно, конечно, обойтись и функцией, которая выдаст требуемое, получив в качестве параметров SQL-запрос и код шаблона. Но на мой взгляд с классами и ООП в программировании работать куда вкуснее. Вдобавок я не собираюсь останавливаться на такой простой модели списка, а дальнейшие разработки кода с классами поддерживаются куда проще. А когда наши провайдеры сменят движки PHP с четвертой версии на пятую, классы войдут в PHP в том же объеме, что и в C++.
Недолго думая, класс был назван ListItems; незнакомых с английским отсылаю на multitran.ru. Пишем его код:
Конструктор класса принимает в качестве параметра код SQL-запроса. К моменту создания экземпляра класса у вас уже должна быть вызвана функция mysql_connect. После этого в свойстве items объекта мы получим результат выполнения запроса в виде нумерованного массива, каждый элемент которого является стандартным PHP-объектом, имена полей которого соответствуют именам полей запроса, а значения, естественно, соответствуют выбранным из базы данных значениям полей.
Теперь немного о шаблоне списка. Списки я препарировал, но ничего не сказал об их программной реализации. Для начала назовем каждый пункт каким-нибудь малопонятным именем на английском языке.
- list – обрамление списка
- empty – пустой список
- begin – начало списка
- end – конец списка
- item – элемент списка
- delimiter – разделитель элементов списка
Потом создадим массив, в котором каждый элемент шаблона индексируется принятым именем. Для написания кода элементов шаблона я пользуюсь одной достаточно распространенной идеей, вымученной PHP-программистами (да и не только ими) за многолетние попытки отделить дизайн от кода (эта статья также относится к ним). В настоящее время сложился определенный стандарт написания шаблонов для PHP-программ, использующий так называемые макрокоды, или макросы.
Чаще всего применяется конструкция, использующая угловые скобки с каким-либо текстовым или цифровым значением внутри для указания того места в шаблоне, куда надо вставлять нужную информацию. Для той же цели применяются теги комментариев HTML с текстом или числом, которые идентифицируются PHP-движком и заменяются требуемой информацией.
На мой взгляд, главный недостаток такой технологии заключается в том, что если PHP по какой-либо причине не обработал этот элемент кода, то в браузере вы не увидите ничего, что указало бы на эту ошибку, поскольку комментарии HTML невидимы по определению, а конструкции с угловыми скобками выглядят для браузера как неизвестные ему HTML-тэги, которые также не отображаются. А если совершенная ошибка невидима, то она будет повторяться и никогда не отладится. К тому же шаблоны бывают достаточно сложны и объемны по содержанию и разрабатывать их приходится в каком-либо WISIWIG-редакторе. Попробуйте редактировать невидимые тэги и комментарии в нем, и сразу убедитесь, насколько это неудобно. Применение квадратных скобок в виде [name] не очень удачно, так как даже в обычных текстах они достаточно распространены.
В общем, для вставки в шаблоны варьируемой информации была придумана следующая конструкция: , где NAME – это идентификатор того значения, которым мы хотим заменить этот макрос. Такой макрос виден в выводе браузера, в любом WISIWIG-редакторе, более того, многие популярные HTML- и PHP-редакторы исходного кода можно настроить на подсветку этой конструкции цветом, отличным от остального кода, поскольку в стандарте HTML и PHP такая последовательность символов не используется. К тому же этот макрос не требует для своего написания специальных символов HTML.
Идентификатор NAME должен подчиняться еще одному правилу. Как вы уже заметили, в коде класса ListItems, SQL-запрос преобразуется в массив объектов, у которых имена полей соответствуют именам полей запроса, а значения – значениям. Распространяя это дальше, примем, что идентификатор NAME должен соответствовать имени того поля, значение которого заменит макрос без учета регистра символов. То есть, если в вашей базе данных есть таблица, в которой в поле name содержатся названия стран мира, а в поле population – численность их населения, то для того чтобы вывести список стран в виде
НАЗВАНИЕ СТРАНЫ – НАСЕЛЕНИЕ
элемент item должен выглядеть так:
Чтобы указать, где в обрамлении списка выводится последовательность его элементов, а также их количество, в классе ListItems предусмотрены дополнительные поля и соответствующие им макросы.
- listitems – в этом поле накапливается HTML-вывод по мере перебора элементов списка, а макрос должен обязательно присутствовать в элементе list шаблона, поскольку он заменяется кодом всего списка.
- count – это число элементов списка, а макрос заменяется значением этого поля.
С учетом вышесказанного, код, задающий шаблон, будет выглядеть так:
Теперь приведу код метода объекта ListItems, который вставляет любой объект $o в каждый элемент шаблона $t, закодированного по определённым выше правилам.
Изменив регулярное выражение в третьей строке кода, вы можете изменить вид макроса в соответствии с принятым на вашем проекте. Например,
позволит использовать макрос вида [name], а
– такой же макрос с фигурными скобками и любым числом пробельных символов между name и скобками. Я использую в своих проектах макросы с возможностью добавления пробельных символов перед и просле name, и эта строка выглядит так:
И последняя функция класса ListItems выводит массив объектов items в шаблон из шести элементов в соответствии со всем вышесказанным.
Первые шесть строк кода нужны, чтобы предотвратить вывод сообщений об ошибках в случае несоответствия шаблона $arg введенным нами соглашениям. Далее по циклу перебираются все элементы массива items и вставляются в элемент item шаблона с добавлением разделителя delimiter. По окончании цикла, в случае, если количество элементов в items больше нуля, то listitems заменяется empty, если нет, то к нему добавляются begin и end с отбрасыванием последнего delimiter. Далее экземпляр нашего класса вставляется в list и еще раз в полученный результат но уже без поля listitems. Это необходимо для того, чтобы дать возможность разместить поле count в begin, end, item или delimiter, что иногда бывает необходимо.
В общем-то, уже почти все сказано. Но как полагается в любой статье по программированию, приведу один готовый к тестированию пример, чтобы мой читатель, который, как и всякий программист, достаточно ленив, мог оценить сей труд на своем сервере.
Скачайте файл listitems.rar и распакуйте его в один из каталогов вашего сервера. Код класса ListItems находится в файле cls_lstitems.inc, тестовый пример – в файле test.php, SQL-код для создания тестовой таблицы в вашей базе данных – в файле test.sql. Во второй-пятой строках файла test.php укажитете ваши данные для подключения к MySQL, создайте тестовую таблицу из файла test.sql и запускайте скрипт test.php. Результатом его работы будет список стран мира с их населением по последним данным из CIA World FactBook.
Раскомментируйте 20-ю строку скрипта. Теперь элемент item отличается от первоначального тэгами b и, соответственно, население страны выделяется жирным шрифтом. Раскомментируйте 22-ю и 23-ю строки, и список становится нумерованным. Если в 53-ей строке заменить параметр функции $template на $template1, то вы получите список в табличном виде. Шаблон $template2 позволяет вывести только названия всех стран мира через запятую с пробелом и завершающей точкой. Если 51-ую строку скрипта заменить на
то можно посмотреть на то, как класс ListItems обрабатывает пустые SQL-запросы.
Конечно, код класса ListItems намного сложнее приведенного в начале статьи цикла. Но, вводя такой класс, мы сделали одну очень большую вещь. В этом примере программный код (класс) полностью отделен от дизайна (шаблон) и содержащейся в выводимом списке информации (SQL-запрос). Добавьте к этому возможность хранить любое количество шаблонов в базе данных за счет их однотипной структуры, выбирая их по имени или номеру (идентификатору) и редактируя через какой-нибудь интерфейс администрирования без необходимости правки программного кода. Теперь не надо запускать дизайнеров в программный код, достаточно лишь поправить шаблон. Нет необходимости править код и в случае добавления новых данных: если вы хотите добавить в ваш список площадь территории каждой страны, то нужно лишь добавить в таблицу MySQL новое поле square, а в поле item шаблона — макрос . Все это очень сильно облегчает жизнь разработчику движка сайта и CMS (Content Management System).
Выпадающий список и База Данных
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 17
1 Тема от VitoS 2011-02-18 20:30:31
- VitoS
- Активный
- Неактивен
- Зарегистрирован: 2011-02-16
- Сообщений: 164
Тема: Выпадающий список и База Данных
возникла такая проблема (уже несколько дней мучаюсь). есть у меня БД, в которой есть таблицы: grupps-в ней содержатся названия учебных групп , studs-соответсвенно список студентов и balls-оценки, в ней происходит связка пердыдущих таблиц. нужно создать выпадающий список на странице ,чтобы выбирался номер группы, а ниже появлялся список выбранной группы. выпадающий список я вроде бы как создал:
$query=»select distinct NomGrup, balls.Id_grup from
grupps,balls where grupps.Id_grup=balls.Id_grup»;//запрос
$result=mysql_query($query);
echo » «;
И вывод студентов в виде таблицы я тоже сделал, но только всех студентов, без привязок к определенной группе. подскажите пожалуйста как можно сделать это.
2 Ответ от Hanut 2011-02-19 00:26:27
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,660
Re: Выпадающий список и База Данных
У вас затруднения с тем как отправить идентификатор группы скрипту, чтобы выбрать по нему список студентов, или затруднения с обработкой уже принятых данных?
По идее, все выпадающие списки у вас должны находиться внутри тега
5 Ответ от VitoS 2011-02-20 16:15:13
- VitoS
- Активный
- Неактивен
- Зарегистрирован: 2011-02-16
- Сообщений: 164
Re: Выпадающий список и База Данных
а выпадающий список разве нельзя просто собрать так:
echo » «;
В нем отражаются номера групп уже. А потом применять условие if (isset($_POST[‘NomGrup’])) и т.д. Или так делать нельзя?
И как я понял в условии if (isset($_POST[‘NomGrup’])) <
$sql = ‘SELECT * FROM `table_name` WHERE `NomGrup` = ‘ . $_POST[‘NomGrup’];
// и т. д.
>
и должен происходить сам процесс вывода студентов?
6 Ответ от Hanut 2011-02-20 19:21:05
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,660
Re: Выпадающий список и База Данных
а выпадающий список разве нельзя просто собрать так
Можно и нужно. Я сократил, чтобы была видна общая картина. Обратите внимание на детали формирования:
А потом применять условие if (isset($_POST[‘NomGrup’])) и т.д. Или так делать нельзя?
Все верно, так и надо.
И как я понял в условии if (isset($_POST[‘NomGrup’]))
и должен происходить сам процесс вывода студентов?
7 Ответ от VitoS 2011-02-20 19:51:58 (изменено: VitoS, 2011-02-20 19:52:51)
- VitoS
- Активный
- Неактивен
- Зарегистрирован: 2011-02-16
- Сообщений: 164
Re: Выпадающий список и База Данных
Что-то не работает(((. вот что у меня получилось:
echo ‘ «;
echo ‘ ‘; // Необходимо поместить внутрь тега
Форум работает на PunBB , при поддержке Informer Technologies, Inc
Currently installed 7 official extensions . Copyright © 2003–2009 PunBB.
Формы
Получение и обработка данных, введенных пользователем, стали неотъемлемой частью большинства успешных web-сайтов. Бесспорно, возможности накопления статистики, проведения опросов, хранения персональных настроек и поиска выводят Web на принципиально новый уровень — без них эта среда обладала бы минимальной интерактивностью.
Ввод информации в основном реализуется с применением форм HTML. Несомненно, вы хорошо знакомы с принципами работы форм HTML. Как правило, пользователь заполняет в форме одно или несколько полей (например, имя и адрес электронной почты), нажимает кнопку отправки данных, после чего получает ответное сообщение.
Возможно, вы полагаете, что сбор пользовательских данных в формах HTML — процесс сложный и утомительный. В действительности эта задача решается на удивление просто.
Общие сведения о формах
При вводе данных в форму используются различные управляющие элементы. В одних элементах пользователь вводит информацию с клавиатуры, в других он выбирает нужный вариант, щелкая кнопкой мыши. В формах могут присутствовать скрытые поля, которые поддерживаются самой формой; содержимое скрытых полей не должно изменяться пользователем.
Одна страница может содержать несколько форм, поэтому необходимы средства, которые позволяли бы отличить одну форму от другой. Более того, вы должны как-то сообщить форме, куда следует перейти, когда пользователь выполняет действие с формой (как правило, нажимает кнопку отправки данных). Обе задачи решаются заключением форм в следующие теги HTML:
Как видно из приведенного фрагмента, в тегах форм указываются два важных элемента: действие и метод. Действие указывает, какой сценарий должен обрабатывать форму, а метод определяет способ передачи данных этому сценарию. Существует два метода:
- Метод get передает все данные формы в конце URL. Из-за различных ограничений, связанных со спецификой языков и длиной данных, этот метод применяется редко.
- Метод post передает все данные формы в теле запроса. Этот метод используется чаще, чем get.
В этой главе приведена лишь очень краткая вводная информация по основному синтаксису форм HTML. Более полную информацию можно найти в книге А. Хоумера и К. Улмена «Dynamic HTML. Справочник» (СПб.: Питер, 1999).
Элементы форм, ориентированные на ввод с клавиатуры
Наше знакомство с построением форм начнется с элементов, ориентированных на ввод с клавиатуры. Таких элементов всего два — текстовое поле (text box) и текстовая область (text area).
Текстовое поле
В текстовых полях обычно вводится короткая текстовая информация — скажем, адрес электронной почты, почтовый адрес или имя. Синтаксис определения текстового поля:
Определение текстового поля включает пять атрибутов:
- type — тип элемента (для текстовых полей — text);
- name — имя переменной, в которой сохраняются введенные данные;
- size — общий размер текстового поля в браузере;
- maxlength — максимальное количество символов, вводимых в текстовом поле;
- value — значение, отображаемое в текстовом поле по умолчанию.
Текстовое поле изображено на рис. 10.1.
Рис. 10.1. Текстовое поле.
Особой разновидностью текстовых полей является поле для ввода паролей. Оно работает точно так же, как обычное текстовое поле, однако вводимые символы заменяются звездочками. Чтобы создать в форме поле для ввода паролей, достаточно указать type=»password» вместо type=»text».
Текстовая область
Текстовая область (text area) используется для ввода несколько больших объемов текста, не ограничивающихся простым именем или адресом электронной почты. Синтаксис определения текстовой области:
Определение текстового поля включает три атрибута:
- name — имя переменной, в которой сохраняются введенные данные;
- rows — количество строк в текстовой области;
- cols — количество столбцов в текстовой области.
Текстовая область изображена на рис. 10.2.
Рис. 10.2. Текстовая область.
Элементы форм, ориентированные на ввод с мыши
В других элементах форм пользователь выбирает один из заранее определенных вариантов при помощи мыши. Я ограничусь описанием флажков, переключателей и раскрывающихся списков.
Флажок
Флажки (checkboxes) используются в ситуациях, когда пользователь выбирает один или несколько вариантов из готового набора — по аналогии с тем, как ставятся «галочки» в анкетах. Синтаксис определения флажка:
Определение флажка включает три атрибута:
- type — тип элемента (для флажков — checkbox);
- name — имя переменной, в которой сохраняются введенные данные (в данном случае — состояние элемента);
- value — значение, присваиваемое переменной по умолчанию. Если флажок установлен, именно это значение будет присвоено переменной с указанным именем. Если флажок не установлен, значение атрибута value не используется.
Флажок изображен на рис. 10.3.
Переключатель
Переключатель (radio button) представляет собой разновидность флажка; он работает практически так же за одним исключением — в любой момент времени в группе может быть установлен лишь один переключатель. Синтаксис определения переключателя:
Как видите, синтаксис почти не отличается от определения флажка. Определение переключателя поля включает три атрибута:
- type — тип элемента (для переключателей — radio);
- name — имя переменной, в которой сохраняются введенные данные (в данном случае — состояние элемента);
- value — значение, присваиваемое переменной по умолчанию. Если флажок установлен, именно это значение будет присвоено переменной с указанным именем. Если переключатель не включен, значение атрибута value не используется.
Переключатель изображен на рис. 10.4.
Рис. 10.4. Переключатель.
Раскрывающийся список
Раскрывающиеся списки особенно удобны в ситуации, когда у вас имеется длинный перечень допустимых вариантов, из которого пользователь должен выбрать один вариант. Как правило, раскрывающиеся списки применяются при работе с относительно большими наборами данных — например, при перечислении американских штатов или стран. Синтаксис определения раскрывающегося списка:
Определение раскрывающегося списка поля включает два атрибута:
- name — имя переменной, в которой сохраняются введенные данные (в данном случае — строка, выбранная в списке);
- value — значение переменной, которое соответствует выбранной строке.
Раскрывающийся список изображен на рис. 10.5.
Рис. 10.5. Раскрывающийся список.
Скрытые поля
Скрытые поля не отображаются в браузере и обычно используются для передачи данных между сценариями. Хотя передача в скрытых полях работает вполне нормально, в РНР существует другое, более удобное средство — сеансовые переменные (см. главу 13). Впрочем, скрытые поля также используются в некоторых ситуациях и потому заслуживают упоминания.
Синтаксис определения скрытого поля практически идентичен синтаксису текстовых полей, отличается только атрибут типа. Поскольку скрытые поля не отображаются в браузере, привести пример на страницах книги невозможно. Синтаксис определения скрытого поля:
Определение скрытого поля включает три атрибута:
- type — тип элемента (для скрытых полей — hidden);
- name — имя переменной, в которой сохраняются скрытые данные;
- value — значение, по умолчанию сохраняемое в скрытом поле.
Вообще говоря, название этого элемента — скрытое поле — несколько неточно. Хотя скрытые поля не отображаются в браузерах, пользователь может просто выполнить команду View Source и увидеть, какие скрытые значения хранятся в форме.
Кнопка отправки данных
Кнопка отправки данных инициирует действие, заданное атрибутом action тега
Внешний вид формы в браузере изображен на рис. 10.7.
Рис. 10.7. Пример формы для ввода данных.
Вроде бы все понятно. Возникает вопрос — как получить данные, введенные пользователем, и сделать с ними что-нибудь полезное? Этой теме посвящен следующий раздел, «Формы и РНР».
Не забывайте: все сказанное ранее — не более чем вводный курс. Приведенная информация ни в коем случае не исчерпывает всех возможностей, предоставляемых различными компонентами форм. За дополнительной информацией обращайтесь к многочисленным учебникам по работе с формами, опубликованным в Web, а также книгам по HTML.
От предварительного знакомства с формами HTML мы переходим к самому интересному — применению РНР для обработки данных, введенных пользователем в форме.
Формы и PHP
Обработка данных в формах имеет много общего с обработкой переменных, передаваемых в URL, — эта тема подробно рассматривалась в предыдущей главе.
Вводные примеры
Следующие практические примеры помогут вам быстрее освоить различные аспекты обработки форм в РНР. В этих примерах продемонстрированы разные подходы к реализации интерактивных возможностей на сайте.
Пример 1: передача данных формы из одного сценария в другой
В первом примере представлена характерная ситуация — когда пользовательские данные вводятся на одной странице и отображаются на другой. В листинге 10.2 приведен код формы для ввода имени пользователя и адреса электронной почты. Когда пользователь щелкает на кнопке отправки данных (кнопка Go!), форма обращается к странице, приведенной в листинге 10.3. В свою очередь, листинг 10.3 выводит переменные $name и $mail, переданные с запросом.