Основы работы в Dreamweaver


Создание динамически наполняемого списка


Как известно из урока 7, после заполнения формы на странице tourprice.asp серверу пересылаются три значения: число взрослых и детей, а также виртуальная стоимость турпоездки. После этого сценарий ASP, ColdFusion или PHP перемножает ее на количество взрослых и детей, а затем складывает полученные значения и помещает итоговую сумму в HTML-код.

Для замены умозрительных значений реальными потребуется кое-что сделать. Для начала следует заполнить раскрывающийся список формы реальными данными. Как известно, раскрывающийся список может пересылать только одно значение, в то время как требуется два: стоимость турпоездки для взрослых и для детей. Таким образом, вместо стоимости будет отправляться уникальный идентификатор путешествия. На странице tourprice_processor.asp по этому идентификатору формируется запрос на получение стоимости тура для взрослых и для детей, после чего он направляется в базу данных. На основе полученных данных рассчитывается итоговая стоимость, которая и выводится на странице.

Теперь следует более детально рассмотреть раскрывающийся список формы. Очевидно, что каждая опция в списке должна иметь два атрибута: надпись (label) (предназначена для просмотра посетителями и не пересылаемая после заполнения формы) и данные (data) (информация, которая пересылается в виде значения переменной формы). Несложно догадаться, что надпись должна включать название тура. Поскольку в базе данных названиям туров выделено отдельное поле, с их извлечением проблем не возникнет. В качестве пересылаемого значения, как говорилось ранее, должен выступать уникальный идентификатор путешествия. В данном случае это будет первичный ключ таблицы tbl_tours. Из предыдущего урока известно, что почти каждая таблица в базе данных содержит поле для первичного ключа, в каждой строке которого содержится уникальное значение (как правило, оно автоматически увеличивается на единицу при добавлении новой строки). Итак, в качестве названия для опции списка должно быть название тура, а в качестве данных – первич ный ключ tourID. Оба значения содержатся в таблице tbl_tours.

  1. Откройте страницу tourprice.asp. На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+") и выберите в списке пункт Recordset (Query) (Набор записей [Запрос]).


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



  2. В поле Name (Имя) диалогового окна Recordset (Набор записей) введите имя "rs_tourprices". В раскрывающемся списке Connection (Соединение) выберите опцию conn_newland, а в списке Table (Таблица) – опцию tbl_tours. В разделе Columns (Столбцы) активируйте переключатель Selected (Выделенные), а затем, удерживая нажатой клавишу (Ctrl) (Windows) или (Control) (Macintosh), выделите пункты tourID и tourName.

    Примечание. Пользователям ColdFusion в поле со списком Connection (Соединение) следует выбрать вариант newland. Для подключения к базе данных ColdFusion не использует файл соединения conn_newland, подобно ASP или PHP. Другими словами, в то время как ASP и PHP для соединения с DSN newland сначала ссылаются на файл conn_newland.asp/php, ColdFusion подключается напрямую к DSN.

    Теперь в диалоговом окне указана большая часть информации, необходимая для заполнения списка. После подтверждения выполненных настроек будет сгенерирован сценарий, по которому через соединение conn_newland производится поиск нужной базы данных, в которой отыскивается таблица tbl_tours. Из нее извлекаются все значения, содержащиеся в полях tourID и tourName, и записываются в набор записей rs_newland. Значения tourName будут использоваться в качестве надписей к элементам соответствующего списка, а значения tourID — в качестве данных.



  3. В списке Sort (Сортировать) выберите пункт tourName, а в списке справа, — пункт Ascending (По возрастанию).

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



  4. Нажмите кнопку Test (Проверить).

    При нажатии отобразится содержимое набора записей в указанном порядке. При создании запросов нередко возникает необходимость проверить их на практике. На рисунке показано, что созданный запрос извлекает все 19 поездок и располагает их в алфавитном порядке (в поле tourName).


    увеличить изображение






увеличить изображение

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

    Внешний вид документа не изменится, но в коде появится новый фрагмент, содержащий сценарий для создания запроса. Он находится в верхней части документа. В дальнейшем этот сценарий будет рассмотрен более подробно. На рисунке приведен код для ASP. При использовании ColdFusion код будет более понятным и компактным.




    увеличить изображение

  2. В режиме Design (Дизайн) щелкните в форме на списке, чтобы выделить его. После этого на панели Property Inspector (Инспектор свойств) щелкните на кнопке List Values (Значения списка). Откроется диалоговое окно одноименного списка List Values. Поочередно выделите каждый элемент и нажмите кнопку Remove Value (Удалить значение) ("-").

    В итоге, диалоговое окно не должно содержать элементов.

    Виртуальные данные для тестирования работы калькулятора были добавлены в список в уроке 7. На этом шаге выдуманные значения будут удалены. На их место будут помещены реальные данные, содержащиеся в наборе записей rs_tourprices.



  3. Не снимая выделения со списка, на панели Property Inspector (Инспектор свойств) нажмите кнопку Dynamic (Динамический).

    В результате, будет открыто диалоговое окно Dynamic List/Menu (Динамический список/меню), в котором к списку формы будут прикреплены динамические данные.

  4. В раскрывающемся списке Options from recordset (Опции из набора записей) выберите пункт rs_tourprices. В списке Values (Значения) укажите пункт tourID, а в списке Labels (Надписи) – пункт tourName. Нажмите OK.

    На страницу будет добавлен код, формирующий элементы меню. Важно заметить, что полученный сценарий ASP, ColdFusion или PHP поочередно перебирает все значения, извлеченные из базы данных. Другими словами, подобно тому, как в уроке 7 для каждого элемента требовалось задавать поочередно надпись и значение, так и сценарий за один прием загружает в список одну из 19 пар "надпись-значение". С помощью обычной циклической структуры сценарий ASP, ColdFusion или PHP проходит через каждую пару tourName-tourID в наборе записей и добавляет ее к элементу списка.



    Описанная выше процедура не требует вводить вручную 19 пар надписей и значений, что существенно ускоряет процесс разработки. Кроме того, при внесении изменений в базу данных они сразу же отобразятся и в списке. Это значит, что поддержка веб-страницы будет осуществляться автоматически – достаточно заниматься базой.



  5. Сохраните страницу, загрузите ее на сервер и протестируйте.

    Если раскрыть список, то отобразятся 19 поездок, отсортированных по алфавиту в порядке возрастания.

  6. Пользователям PHP. Если при тестировании страницы появляется сообщение об ошибке "undefined index" ("неопределенный индекс") (cм. рис.), следует исправить код, как показано ниже.


    увеличить изображение

    Теперь попробуйте найти на странице tourprice.php следующий участок кода:

    <?php if ($_GET['error'] == "notnumeric") { echo "<p class=\"error\">*** Error! One or more fields was left blank or contained a non-numeric character.</p>"; } ?>

    Замените его на указанный код:

    <?php if (isset($_GET['error'])) { if ($_GET['error'] == "notnumeric") { echo "<p class=\"error\">*** Error! One or more fields was left blank or contained a non-numeric character.</p>"; } } ?>

    Эта ошибка появляется только в некоторых реализациях PHP. Ее причина заключается в том, что проверка переменной ($_GET['error']) на соответствие определенному значению notnumeric выполняется без первоначального контроля существования переменной.

    Решение заключается в применении структуры вложенных условных операторов if. Внешнее условие проверяет, существует ли в запросе переменная error. Если существует, то производится проверка равенства переменной значению notnumeric. Но если переменной error в запросе нет, выполнение операции прекращается, что позволяет не учитывать источник возникновения проблемы.


    увеличить изображение

  7. Заполните форму и подтвердите корректность выполнения этой процедуры.

    Загрузится страница tourprice_processor.asp с учетом введенных сведений и рассчитанных на их основе данных. Причем стоимость поездки будет неожиданно низкой. Причина заключается в том, что при расчете стоимости тура используются значения в поле tourID, каждое из которых меньше 20.


    увеличить изображение




Содержание    Вперед