Регистрация статичного сайта

Форматирование страницы контактов

В этом упражнении разрывы строк в тексте будут преобразованы в абзацы. Помимо этого, будут использованы некоторые инструменты Dreamweaver для разметки веб-документов. В первую очередь, разобьем содержимое веб-документов по абзацам.
  • В режиме Design (Дизайн) поместите курсор между надписями Contact a Newland Tours Agent (Установите связь с агентом Newland Tours) и If you are interested (Если вы заинтересованы), трижды нажмите клавишу (Del), чтобы удалить разрывы строк , а затем – (Enter) (Windows) или (Return) (Macintosh).
    Dreamweaver разделит текст на два абзаца и поместит каждый из них между тегами и
    .
    Форматирование страницы контактов
    увеличить изображение

  • Повторите шаг 1, чтобы вставить разрыв абзаца перед каждым из следующих слов: By Mail, Newland Tours, 123 Wharton, New York, By Email, info@newlandtours.com, (555) и Image.
    По завершении этого шага содержимое основной области окна будет разбито на десять абзацев. Может быть, пока текст выглядит не слишком эффектно, но, по крайней мере, он уже определенным образом отформатирован.
    Форматирование страницы контактов
    увеличить изображение

  • В режиме Design (Дизайн) поместите курсор внутри первого абзаца Contact a Newland Tours Agent (Установите контакт с агентом Newland Tours). В меню Format (Формат) на панели Inspector Property (Инспектор свойств) выберите пункт Heading 1 (Заголовок 1).
    Заголовок страницы примет соответствующий внешний вид. В режиме Code (Код) тег для этого абзаца окажется заменен на тег

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

  • В режиме Code (Код) между открывающим тегом

    и словом Contact введите
    , чтобы создать разрыв строки.
    Чтобы увидеть результаты разметки в режиме Design (Дизайн), следует щелкнуть в соответствующей области окна документа.
    Форматирование страницы контактов

  • В режиме Design (Дизайн) поместите курсор перед текстом If you are interested (Если вы заинтересованы) и щелкните на кнопке Images (Изображения) в категории Common (Общий) на панели Insert (Вставка).

    В результате, изображения встроены в веб-документ вместе с HTML-кодом и текстом, – так что следует аккуратно выбирать место для вставки изображения.

    Следует обратить внимание, что справа от кнопки Images есть маленькая треугольная стрелка, с помощью которой можно раскрыть раскрывающийся список. При щелчке на стрелке обнаружится множество других связанных с изображениями элементов, которые можно вставить из этого списка, включая заполнители изображений, интерактивные и переключающиеся изображения, так называемые активные точки (hotsports), предназначенные для активации функций или объектов и т. д. В книге эти элементы использоваться не будут, но важно знать об их существовании. Остальные кнопки на панели Insert (Вставка) скрывают сходные команды.

    Форматирование страницы контактов

  • В диалоговом окне Select Image Source (Выбор источника изображений) выберите файл fountain_versailles.jpg, расположенный в папке сайта images. Нажмите OK.

    Помимо того, что это диалоговое окно позволяет выбрать изображение, так, чтобы Dreamweaver мог сгенерировать к нему корректный путь от страницы contact.htm, оно содержит несколько других возможностей и настроек. К ним относятся предварительный просмотр изображений, информация об объеме и размерах изображения, а также опции, позволяющие выбрать тип ссылки: относительно документа или корня сайта (по умолчанию выбран тип, задаваемый относительно документа, который и нужен в данный момент).

    В верхней части диалогового окна есть опция Select File Name From (Выберите имя файла из). Для нее существует два варианта выбора: File system (Файловая система) (указание файла, расположенного на компьютере) или Data sources (Источники данных) (динамический запрос адреса из базы данных). В книге будут задействованы оба варианта. На этом шаге нужно выбрать вариант File system.

    Форматирование страницы контактов

  • Не снимая выделения с добавленного на веб-страницу изображения, на панели инспектора свойств измените тип выравнивания для изображения в меню Align (Выравнивание) на Left (По левому краю).

    По умолчанию страница обычно выравнивается по левому краю одной строки текста, в то время как остальной текст располагается ниже изображения. В результате, на странице остается много свободного места. Если выбран вариант Left (По левому краю) (или, наоборот, Right [По правому краю]), то будет происходить обтекание текстом изображения.

    Форматирование страницы контактов
    увеличить изображение




  • Форматирование страницы контактов
    увеличить изображение

  • Поместите курсор перед словами By Mail (Почтой) и нажмите кнопку Table (Таблица) на панели Insert (Вставка).

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

    Форматирование страницы контактов

  • В диалоговом окне Insert Table (Вставка таблицы) задайте две строки, 2 столбца, установите ширину таблицы (Table width) равной 400 пикселам, толщину границы, равной 1. Укажите расстояние между границами ячеек и их содержимым (Cell padding) равным 3, а расстояние между ячейками (Cell spacing) – 0. В текстовом поле Summary (Итоги) раздела Accessibility (Доступность) введите контактную информацию для связи с Newland Tours. Нажмите OK.

    В результате, появится таблица, состоящая из 4 ячеек шириной 400 пикселов. Итак, параметр Cell padding указывает на расстояние между границей ячейки и ее содержимым, а параметр Cell spacing – на расстояние между ячейками. При вводе информации в текстовое поле Summary (Итоги), Dreamweaver добавит к тегу атрибут summary, который позволяет синтезаторам речи дать людям с ослабленным зрением краткую справку о содержимом таблицы.

    Форматирование страницы контактов

  • Трижды щелкните на словах By Mail (Почтой), чтобы выделить весь абзац (состоящий из этих двух слов). Перетащите выделенный абзац в верхнюю левую ячейку таблицы. Таким же образом трижды щелкните, чтобы выделить слова By Email or Phone (По электронной почте или по телефону), а затем перетащите их в верхнюю правую ячейку. Выделите и переместите три абзаца с почтовым адресом в нижнюю левую ячейку, а электронный адрес и телефон в – нижнюю правую ячейку.

    Dreamweaver переместит оба текстовых блока и все окружающие их теги в соответствующие ячейки.

    Следует обратить внимание, что между строками адреса телефона и электронного адреса много свободного места.


    Форматирование страницы контактов
    увеличить изображение

  • Поместите курсор перед словами "123 Wharton Street", и нажмите клавишу (Backspace) (Windows) или (Del) (Macintosh), чтобы удалить разрыв абзаца, отделяющий слова "123 Wharton Street" от "Newland Tours", – они должны находиться в одной строке. Оставьте курсор в месте объединения строк и, удерживая нажатой клавишу (Shift), нажмите (Enter) (Windows) или (Return) (Macintosh).

    В то время как нажатие (Enter) или (Return) приводит к возникновению нового абзаца (), нажатие (Shift)+(Enter)/(Return) приводит к вставке символа разрыва строки (
    ).

    Форматирование страницы контактов
    увеличить изображение

  • Повторите шаг 11, чтобы удалить лишние пробелы между строками с названиями улицы, города и штата, а также почтовым индексом в левой ячейке. После этого таким же способом удалите пустое пространство между строками с указанием телефона и адреса электронной почты в правой ячейке.

    Создание таблицы завершено. Осталось удалить лишние пробелы под таблицей (если это нужно) и отформатировать заголовок с помощью курсивного начертания.

    Форматирование страницы контактов
    увеличить изображение

  • Поместите курсор перед словами "Image: This photo…" ("Изображение: эта фотография…") и нажмите (Backspace) (Windows) или (Delete) (Macintosh) нужное количество раз до тех пор, пока подпись к изображению не окажется точно под таблицей.

    После удаления исходных абзацев с адресом и перемещения их внутрь таблицы осталось свободное место. В коде эти пустые области получены при помощи блоков  
    . Таким образом Dream-weaver создает пустые абзацы. Однако вспомним, что в HTML запрещено создавать открывающие и закрывающие теги
    , не помещая ничего между ними. Поэтому Dreamweaver использует символ неразрывного пробела в качестве заполнителя абзаца. Так как HTML игнорирует пустые пространства в коде, то в качестве символа пробела применяется символьный объект  , который обозначает неразрывный пробел.

    Форматирование страницы контактов
    увеличить изображение

  • Трижды щелкните в любом месте подписи, чтобы выделить ее. Затем на панели Property Inspector (Инспектор свойств) выделите ее курсивом.

    Форматирование страницы контактов
    увеличить изображение

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

  • Сохраните contact.htm.

    Итак, создание новой страницы закончено. Теперь желательно опубликовать страницу на веб-сервере, но в данный момент не следует об этом беспокоиться. Проблема с отсутствующей страницей контактов решена, теперь можно обратить внимание на более претенциозную задачу по изменению сайта.



  • Содержание Назад Вперед

    Оценка сайта: бизнес-процессы

    Многие заказчики не подозревают, насколько код их сайта соответствует действующим стандартам, и маловероятно получение большого количества заказов, в которых клиент готов оплатить модернизацию кода от HTML 4.0 до XHTML. В действительности, большинство работ по модернизации сайтов происходит, поскольку текущий сайт больше не соответствует запросам его владельца. Наиболее типичные примеры такого рассогласования устаревших сайтов и потребностями заказчиков могут быть следующими:
  • навигация слишком запутанна, посетители сайта не могут достаточно быстро найти то, что ищут;
  • oбновление сайта оказывается очень сложным процессом. Многие небольшие компании не имеют крупных технических отделов, которые могут модифицировать сайты. У владельца небольшой компании может возникнуть необходимость обновить сайт, но недостаток знаний и соответствующих средств помешают ему сделать это. Возможности сайта начинают отставать от бизнеса, или бизнес тратит непропорционально много денег на заработную плату специалистов, занимающихся поддержкой сайта;
  • внешний вид сайта устарел. Дизайн, как и мода в целом, проходит определенные циклы, и то, что было авангардным несколько лет назад, может стать тривиальным сегодня. Несовременное оформление сайта (своего рода дресс-код) формирует неправильное сообщение для целевой бизнес-аудитории;
  • работники, занятые в бизнес-сфере, хотели бы в максимальной степени использовать возможности сети. Многие клиенты желают, чтобы на их сайтах присутствовала исчерпывающая информация для посетителей, чтобы уменьшить количество входящих телефонных звонков. Например, многие компании создают сетевые базы знаний, чтобы уменьшить количество звонков в службы технической поддержки, в то время как другие предлагают на сайте выполнить онлайновый расчет цен и дают возможность совершить покупку, чтобы снизить число звонков для заказов, или предоставить круглосуточный сервис без найма работников в ночную смену.
  • В деловой сфере регулярно меняются и пересматриваются бизнес-планы. Если бизнес предлагает новый класс товаров или услуг, веб-сайт должен отображать это. В таких случаях косметическое добавление одного-двух абзацев на существующую страницу явно недостаточно. Необходимо добавить много новых страниц, создать новую карту сайта, систему навигации и т. д.


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

    Следует выделить отдельное время, чтобы получить эту информацию от клиента. Некоторые клиенты не затрудняют себя формулировкой тех позиций, которые они желают достичь в бизнесе с помощью собственного веб-узла. Если не побудить их дать более конкретные рекомендации, сайт в итоге может оказаться несоответствующим их ожиданиям. Не следует на данном этапе ожидать от них адекватной самокритики, позволяющей им объективно оценить свою роль в создании будущей модели сайта, – вся ответственность за успешную реализацию веб-приложения перекладывается на разработчика.

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

  • Продолжая просматривать страницу index.htm, нажмите клавишу (F12), чтобы загрузить сайт в браузере.

    Клавиша (F12) автоматически открывает активный файл в браузере. То, что отображается в браузере, часто отличается от того, что отображается в Dreamweaver, особенно при работе над динамическим содержимым, которое нужно регулярно тестировать. Клавиша (F12) – одна из наиболее часто используемых клавиш в Dreamweaver.

  • Обратите внимание на основную домашнюю страницу.


    Оценка сайта: бизнес-процессы
    увеличить изображение

    С точки зрения оформления, дизайн сайта выполнен неплохо. Клиент не намерен изменять его. Частично такой дизайн применяется для некоторых видов печатной продукции, так что клиент планирует усилить этот бренд.

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

    Помимо дизайна, на странице существует и другая, довольно значимая проблема. Колонка под названием "Traveler’s Journal" должна обновляться примерно раз в неделю. Иногда обновление этой колонки проводит владелец бизнеса, но чаще это делают агенты по туризму. Не каждый знает, как работать с кодом и загружать файлы на сайт. Кроме того, владелец не желает выдавать пароль для доступа к сайту, позволяющий другим загружать новые страницы на сайт. На данный момент журнал набран в текстовом процессоре и передан одному из агентов по туризму, который знает, как исправлять и загружать на сайт страницы. Но поскольку весь процесс по модификации контента сайта привязан к одному человеку, это не позволяет производить актуализацию содержимого сайта по мере поступления новых данных, особенно, когда агент занят или отсутствует в офисе. Поэтому следует найти для заказчика достаточно простой способ производить регулярное, в частности, еженедельное обновление колонки "Traveler’s Journal" любым работником компании и не в ущерб безопасности сайта.

  • На панели навигации, расположенной на левой стороне экрана, щелкните на ссылке About Newland Tours.

    Кроме мелких проблем со шрифтом, о которых шла речь выше, страница не нуждается в изменениях. Ее содержимое почти никогда не менялось, и клиента она устраивает в ее нынешнем виде. Не считая модернизации кода до XHTML (то есть изменений, которые не будут заметны в большинстве браузеров), это одна из тех страниц, которые не нужно менять.


    Оценка сайта: бизнес-процессы
    увеличить изображение

  • На панели навигации, находящейся вверху экрана, щелкните на ссылке Find Tours. Прокрутите страницу вверх и вниз, или используйте внутренние навигационные ссылки вверху страницы, чтобы ознакомиться с предлагаемыми турами.

    На этой странице можно отыскать множество проблем различного плана.

    Оценка сайта: бизнес-процессы
    увеличить изображение

    Следует начать с проблем, с которыми заказчик сталкивается на страницах, подобных этой. Эту страницу тоже сложно поддерживать, поскольку в Newland Tours нет технического отдела. С точки зрения клиента, это довольно серьезная проблема, поскольку содержимое страницы является основным источником информации о путешествиях, которая доступна пользователям. Проблема бизнеса, с которой сталкивается клиент, заключается в том, что информация о путешествиях меняется, – что-то добавляется, а что-то удаляется. Что еще хуже, цены меняются настолько стремительно, что клиент решил не размещать их на сайте, из-за трудностей поддержания актуальных цен и из-за последствий, связанных с этим. Помимо этого, Newland Tours предоставляет несколько больше путешествий, чем перечислено на странице, но никто не имеет возможности добавить недостающие. Это значит, что заказчик теряет деньги – из-за сложностей при поддержании веб-сайта.

    С точки зрения пользователя, навигация по сайту не очень удобна. Страница чересчур длинная, и на ней довольно затруднительно найти нужные путешествия. Нет удобного способа для их выбора, кроме перехода по ссылке к тому или иному региону. Например, Newland Tours предлагает некоторые путешествия с интенсивной туристической программой, а некоторые – без нее, но у пользователей нет возможности просмотреть только те, которые предлагают туристическую программу. И, конечно, тот факт, что на странице не указаны цены, не дает потенциальным покупателям возможности узнать о фактической стоимости услуг, пока они не позвонят по телефону.

    Разработчикам следует обратить внимание на то, что большая часть данных на странице имеет избыточную структуру. Для каждого путешествия есть свое изображение, свой заголовок, свое описание и т. д. Такая предсказуемая структура приводит к мысли, что гораздо лучше хранить информацию в базе данных и извлекать ее из базы при загрузке страницы. Это упростит процесс по поддержанию работы сайта и создаст возможность ускоренного отбора нужных данных и, в результате, работа с сайтом будет более эффективной и удобной.


  • На панели навигации, расположенной вверху страницы, щелкните на ссылке Country Profiles.

    Оценка сайта: бизнес-процессы
    увеличить изображение

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

    Проблема для пользователей остается неразрешенной. Некоторые пользователи хотят ознакомиться с информацией обо всех странах, которые предлагает Newland Tours; а затем они более подробно просматривают интересующие их разделы. И вновь простой механизм отбора и фильтрации нужных сведений существенно повысит эффективность работы с сайтом.

    Другая проблема, связанная с удобным использованием сайта, состоит в том, что для перемещения от раздела с описанием поездки по национальному парку в Etosha National Park в Намибии к разделу с информацией о путешествиям по Намибии (Namibia) пользователь должен вернуться к самому началу страницы, а потом щелкнуть на ссылке Country Profiles, и прокрутить весь список стран вниз до Намибии. Было бы замечательно создать ссылку в разделе Etosha National Park на раздел с информацией о стране Namibia. Но для этого требуется дополнительный код на статичном HTML.

  • Вернитесь к панели навигации и щелкните на ссылке Contact an Agent.


  • Это файл, разработанный прежде в этом уроке взамен утраченной версии (см. рис. вверху следующей страницы).

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

    Другая проблема заключается в том, что у клиентов Newland Tours нет автоматически настроенных почтовых клиентов или они четко не представляют себе их работу.

    Заказчик хотел бы предоставить посетителям Newland Tours возможность связаться с компанией вне зависимости от настроек почтового клиента. Помимо этого, заказчик стремится найти способ помешать спамерам заполнять почтовые ящики ненужными сообщениями.

    Оценка сайта: бизнес-процессы
    увеличить изображение

    Решение, конечно же, заключается в использовании веб-формы. Форма является идеальным вариантом, поскольку она требует от пользователя минимального числа операций и дает возможность скрыть электронный адрес, что помешает спам-роботам (автоматическим программам, которые сканируют сеть, собирая электронные адреса для спамеров) найти электронные адреса сотрудников Newland Tours. Формы также дают возможность отправлять электронный адрес на различные адреса в зависимости от содержимого формы. В частности, если форма позволяет пользователю выбрать конкретный регион, можно создать сценарий, который отправляет данные формы только тому агенту, который занимается этим регионом. Мы лишь артикулировали основные проблемы, так как их решение не является целью данной книги. Тем не менее, после прочтения всей книги у вас будет достаточно знаний и средств, чтобы сделать это.

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

    Оценка сайта: код

    В этом упражнении файлы останутся без изменений, однако настроим среду Dreamweaver таким образом, чтобы она стала более дружественной и удобной в работе. После этого изучим код главной страницы для выявления возможных дефектов.
    При просмотре страницы в браузере эти дефекты совсем незаметны, то есть страницу легко будет просматривать в большинстве популярных веб-браузеров. В этом случае возникает вопрос о том, как может код такой страницы иметь какие-то недостатки?
    Ответ в том, что исходный код, используемый на сайте, устарел и не соответствует действующим стандартам. Оценка значимости кода и стандартов будет проведена в конце этого упражнения.
    Проект по модификации сайтов часто начинается с устаревшего и не соответствующего стандартам кода, поэтому следует зафиксировать эти моменты. Позже будет показано, как его исправить.
  • Дважды щелкните на файле index.htm, чтобы открыть его.
    В зависимости от того, выполнялось ли упражнение по созданию страницы контактов, документ будет отображаться либо в режиме Design (Дизайн) (если упражнение не выполнялось), либо в режиме Split (Режим разделения) (если упражнение выполнялось).
    Прежде, в конце 1990-х, когда рынок HTML-редакторов был переполнен редакторами, которые превосходно работали в режиме Code (Код), но плохо в режиме Design (Дизайн), появление Dreamweaver, отлично работающего в обоих режимах, привело к кардинальным переменам. Сейчас, годы спустя, Dreamweaver остается единственным подходящим редактором в тех случаях, когда требуется использовать оба указанных режима. Многие дизайнеры, знающие, что Dreamweaver генерирует корректный HTML-код самостоятельно, ограничивались созданием сайтов в режиме Design (Дизайн) и никогда не беспокоились о коде.
    Но роскошь работы только в режиме Design (Дизайн) осталась в прошлом.
    При серьезном подходе к разработке веб-приложений и при необходимости создания веб-содержимого, управляемого базами данных, требуется умело работать непосредственно с кодом. Более того, если нужно обновить HTML-код до соответствующего стандартам XHTML-кода, следует "закатать рукава" и вручную выполнить ряд операций с кодом.
  • Если необходимо, щелкните на кнопке Split (Режим разделения).

    Комбинированный режим Split ( Режим разделения) является наилучшим вариантом, который позволяет применить средства обоих режимов Design (Дизайн) и Code (Код). При желании с его помощью можно вручную редактировать код, даже если действует режим дизайна, в котором удобнее производить некоторые виды правки, например, модификацию текста, расположенного в теле документа.

    Оценка сайта: код
    увеличить изображение

    Комбинированный режим Split необходим для работы с динамичными сайтами. Несмотря на то, что многие задачи Dreamweaver позволяет выполнять при помощи моделей поведения серверов, управляемых через визуальный интерфейс и встроенный визуальный SQL-построитель, все равно остается необходимость редактировать код вручную. Помимо этого, некоторые изменения намного быстрее вносить в режиме кода, чем в режиме дизайна. Другое преимущество заключается в том, что подобный способ позволяет довольно глубоко изучить код. Хотя в этой книге, безусловно, предусмотрено знакомство с HTML, некоторые детали, например, параметры того или иного тега, нередко забываются. Применение режима разделения Split помогает овладеть HTML. С этого момента (и для всех будущих проектов) следует сделать режим разделения режимом по умолчанию. Рекомендуется избегать использования режима кода или режима дизайна по отдельности, если только не будет особой причины сделать так. После того, как нужные действия будут выполнены, следует переключиться обратно в режим разделения.

    Все проблемы, о которых идет речь в последующих шагах этого упражнения, проявляются только в режиме Code (Код), а в режиме Design (Дизайн) их обнаружить невозможно. Таким образом, режим разделения доказывает свою состоятельность.

    Совет.Другое преимущество работы в режиме разделения заключается в том, что при щелчке на объекте в режиме дизайна, он позволяет с легкостью найти соответствующий фрагмент в режиме кода. Чтобы, скажем, увидеть код для изображения, следует щелкнуть на нем. Соответствующий HTML-код будет выделен в центре области режима кода. Особенно это полезно на страницах, состоящих из сотен строк кода.


  • При необходимости следует включить нумерацию строк в режиме Code (Код). Для этого следует выполнить команды View\Code View Options\Line Numbers (Вид\Параметры режима кода\Номера строк).

    Оценка сайта: код
    увеличить изображение

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

  • Определите, какая версия HTML используется в документе (перейдите к строке 1).

    В режиме дизайна это задание выполнить сложно, но разделенный режим позволяет сразу же увидеть, что код документа относится к версии HTML 4.01 transitional. Эта информация указана в объявлении, представленном в теге в строке 1. Этот тег сообщает веб-браузеру, какая версия HTML используется в документе, чтобы браузер мог отобразить страницу должным образом. Все корректно сформированные HTML-документы должны включать тег .

    Модификация Transitional стандарта HTML 4.01 теперь является устаревшей версией HTML. Она до сих пор поддерживается во всех распространенных браузерах. Но, поскольку эта версия HTML была заменена стандартом XHTML, последующие версии браузеров могут перестать поддерживать документы, подготовленные с помощью этой версии. В уроке 2 сайт будет обновлен до XHTML.

    Модернизация до XHTML, безусловно, приводит к более существенным изменениям, чем объявление типа документа с помощью тега . XHTML кардинально преобразует HTML, изменяя некоторые правила кодирования. Одно такое изменение, например, заключается в том, что все элементы должны быть закрытыми. В HTML 4 и более ранних версиях допускалось использование пустых элементов. К пустым элементам относятся те, которые не имеют закрывающих тегов или не содержат ничего между открывающим и закрывающим тегами. К пустым тегам относятся теги
    ,
    , и . В XHTML все теги должны быть закрыты. Для того, чтобы изменить пустые теги надлежащим образом, следует просто добавить перед закрывающей угловой скобкой пробел и косую черту (прямой слэш) (/), так что
    преобразуется в
    , а – в . В конце строки 32 расположен тег
    . Это один из сотен элементов на сайте, которые будут изменены позже.

  • Проверьте код на соответствие настройкам доступности (строки 11 и 12).


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

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

    Для того чтобы выполнить эту задачу, следует добавить параметр к каждому элементу изображения, которое возможно описать строкой текста. Необходимый атрибут – alt. Его следует добавить в каждый тег на странице в следующем виде: alt="Описание изображения". Так называемый экранный диктор зачитывает вслух содержимое атрибута alt, так что пользователь получит информацию об изображении.

    Оценка сайта: код
    увеличить изображение

    В строках 11 и 12 содержится код для двух изображений, расположенных в первой строке таблицы. На одном отображается название Newland Tours, а на втором присутствует три фотографии (берег, лес и мечеть). В этих картинках отсутствует атрибут alt и, следовательно, информация о них будет недоступна посетителям, пользующихся экранным диктором.

    Примечание. Применение атрибута alt для изображений – не единственный способ упрощения доступа к подобным объектам. Так, на некоторых сайтах для облегчения доступа вверху страницы добавляются комбинации клавиш, позволяющие пользователю проигнорировать кнопки на панели навигации и сразу перейти к содержимому страницы. Доступ к отдельным элементам страницы может быть существенно ограничен при злоупотреблении таблицами. Хотя, на самом деле, сами таблицы не влияют на возможности доступа, но их избыточное использование разбивает содержимое страницы. В результате, и у экранного диктора могут возникнуть затруднения при воспроизведении содержимого в логической последовательности.


    Важнейшая цель при разработке средств доступа заключается в том, чтобы все пользователи имели равный доступ ко всему содержимому сайта. Детальное обсуждение проблем, связанных с расширением возможностей доступа, лежит за пределами рассмотрения этой книги, но подробнее об этом можно узнать на сайте компании Macromedia по адресу: http://www.macromedia.com/macromedia/accessibility/.

  • Проверьте устаревший или отмененный HTML-код (строка 21).

    В строке 21 содержится следующий код:

    Explore the Site


  • Несмотря на то, что эта строка отображается должным образом, и в Dreamweaver, и в браузере, код, тем не менее, является устаревшим и достаточно проблемным.

    Как будет подробнее рассказано позже, одна из целей последних версий HTML заключалась в том, чтобы отделить HTML-разметку от дизайна сайта. Другими словами, HTML-разметка должна описывать структуру и содержимое документа, но не должна описывать, каким образом содержимое должно отображаться. По этой причине два тега, содержащиеся в строке кода, приведенной выше, считаются отмененными. Термин "отмененный" (deprecated) (не рекомендуемый) относится к способу или структуре кода, которые были изъяты из стандартов, но все еще (хотя и временно) поддерживаются.

    Тег , форматирующий текст с помощью полужирного начертания, является тегом, определяющим внешний вид. Для пользователей, пользующихся услугами экранного диктора, подобное форматирование бессмысленно. Иногда, выделяя что-то посредством полужирного начертания, мы пытаемся сообщить, что выделенные таким образом фрагменты являются наиболее важными по сравнению с остальным текстом. Однако в этом случае текст "Explore the Site" ("Изучите сайт") не представляет особого значения. Это просто заголовок раздела. Таким образом, применение тега позволяет выделить как ключевые фрагменты текста, так и отдельные элементы структуры (в частности, заголовки разных уровней).

    Другой не вполне корректный тег во фрагменте – это тег . Этот тег применялся в HTML 3 и более ранних версиях, чтобы разработчики могли определять, как должны выглядеть их документы. С тех пор он был заменен более мощными и эффективными каскадными таблицами стилей. Тег создает значительные проблемы для разработчиков, поскольку прикрепляется только к отдельным блокам текста. Например, чтобы при помощи тега определить внешний вид всех заголовков 2 уровня по всему сайту, следует добавить этот тег к каждому заголовку 2 уровня. Если допустить ошибку, сайт перестанет выглядеть однородным. Еще хуже дела будут обстоять при модификации сайта, когда нужно вручную изменить каждый экземпляр этого тега. Итак, поскольку применение тега приводит к возникновению проблем, все его экземпляры на сайте должны быть удалены.

    Подводя итоги, можно сказать, что код устарел и не соответствует современным стандартам. Он не относится к XHTML (как выяснилось в объявлении с использованием тега ). Пустые теги в нем не закрыты. Изображения не имеют атрибута alt. Код загружается вместе с тегами, определяющими оформление сайта, такими как и , которые следует заменить. Это не все затруднения, связанные с кодом, но их вполне достаточно для того, чтобы наглядно продемонстрировать пример того, с чем следует бороться.

    Может возникнуть и такой вопрос: "В браузере все выглядит замечательно, ну так зачем беспокоиться? Все это так трудно исправлять. Нельзя ли просто проигнорировать это и начать делать динамичный сайт?" На этот вопрос существует несколько ответов.

    То, что код хорошо отображается в браузерах Netscape и Internet Explorer сегодня, не означает, что он будет корректно выглядеть в будущем. Если код перестанет правильно отображаться в последующих версиях Internet Explorer, заказчик не будет удовлетворен сделанной работой.

    На самом деле, код отображается должным образом не во всех современных браузерах. Следует учитывать возможности пользователей, пользующихся экранным диктором, для которых восприятие изображений неосуществимо. Вдобавок, новые технологии, такие как XSLT (eXtensible Stylesheet Language Transformations), требуют для функционирования соответствия XHTML. Изучение XSLT не является задачей этой книги. Помимо этого, его также вряд ли необходимо применять при создании небольшого сайта, но он может широко использоваться в будущем. С того времени, как была опубликована первая редакция этой книги, на нескольких ведущих сайтах стали использоваться XHTML и XSLT.

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

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

    Регистрация статичного сайта

    Изначально статичный сайт Newland Tours построен на основе HTML-документов. По этой причине несложно открыть сайт в Dreamweaver и сразу начать с ним работу.
    При работе с веб-сайтами нередко используются сотни, а иногда и тысячи отдельных файлов, в том числе, веб-страницы, картинки, каскадные таблицы стилей, мультимедиа-элементы и т. д. Эти файлы объединяются при помощи HTML. К сожалению, даже незначительная опечатка способна вызвать непонятные для пользователей сообщения об ошибке или даже перекрыть доступ к некоторым разделам сайта. Dreamweaver предоставляет большое число эффективных инструментов для управления сайтом, обеспечивающих корректное объединение файлов сайта как во время разработки, так и после размещения в сети. Но для того, чтобы эти возможности вступили в силу, требуется зарегистрировать сайт и указать корневой каталог на жестком диске, где он находится.
    Регистрация сайта дает ряд преимуществ, многие из которых несложно заметить. Она помогает предотвращать появление нерабочих ссылок, автоматически обновлять на сайте все файлы, если тот или иной файл был перемещен или переименован. Панель Site Manager (Управление сайтом) позволяет проводить разнообразные операции с сайтами, такими как Find and Replace (Найти и заменить), которая приводит к заметному увеличению производительности. Другое ключевое преимущество панели Site Manager (Управление сайтом) заключается в том, что она содержит встроенные средства для загрузки файлов на сервер (в том числе и FTP), и это дает возможность размещать файлы в сети в любое время одним щелчком мыши. Существует даже возможность синхронизации локальных и удаленных файлов (расположенных соответственно на жестком диске и на промежуточном сервере [staging server]), чтобы убедиться, что последние версии файлов расположены в нужном месте.
    В этом упражнении в диалоговом окне Site Definition (Определение сайта) будет зарегистрирован постоянный статичный сайт. Этот процесс потребует немного больше усилий, чем присвоение сайту имени и указание его расположения на локальном диске. Через несколько уроков, после ряда необходимых приготовлений, в этом же диалоговом окне будет зарегистрирован динамичный сайт. Зарегистрировать динамичный сайт несколько сложнее, и на начальном этапе лишние сложности могут привести к негативному результату. К счастью, данные, заданные при регистрации сайта, никогда не поздно изменить. Поэтому регистрация статичного сайта и работа с ним не принесут никакого вреда
  • Создайте на жестком диске новую папку и назовите ее dw_dynapps.

    В ней будет храниться локальная версия сайта.

  • Поместите внутри dw_dynapps папку newland (со всем содержимым) расположенную на компакт-диске в папке Lesson01/Start.

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

  • Откройте Dreamweaver MX 2004.

    После того, как файлы станут видимыми в Dreamweaver, следует редактировать их только в этой программе. HTML-файл может быть открыт в любом текстовом редакторе, а в каждой операционной системе есть свой менеджер файлов, позволяющий перемещать или удалять файлы. Но следует избегать использования этих инструментов, поскольку любые изменения нарушат корректную работу панели Site Manager (Менеджер сайтов), что может привести к появлению неработоспособных ссылок. Поэтому после размещения файлов на сайте следует запускать Dreamweaver и не пытаться изменять их при помощи других средств.

  • После запуска программы Dreamweaver на появившейся изначально странице в разделе Create New (Создать новый) щелкните на ссылке Dreamweaver Site.

    Вы вправе воспользоваться альтернативным вариантом – выполните в меню Site (Сайт) команду Manage Site (Управление сайтом) и нажмите кнопку New (Создать).

    Несмотря на то, что файлы находятся на жестком диске, Dreamweaver их еще не видит. Регистрация сайта позволяет Dreamweaver увидеть файлы, а после этого управлять ими. Регистрация производится в диалоговом окне Site Definition (Определение сайта). Если диалоговое окно выглядит не так, как на представленном ниже рисунке, то, скорей всего, выбран расширенный режим регистрации. Чтобы активировать обычный режим, следует щелкнуть на вкладке Basic (Базовое).

    Регистрация статичного сайта

  • В единственное текстовое поле на экране введите слова Newland Tours и нажмите Next (Далее).

    В обычном режиме диалогового окна Site Definition (Определение сайта) применяется Мастер, предлагающий ответить на ряд вопросов с вариантами ответов. В предыдущих версиях Dreamweaver использовалось более сложное диалоговое окно.


    Для работы с прежним вариантом диалогового окна Site Definition (Определение сайта) следует щелкнуть на вкладке Advanced (Дополнительно).

  • На экране Editing Files, Part 2 (Редактирование файлов, часть 2) выберите вариант "No, I do not want to use a server technology." ("Нет, я не хочу использовать серверную технологию"). Нажмите Next (Далее).

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

    Регистрация статичного сайта

  • На следующем экране выберите первый вариант "Edit local copies on my machine, then upload to server when ready (recommended)" ("Отредактируйте локальные копии и по завершении отправьте их на сервер (рекомендуемый)").

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

    При создании большинства сайтов, выполненных на высоком профессиональном уровне, применяется трехуровневая схема. Все рабочие файлы локального сайта содержатся на жестком диске разработчика. На промежуточном сервере есть зеркальный сайт (так называемое "зеркало"), используемое только для тестирования и разработки. Посетители никогда не видят содержимого промежуточного сервера, и в то же время он является реально действующим веб-сервером, почти по всем параметрам совпадающим с рабочим сервером (production server). На рабочем сервере размещена общедоступная версия сайта. Здесь следует размещать только прошедшие тестирование, отредактированные, отлаженные и апробированные файлы.

  • Щелкните на значке папки, расположенной справа от поля "Where on your computer do you want to store your files" ("Где на вашем компьютере вы предполагаете хранить файлы?"). Внутри папки dw_dynapps найдите вложенную папку newland и нажмите Select (Выбрать), чтобы вернуться в диалоговое окно Site Definition (Определение сайта).


    На этом шаге определяется место для локального сайта, где и будут происходить все дальнейшие действия. Все изменения после работы с файлами будут сохраняться на локальном сайте. Локальный сайт обычно недоступен для посетителей. Это означает, что если во время работы на сайте временно возникнут какие-либо неполадки, никакого вреда не будет.

    Регистрация статичного сайта

  • На следующем экране в раскрывающемся списке выберите вариант None.

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

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

    Поскольку компания Newland Tours является чисто виртуальной, нет необходимости в рабочем сервере для размещения сайта, создаваемого в этой книге.

    Регистрация статичного сайта

  • Нажмите Next (Далее). Просмотрите итоги регистрации и нажмите Done (Выполнено).

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

    После завершения регистрации панель Site (Сайт), по умолчанию расположенная в правом верхнем углу экрана, окажется заполненной файлами. Помимо этого, рядом с каждым файлом появится значок в виде замка с защелкой. Замок указывает, что файлы доступны только для чтения, то есть их нельзя изменить.


    Регистрация статичного сайта

    Очевидно, что такое состояние файлов не требуется, поскольку суть работы Dreamweaver заключается в изменении файлов. Файлы доступны только для чтения, поскольку они были скопированы с компакт-диска, который, в свою очередь, также является доступным только для чтения (в действительности, именно это обозначает часть RO (read-only) в аббревиатуре CD-ROM). Если развернуть папки Fireworks или images, что рядом со всеми файлами в них тоже существует значок замка.

    Прежде чем приступить к работе с файлами, следует отключить состояние "только для чтения".

  • Поместите указатель мыши на значке папки верхнего уровня (обозначенной надписью Site – Newland Tours) и щелкните правой кнопкой мыши (Windows) или кнопкой мыши с одновременным нажатием клавиши (Control) (Macintosh), чтобы открыть контекстное меню. В этом меню выберите пункт Turn off Read Only (Отключить опцию "Только для чтения").

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

    Регистрация статичного сайта



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

    Создание страницы контактов

    Как часто случается с сетевыми проектами, прежде чем вплотную заняться улучшением сайта Newland Tours, требуется уделить внимание более срочному делу: поскольку на сайте отсутствует страница контактов, ее нужно создать заново.
    Это упражнение послужит для ускоренного освоения базовых приемов с целью создания и редактирования веб-страниц в Dreamweaver. Для тех, кто уверенно создает статичные страницы в Dreamweaver, выполнение этого упражнения не является обязательным, и его можно пропустить. Завершенный файл проекта можно найти на компакт-диске в папке Complete, относящейся к этому уроку, а также в папке Start следующего урока. В случае пропуска этого упражнения следует, минуя два раздела, сразу перейти к разделу "Оценка сайта: код".
    Цель этого небольшого упражнения – показать основные способы работы в среде Dreamweaver. Оно не служит исчерпывающим руководством по разработке статичных веб-страниц. Для этого, в значительной мере, предназначены книги "Macromedia Dreamweaver MX 2004: Учебный курс из первых рук" (Macromedia Press) или "Macromedia Dreamweaver MX 2004: быстрый старт в среде визуальной разработки" (Macromedia Press/Peachpit).
  • На панели Files (Файлы) дважды щелкните на файле contact_text.txt, чтобы открыть его в Dreamweaver. Если панель Files не отображается, необходимо в меню Window (Окно) выполнить команду Files (Файлы).
    Создание страницы контактов
    увеличить изображение

    Как несложно понять из содержимого файла, это весь текст, который будет помещен на страницу контактов.
    Файл не является HTML-документом и содержит открытый текст (plain text). В нем нет HTML-тегов, и хотя в программе Dreamweaver текст выглядит отформатированным (если открыть его в веб-браузере) форматирование будет отменено, и он будет преобразован в один большой абзац. Причина этого в том, что браузеры игнорируют пустую (свободную) область: переходы на новую строку, пробелы (свыше одного пробела, предназначенного для отделения слов друг от друга), и символы табуляции. Чтобы пустое пространство, обозначенное на странице, отображалось в браузере, применяются HTML-теги, такие как тег абзаца (). В последующих шагах будет создана копия существующей страницы сайта (about.htm), – ее содержимое будет заменено на содержимое текстового файла, которое затем будет отформатировано при помощи HTML, после чего страница будет сохранена под именем contact.htm.

    На панели инструментов View (Вид) выбрана кнопка Code (Код), а кнопки Split (Режим разделения) и Design (Дизайн), расположенные рядом, недоступны. Поскольку в документе отсутствует HTML-разметка, Dreamweaver не может открыть его в режиме дизайна. В этой книге придется часто переключаться между режимами кода Code (Код) и дизайна Design (Дизайн).

  • Щелкните в любом месте текста и в меню Edit (Правка) выполните команду Select All (Выделить все). Затем в меню Edit (Правка) воспользуйтесь командой Copy (Копировать), чтобы поместить весь текст в буфер обмена.

    Теперь текст готов к размещению в целевом документе, однако целевого документа пока не существует.

  • На панели Files (Файлы) дважды щелкните на документе about.htm, чтобы открыть его. Чтобы увидеть, как отображается страница, следует щелкнуть на кнопке Design (Дизайн).

    Эта страница будет использоваться в качестве основы для создания нового документа.

  • В меню File (Файл) выполните команду Save As (Сохранить как) и присвойте файлу имя contact.htm.

    Эту копию файла about.htm необходимо изменить. Чтобы не переписать исходную версию файла, для создания копии и присвоения ей нового имени применяется команда Save As (Сохранить как).

    На навигационной панели каждой страницы присутствует кнопка Contact An Agent (Контакт с агентом). При щелчке на этой кнопке загружается страница contact.htm, которой до этого момента не существовало.

  • Перемещая указатель мыши, выделите все содержимое страницы About Newland Tours, включая надпись к изображению. Нажмите клавишу (Del).

    Создание страницы контактов
    увеличить изображение

    Это содержимое относится к странице about.htm. Его следует заменить содержимым из буфера обмена.

    При нажатии клавиши (Del) будет удалено все содержимое, в том числе и изображение, расположенное в одной строке с текстом.

  • Поместите мигающий курсор в основной (теперь пустой) области страницы и переключитесь в режим кода и дизайна (с этого момента называемый комбинированным режимом), нажав кнопку Split (Режим разделения).

    Создание страницы контактов
    увеличить изображение

    Одновременная работа в обоих режимах позволяет использовать инструменты визуальной разработки, а также точно знать, что Dream-weaver будет генерировать именно такой код, какой ожидается.


    В режиме кода курсор расположен внутри тега

    . Браузер форматирует содержимое тега

    как заголовок 1 (первого) уровня. На панели Property Inspector (Инспектор свойств), расположенной ниже диалогового окна, в меню Format (Формат) выбран пункт Heading 1 (Заголовок 1). Другими словами, панель инспектора свойств отображает то же, что и в режиме кода: место, в котором расположен курсор, отформатировано в виде заголовка первого уровня. Если теперь вставить на страницу содержимое буфера обмена, оно будет отформатировано в виде заголовка 1 уровня.

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

  • В раскрывающемся списке Format (Формат) на панели Property Inspector (Инспектор свойств) выберите команду Paragraph (Абзац).

    В режиме кода теги

    будут заменены тегами
    . Теперь, если вставить содержимое буфера обмена, оно будет отформатировано в виде обычного абзаца.

  • Если между тегами
    в режиме кода появится тег
    , следует выделить и удалить его.

    Создание страницы контактов

    Этот тег может остаться от документа about.htm, – в зависимости от того, каким образом было выделено и удалено содержимое исходной страницы.

  • Не перемещайте курсор, оставив его между тегами и
    в области режима кода, и выполните в меню Edit (Правка) команду Paste (Вставить).

    Текст из файла contact_text.txt будет вставлен в документ и отформатирован тем же образом, что и исходный файл. Если сравнить текст и код страницы в режимах дизайна и кода, то можно заметить, что программа Dreamweaver автоматически вставила символы для принудительного перехода на следующую строку (
    ), чтобы отобразить содержимое по абзацам.



  • Теперь можно приступить к форматированию содержимого.

    Создание страницы контактов
    увеличить изображение

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

    Взгляд в будущее

    Несмотря на то, что в этом уроке рассматривалась только одна статичная веб-страница, было сделано гораздо больше, чем можно себе представить. В упражнениях был подробно рассмотрен этап, который довольно часто остается без внимания и может привести к катастрофическим последствиям. Была проведена детальная оценка сайта, включая код, бизнес-процессы и (косвенно) удобство использования. После этого, как правило, возникает четкое представление о том, что следует делать. Для наглядности здесь приведены итоговые цели проекта по модернизации сайта:
  • обновление HTML-кода до XHTML;
  • упрощение доступа к сайту и создание более удобных условий при работе с ним;
  • хранение структурированного или часто обновляемого содержимого в базе данных;
  • предоставление механизмов поиска и фильтрации нужной информации, позволяющих пользователям более легко находить путешествия и регионы;
  • разработка эффективной веб-формы, с помощью которой пользователи могут связаться с сотрудниками Newland Tours без явного указания адреса электронной почты на странице;
  • разработка набора веб-форм, позволяющих сотрудникам Newland Tours добавлять, обновлять и удалять информацию, хранящуюся в базе данных (однако следует помнить, что записи, хранящиеся в базе данных, также являются источником материалов, представленных на веб-сайте).

  • Если что-то из перечисленного звучит несколько абстрактно, рекомендуется посмотреть окончательную версию сайта, которая будет реализована к концу книги.
  • В браузере введите адрес: http://www.allectomedia.com/newland_dynamic/
    Главная страница должна выглядеть практически так же, как и та, что была открыта в Dreamweaver. Однако ее структура значительно отличается. Например, колонка "Traveler’s Journal" практически мгновенно формируется и форматируется из базы данных. Вдобавок отформатированный текст в этой версии страницы выглядит более привлекательным образом (см. рис. вверху следующей страницы).
  • Щелкните на ссылке Find Tours на панели навигации, находящейся на левой стороне страницы.

    Взгляд в будущее
    увеличить изображение

    Вместо ожидаемой страницы Find Tours появится экран регистрации. Очевидно, что на предыдущем сайте такого не было. Эта возможность была реализована, поскольку клиенту потребовалось, чтобы пользователи регистрировались до того, как загрузят сайт, так чтобы клиент мог получить необходимые сведения о покупателях, а также имел возможность контактировать с ними по поводу коммерческих предложений и рекламы. Так, для загрузки сайта следует ввести следующие данные:

  • адрес электронной почты (Email address), например, osiris@allec-tomedia.com;
  • пароль (password) – такой, в частности, как "оsiris".


  • Примечание. Представленная в адресе электронной почты учетная запись osiris является виртуальной, созданной для того, чтобы пользователи могли получить доступ к сайту без регистрации. На самом деле, такой учетной записи не существует, поэтому просьба не посылать на этот адрес писем.

    Примечание. После ввода данных будет загружена страница, запрошенная ранее.

    Взгляд в будущее

  • Изучайте сайт столько, сколько нужно.


  • Теперь следует уделить некоторое время самостоятельному изучению сайта. Сайт позволяет задействовать несколько способов фильтрации необходимых сведений, ссылки на связанные с контекстом данные (например, из раздела, представляющего конкретный тур по определенному региону, к разделу, содержащему полный список всех путешествий в данном регионе), и даже инструмент для подсчета стоимости выбранного тура (см. рис. вверху следующей страницы).

    Раздел Admin не доступен для рядового пользователя, в частности, имеющего адрес электронной почты osiris@allectomedia.com с учетной записью osiris. Права привилегированного доступа указанного раздела позволяют пользователям изменять содержимое базы данных и управлять большей частью данных на сайте. Естественно, невозможно наглядно представить такой процесс в этой книге! Как будет показано позже, средства управления контентом, использующие веб-формы, позволяют сотрудникам компании Newland Tours обновлять содержимое сайта.

    Взгляд в будущее
    увеличить изображение

    На рисунке вверху следующей страницы представлен пример одной из таких форм. При помощи этой формы сотрудники могут создать новый выпуск колонки "Traveler’s Journal", просто заполнив форму и следуя указаниям на экране. Как только сотрудник нажимает кнопку Submit, введенный текст будет добавлен в базу данных, и сотрудник переместится на главную страницу сайта, а в момент между нажатием кнопки Submit и загрузкой главной страницы он может увидеть обновленную колонку "Traveler’s Journal".

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

    Модернизация типа документа до XHTML

    Модернизация типа документа до XHTML

    Цель этого урока: преобразовать HTML-код сайта в XHTML и настроить Dreamweaver таким образом, чтобы весь код, добавляемый в дальнейшем, также соответствовал стандартам XHTML.
    Что же представляет собой XHTML и чем он отличается от HTML? Стандарт XHTML был разработан, чтобы заменить HTML, – таким образом, отношения между двумя стандартами носят исторический характер.
    Возможно, самое заметное изменение, которое привнес XHTML, мало связано с самим кодом. Это принципиально новый подход, который позволяет привести HTML в соответствие языку XML (eXtensible Markup Language – расширяемый язык разметки [гипертекста]). XML является мета-языком, то есть набором правил, которые позволяют разрабатывать новые языки, не выходя за рамки общего стандарта. XML – это язык разметки, такой же, как и HTML, – так что их синтаксис очень похож. Пример фрагмента XML-кода: Jeffrey. Существуют различные вариации XML, например, MathML, язык разметки, используемый математиками для записи математических выражений. XHTML – это вариация языка, которая применяется разработчиками для (отметим этот знаменательный факт "барабанной дробью") разметки веб-страниц.
    Один из основных принципов спецификации XML заключается в том, что теги описывают содержимое документа, а не его внешний вид. Внешний вид страниц, выполненных в формате XML, определяется отдельным типом кода (например, CSS, XSLT или XSL-FO). В предыдущих версиях HTML логическая разметка содержимого и его внешнего вида смешивались. Поскольку логика при построении таких элементов, как не соответствует логической разметке, по этой причине они отменены, то есть не рекомендованы к использованию, а рано или поздно будут исключены из стандартов, но в данный момент они все еще работают. Эти теги ничего не говорят пользователю о своем предназначении, а просто сообщают браузеру как отображать заключенное внутри них содержимое (в отличие от элемента из предыдущего абзаца, который указывает о том, информацию какого плана он содержит).
    Если говорить кратко, XHTML применяется для описания логической структуры документа: заголовков разного уровня (

    ,

    и т. д.), списков (, ,
  • ), текста в теле документа (), выделяемого текста (, ), ссылок () и т. п. Для указания правил, по которым браузеры (такие как Internet Explorer и Netscape) должны отображать информацию, вместо тегов внешнего вида (таких как или ) используются каскадные таблицы стилей CSS.
    Отделение содержимого от внешнего вида имеет не только чисто гипотетические преимущества. Во-первых, это позволяет большему количеству браузеров, включая так называемые экранные дикторы для людей с нарушениями зрения, отображать содержимое, не удаляя (или, что еще хуже, не интерпретируя) теги, поддерживающие внешний вид страниц. Во-вторых, правильное использование XHTML и каскадных таблиц стилей заметно ускоряет разработку и поддержку веб-сайтов.
    XHTML в основном подобен HTML. Многие теги остались точно такими же:, ,

    , , , ,

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

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

  • все теги XHTML и их атрибуты записываются в нижнем регистре. В HTML теги и допустимы в равной степени, и многие разработчики использовали верхний регистр, поскольку это позволяло выделять теги на фоне остального кода. Но язык XHTML построен на основе правил XML, согласно которым все теги должны записываться в нижнем регистре, так что здесь допустим только тег . Атрибуты тегов, например атрибут cellpadding="3" тега , тоже вводится в нижнем регистре. В коде сайта Newland Tours теги записаны в нижнем регистре, так что эту проблему решать не придется;
  • все XHTML-теги должны быть закрытыми. Например, если на странице применяется тег

    , где-то должен быть и закрывающий тег

    . Однако у некоторых элементов нет закрывающих тегов. В частности, к таким пустым тегам относятся теги
    , ,
    и . Помимо этого, в HTML такие теги, как и
  • , могли быть как закрытыми, так и пустыми. В XHTML они должны быть парными, то есть иметь закрывающие теги, в частности,
    и
  • . Пустые теги закрываются особым образом при помощи следующего синтаксиса: <пустой_тег />. Следовательно, приведенные выше пустые теги должны быть преобразованы таким образом:
    , ,
    и . Пробел и обратная косая черта (обратный слэш) заменяют закрывающий тег;
  • поскольку существует множество различных версий HTML, разработчики в коде страниц указывают тип документа. Например, Dreamweaver в верхнюю строку большинства документов добавляет следующий код: . Эта строка сообщает браузерам о том, какая версия кода (Модификация Transitional стандарта HTML 4.01) и какой язык (скажем, английский) используются в документе. В XHTML применяется другая форма объявления типа документа. Помимо этого, поскольку XHTML соответствует стандартам XML, документ должен содержать и объявление XML;
  • как говорилось ранее, теги физического форматирования отменены. Вместо этого для управления внешним видом применяются каскадные таблицы стилей.



  • Итак, пора приступать.

  • Откройте в Dreamweaver документ index.htm.

    Операция поиска и замены распространяется на весь сайт, поэтому неважно, какой именно файл открыт – это может быть даже пустой несохраненный документ. Файл требуется только для того, чтобы открыть диалоговое окно Find and Replace (Найти и заменить)

    Буквально через несколько шагов функция поиска и замены будет применена для того, чтобы преобразовать страницы сайта в XHTML. Для этого определение типа документа с использованием модификации Transitional стандарта HTML 4.01 следует заменить на модификацию Transitional спецификации XHTML 1.0. Документ будет полностью соответствовать стандартам XHTML, только тогда, когда в код будут внесены все необходимые изменения. После корректировки информации о типе документа все браузеры будут распознавать, что документ относится к XHTML, а Dreamweaver будет автоматически генерировать код, соответствующий новым стандартам.

  • Оставаясь в комбинированном режиме Split (Режим разделения), поместите курсор в конец раздела о перспективах отпуска Featured Vacation, расположенного в области Design (Дизайн) (после текста "$899/child USD") и нажмите комбинацию клавиш (Shift)+(Return) (Macintosh) или (Shift)+(Enter) (Windows).

    Указанная комбинация клавиш добавляет элемент разрыва строки – пустой тег
    , который в данный момент вставляется в формате HTML. Это доказывает, что по умолчанию Dreamweaver генерирует код, не соответствующий стандартам XHTML. Объясняется это тем, что в определении типа документа указана модификация Transitional версии HTML 4.01, в которой применение тега
    не является ошибкой.

    Пора изменить информацию о типе документа.

    Модернизация типа документа до XHTML

  • Выполните команды File\New (Файл\Создать), чтобы создать новый документ. Убедитесь в том, что выбрана категория Basic Page (Главная страница), а во втором столбце выбран тип файла HTML. Следует установить флажок Make Document XHTML Compliant (Сделать документ, совместимым со спецификацией XHTML) в правом нижнем углу. Нажмите кнопку Create (Создать).


    Модернизация типа документа до XHTML

    При создании страницы, совместимой с XHTML, Dreamweaver помещает нужную информацию о типе документа в верхней строке кода. Для того, чтобы изменить тип всех страниц сайта, нужно скопировать этот код и заменить им все объявления версии HTML 4.01 Transitional.

  • Выделите первую и вторую строки нового документа, а затем выполните команды Edit\Copy (Файл\Копировать), чтобы скопировать код в буфер обмена. Закройте новый файл, не сохраняя его.

    Модернизация типа документа до XHTML
    увеличить изображение

    Скопированный код выглядит следующим образом:

    "

    Первая строка включает определение типа документа (в теге ), которое подобно определению в HTML 4.01. Но в данном случае изменились версия HTML и адрес DTD-файла. Итак, определение типа документа DTD (document type definition – определение типа документа) задает список элементов и атрибутов, определяющих тип документа и разрешенных в данной версии XML-документа. Следует отметить, что DTD может присутствовать в том же файле, что и документ, либо содержатся в отдельном DTD-файле.

    Вторая строка содержит открывающий тег , обязательный для всех HTML-документов. Его отличие в том, что он содержит атрибут xmlns (XML Name Space – пространство имен языка XML). В этом параметре указывается источник всех тегов. В XML этот параметр необходим, поскольку существует вероятность того, что два языка на основе XML будут использовать один и тот же тег. Если по умолчанию указано пространство имен, то программа, отображающая документ (в данном случае веб-браузер), способна устранить подобные конфликты.

  • Выполните команды Edit\Find and Replace (Правка\Найти и заменить).

    Откроется диалоговое окно Find and Replace (Найти и заменить). Первоначальные настройки по умолчанию показаны на рисунке, но, в реальности, они могут отличаться в зависимости от тех настроек, которые были применены последними. Если область Replace With (Заменить на) или область, расположенная над ней, уже содержит какой-то текст, то следует удалить его. Прежде чем переходить к следующему шагу, нужно очистить оба поля.

    Модернизация типа документа до XHTML
    увеличить изображение




  • Модернизация типа документа до XHTML
    увеличить изображение

  • Щелкните внутри области Replace With (Заменить на) и нажмите комбинацию клавиш (Command)+(V) (Macintosh) или (Ctrl)+(V) (Win-dows), чтобы вставить из буфера обмена две строки кода.

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

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

  • Документ index. все еще должен быть открыт. В режиме Code (Код) прокрутите страницу вверх и выделите первую и вторую строки. После этого выполните команды Edit\Copy (Правка\Копировать), щелкните в текстовой области, расположенной над областью Replace With (Заменить на) и вставьте эти две строки кода.

    И снова строки кода могут переноситься, если они не помещаются в текущей строке внутри указанной области.

    Модернизация типа документа до XHTML
    увеличить изображение

    Итак, теперь Dreamweaver "знает", что искать и чем заменять найденный фрагмент. Но программа до сих пор не определила, в каких файлах искать указанные фрагменты кода.

  • В раскрывающемся списке Find in (Найти в) вверху диалогового окна выберите пункт Entire Current Local Site (Поиск на текущем сайте).

    Здесь Dreamweaver получает указание искать фрагмент кода в каждом HTML-файле сайта. То есть вместо того, чтобы менять каждую страницу по отдельности, достаточно за один прием обновить все файлы сразу.

    Одновременное изменение нескольких файлов сразу потенциально опасно, поскольку коррективы, вносимые в закрытые файлы (то есть все файлы, кроме index.htm), нельзя отменить. Следует соблюдать осторожность при использовании функции поиска и замены применительно к нескольким файлам.

  • В раскрывающемся списке Search (Поиск) выберите пункт Source Code (Исходный код). Следует снять флажки Match case (Учитывать регистр), Match whole word (Только слово целиком) и Use regular expressions (Использовать регулярные выражения), а также установить флажок Ignore whitespace (Игнорировать пробелы).


    Раскрывающийся список Search For (Поиск) является очень важным для проведения последующих действий. По умолчанию функция поиска и замены ищет совпадения с запросом в тексте, который отображается в браузере. Вариант Text (Текст) исключает поиск внутри кода. Изменения вносятся в код страниц, и обязательно следует выбрать вариант Source Code (Исходный код).

    Опция Match case (Учитывать регистр) позволяет при поиске учитывать регистр вводимых символов (строчная буква "a" отличается от прописной "A"). Если флажок сброшен, то регистр не учитывается.

    Match whole word (Все слово целиком) позволяет найти целое слово. Если флажок сброшен, то по запросу "design" будут найдены слова "design", "designer" и "designed". Если флажок установлен, будет найдено только слово "design".

    Опция Ignore whitespace (Игнорировать пробелы) позволяет игнорировать любое пустое пространство, например, принудительные возвраты, символы табуляции и отступы между текстом или элементами. Поскольку браузеры игнорируют пустое пространство в HTML, многие программисты используют пробелы, чтобы сделать код более удобным для чтения.

    Опция Use regular expressions (Использовать регулярные выражения) заставляет Dreamweaver интерпретировать зарезервированные символы, используемые в регулярных выражениях (например,/d в регулярных выражениях соответствует любой цифре) в качестве символов регулярных выражений. Если флажок сброшен и задан запрос/d, программа будет искать сочетание /d, а не цифры.

    В своем окончательном виде диалоговое окно Find and Replace (Найти и заменить) должно выглядеть так же, как в приведенном примере.

    Модернизация типа документа до XHTML
    увеличить изображение

  • Нажмите Replace All (Заменить все). Когда появится диалоговое окно с предупреждением, нажмите Yes (Да).

    Начнется операция поиска и замены. По умолчанию откроется панель Results (Результаты), в которой указано, какие файлы были изменены. В данном случае будет изменено пять файлов. Поскольку сайт содержит пять страниц, можно сделать вывод, что изменения были успешными.


    Модернизация типа документа до XHTML
    увеличить изображение

  • Чтобы завершить эксперимент с разрывом строки, вернитесь в нижнюю часть раздела Featured Vacation, в котором ранее был вставлен разрыв строки, и снова нажмите комбинацию клавиш (Shift)+(Return) (Macintosh) или (Shift)+(Enter) (Windows).

    На этот раз вместо тега
    , который был вставлен ранее, Dream-weaver добавит тег
    . Как уже говорилось, синтаксис
    используется для пустых элементов и эквивалентен паре тегов

    . При этом тег
    не является простым закрывающим тегом
    . Это доказывает, что Dreamweaver определил стандарт XHTML, к которому относится документ. С этого момента программа будет добавлять в код соответствующие стандартам XHTML теги.

    Примечание. В зависимости от того, каким способом форматируется текст, Dreamweaver все еще может добавлять в код теги . Наилучший способ избежать этого,– при указании таких параметров текста, как цвет и размер, не использовать панель Property Inspector (Инспектор свойств). Вместо этого, следует как можно больше применять каскадные таблицы стилей CSS.

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

    Модернизация типа документа до XHTML
    увеличить изображение

  • Удалите два созданных разрыва строки и сохраните файл.

    При каждом значительном изменении следует сохранять index.htm. Закрытые файлы сохранять не требуется, поскольку при замене информации о типе документа Dreamweaver сохранил их автоматически.



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

    Поиск изображений, не содержащих атрибут alt

    К этому моменту страницы сайта Newland Tours соответствуют стандарту XHTML, – так что основная цель этого урока достигнута. Остается одна проблема, которая хоть и не относится к XHTML, тем не менее связана с кодом: у многих изображений отсутствует атрибут alt. Как известно, атрибут alt тега содержит пояснения к изображению, которое необходимо, в частности, пользователям с нарушением зрительных функций и пользующимся в браузере экранным диктором, который воспроизводит с помощью синтезатора речи комментарии к картинкам.
    Это изменение тоже сложно автоматизировать, поскольку у каждого изображения должно быть собственное значение атрибута alt. В данном упражнении функция поиска и замены будет использоваться двумя различными способами. Сначала – для того, чтобы добавить альтернативный текст (alt к четырем изображениям, из которых состоит верхняя часть всех страниц. Далее – для поиска оставшихся изображений, у которых отсутствует атрибут alt.
  • Откройте документ about.htm.
    На главной странице index.htm нет полноценного варианта навигационной панели, как на остальных страницах, и работа с файлом about.htm позволяет внести изменения во все изображения, из которых состоит навигационная панель.
  • В режиме Design (Дизайн) щелкните на изображении Эйфелевой башни, чтобы выделить левую половину заголовка "Newland Tours". После этого в режиме Code (Код) будет выделен соответствующий HTML-код. Щелкните правой кнопкой мыши (Windows) или кнопкой мыши, удерживая нажатой клавишу (Control) (Macintosh), на выделенном участке кода и выберите в контекстном меню пункт Copy (Копировать).
    Это самый быстрый способ поместить код нужного объекта в буфер обмена, чтобы в дальнейшем его можно было вставить в диалоговое окно Find and Replace (Найти и заменить) или повторно использовать на других страницах. Он применим не только к изображениям, но и к другим объектам: от карты ссылок до видеороликов Macromedia Flash.
    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

  • Нажмите комбинацию клавиш (Ctrl)+(F) (Windows) или (Command)+ (F) (Macintosh), чтобы открыть диалоговое окно Find and Replace (Найти и заменить), а затем удалите из верхней текстовой области любой текст, оставшийся от предыдущих операций поиска, и вставьте скопированный HTML-код изображения.

    Следует убедиться, что в раскрывающемся списке Find in (Поиск) выбрана опция Entire Current Local Site (Поиск на текущем сайте), а в списке Search (Поиск) – опция Source Code (Исходный код).

    Совет. Чтобы в диалоговом окне Find and Replace (Найти и заменить) помещались длинные строки с текстом, достаточно изменить его размеры.
  • Вставьте тот же HTML-код в нижней текстовой области Replace With (Заменить на). Где-то внутри тега добавьте следующий текст: alt="Newland Tours Banner, Left".

    Порядок расположения атрибутов не имеет значения. Главное – убедиться, что атрибут набран в нижнем регистре, а значение атрибута заключено в кавычки.

    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

  • Нажмите кнопку Replace All (Заменить все). В раскрывшемся диалоговом окне с предупреждением нажмите Yes (Да).

    Тег alt для левой части заголовка был обновлен по всему сайту.

  • Повторите предыдущие шаги для правой части заголовка (три фотографии). Тег alt должен выглядеть следующим образом: alt="Newland Tours Banner, Right". После этого нажмите кнопку Replace All (Заменить все).

    Теперь обе части баннера содержат атрибут alt.

    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

  • Повторите предыдущие шаги, чтобы добавить атрибут alt к панели с кнопками, расположенной под заголовком "Newland Tours". Атрибут alt должен выглядеть следующим образом:alt="Navigation Bar".

    Файл index.htm не содержит навигационной панели, поэтому для того чтобы изменить ее, следует открыть другую страницу.

    С навигационной панелью связана интересная проблема. Поскольку панель представляет собой графический объект с несколькими кнопками, то добавление атрибута alt не позволит указать, для чего предназначена каждая кнопка. Однако любая из кнопок функционирует отдельно от остальных (при щелчке на кнопке загружается соответствующая страница) благодаря карте ссылок. По этой причине необходимо добавить атрибут alt к каждому тегу внутри карты ссылок. Эти атрибуты присутствовали изначально, так что добавлять их не требуется (cм. рис. вверху следующей страницы).

  • Повторите предыдущие шаги, чтобы добавить атрибут alt к изображению в виде мраморного прямоугольника, расположенного под тремя фотографиями. Атрибут alt должен выглядеть следующим образом: alt="Copyright 2004 Newland Tours".


    Это все изменения для заголовка и навигационной панели.

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

  • Снова откройте диалоговое окно Find and Replace (Найти и замеить) и в раскрывающемся списке Search (Поиск) выберите опцию Specific Tag (Специальный тег), а в списке тегов HTML – опцию img. Появится строка для дополнительного критерия поиска с выбранным по умолчанию вариантом With Attribute (С атрибутом). Измените его на Without Attribute (Без атибута) и в следующем раскрывающемся списке выберите пункт alt. Строку Action (Действие) с соответствующими списками настраивать не требуется.

    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

    Согласно этим настройкам Dreamweaver ищет все изображения, не содержащие атрибут alt. В строке Action с соответствующими списками ничего задавать не нужно, поскольку никаких действий в данном случае выполнять не требуется. Никакой замены не происходит, а инструменты Dreamweaver используются для того, чтобы найти теги, удовлетворяющие определенному критерию.

    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

  • Нажмите кнопку Find Next (Найти далее).

    Курсор автоматически переместится к изображению с тегом alt. Место перемещения зависит от расположения курсора в начале поиска.

  • Добавьте атрибуты alt к каждому изображению, найденному на странице, за исключением страниц tours.htm и profiles.htm. Некоторые изображения содержат подписи или внедренный текст, и подобную информацию нужно брать за основу альтернативного текста.

    При написании альтернативного текста не нужно предъявлять к нему высоких требований, – достаточно, чтобы он качественно описывал назначение и отдельные элементы изображения.

    Причина, по которой не нужно добавлять атрибуты alt на страницы tours.htm и profiles.htm, заключается в том, что эти страницы будут преобразованы в динамичные, и позже атрибуты alt еще будут изменены.

    Поиск изображений, не содержащих атрибут alt
    увеличить изображение

  • Сохраните и закройте все открытые файлы.



  • Содержание Назад Вперед

    Удаление ненужных тегов

    Как говорилось ранее, тег объявлен устаревшим, но, в отличие от тегов и , у него нет прямого эквивалента для замены. Вместо атрибутов, отвечающих за внешний вид страниц и используемых в теге , применяется принципиально другая технология –CSS (Cascading Style Sheets – каскадные таблицы стилей). Таким образом, в отличие от изменения с сохранением масштаба, сделанного на предыдущем шаге, решение этой проблемы потребует выполнения еще двух шагов. Сначала требуется удалить все старые теги, не удаляя их содержимого. Затем нужно разработать и применить таблицу стилей. Первый шаг будет сделан в этом задании. Второй будет основным в уроке 3.
    Удаление тегов без уничтожения их содержимого может показаться трудной задачей. Вследствие того, что каждый тег имеет множество атрибутов, а у каждого атрибута есть много возможных значений, нельзя осуществить поиск тега , как в случае с тегом . Нужен способ поиска отличающихся тегов, например, и . Существует два обходных пути для решения этой проблемы. Первый – найти строку "" а после этого удалить каждый экземпляр тега вручную. Другой способ заключается в использовании при поиске тега такого регулярного выражения, которое позволит найти все возможные атрибуты тега и их значения.
    Примечание. Регулярные выражения, в отличие от жестко заданных запросов, позволяют создавать запросы для поиска текста по определенным шаблонам. Регулярные выражения замещают подстановочные знаки на реально существующие, а также предоставляют другие способы описания шаблонов в строках текста. Дополнительную информацию о проведении операций поиска с помощью регулярных выражений можно найти на сайте: http://www.webreference.com/js/column5/. Регулярное выражение для поиска всех вариантов тега выглядит следующим образом: <(font)[^>]*>.

    Программа Dreamweaver упрощает сложные задачи. Если выбрано действие Strip Tag (Тег для удаления), программа автоматически генерирует правильные регулярные выражения. После этого она удаляет все найденные экземпляры тега вне зависимости от атрибутов или их значений. Одновременно она, конечно же, удаляет и закрывающие теги .

  • Не закрывая index.htm, снова откройте диалоговое окно Find and Replace (Найти и заменить) и убедитесь, что в раскрывающемся списке Find in (Поиск) выбран вариант Entire Current Local Site (Поиск на текущем сайте).

    На этом шаге выполняется подготовка к основной работе в упражнении.

  • Убедитесь, что в раскрывающемся списке Search (Поиск) выбран вариант Specific Tag (Специальная тег). Далее в списке тегов HTML выберите вариант font. При необходимости следует щелкнуть на кнопке Remove Search Criterion (со знаком минус "-"), расположенной под списком Search.

    Как и прежде, Dreamweaver получает указания, что ему следует искать. В данном случае следует провести поиск всех экземпляров тегов и .

  • В раскрывающемся списке Action (Действие) выберите вариант Strip Tag (Тег для удаления).

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

    Удаление ненужных тегов
    увеличить изображение

  • Нажмите кнопку Replace All (Заменить все), а затем в диалоговом окне с предупреждением нажмите Yes (Да).

    Как и ожидалось, на панели Results (Результаты) отмечается значительное количество произведенных изменений по всему сайту.

    Но панель Results является не единственным показателем того, что операция поиска и замены сработала. Отдельные элементы текста index.htm изменились. Заголовок Explore the Site вверху навигационной панели стал меньше, и, кроме того, также изменился его шрифт. Это говорит о том, что проведенная операция влияет не только на код, но и изменяет внешний вид страницы, отображаемый в браузере (или в режиме Design (Дизайн) в программе Dreamweaver).

    Удаление ненужных тегов
    увеличить изображение

  • Сохраните index.htm.



  • Содержание Назад Вперед

    Верификация XHTML-кода

    После преобразования кода следует проверить правильность выполненных изменений. Для проверки кода в Dreamweaver содержится несколько встроенных инструментов. В этом упражнении будет произведена проверка того, насколько успешно код сайта преобразован в XHTML.
  • Выполните в меню Window (Окно) команды Results\Validation (Результаты\Валидация).
    После выполнения указанных команд будет открыта панель Results (Результаты) и станет активной вкладка Validation (Валидация).
    Верификация XHTML-кода
    увеличить изображение

  • Щелкните на кнопке Validate (Проверить достоверность) и в раскрывшемся списке выберите пункт Settings (Настройки).
    Эта команда служит для ускоренного перехода в категорию Validator (Валидация) диалогового окна Preferences (Установки), где отображается список нескольких различных версий HTML и собственный код языка. Прежде чем проверять правильность кода, следует указать Dreamweaver версию кода, относительно которой следует производить проверку.
  • В списке validate against (проверить на соответствие) выберите пункт XHTML 1.0 Transitional. Все остальные флажки следует снять. Нажмите OK для подтверждения.
    Если выбран пункт XHTML 1.0 Transitional, функция проверки достоверности итоговых данных будет работать в соответствии с определением типа документа (DOCTYPE), указанному в начале урока (см. рис. вверху следующей страницы).
  • Снова нажмите кнопку Validate (Проверить достоверность) и, на этот раз, выберите в списке пункт Validate Entire Site (Проверить правильность всего сайта в целом).
    Верификация XHTML-кода
    увеличить изображение

    Запуск процедуры верификации сайта может занять некоторое время, после чего во вкладке Validation (Валидация) отобразится список всех проблем с указанием файла, номера строки и характера проблемы. Если правильно следовать всем шагам, описанным в упражнениях, для каждого из пяти файлов отобразится сообщение "No errors or warnings found" (Ошибок и предупреждений не найдено).
    Верификация XHTML-кода

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


  • Содержание Назад Вперед

    Закрытие пустых тегов с атрибутами

    Закрытие тегов, не содержащих атрибуты, не представляет особой сложности. Так, Dreamweaver просто выполняет, в частности, поиск тега
    и заменяет его на
    и т. д. Но закрытие пустых тегов с атрибутами – это совсем другая история. Так, например, при закрытии возникает проблема, подобная проблеме по замене тега , так как различные атрибуты и их значения усложняют поиск.
    Как и в случае с тегом , Dreamweaver может создать регулярное выражение, необходимое для того, чтобы провести успешный поиск всех тегов. Для этого выбирается опция Specific Tag (Специальный тег), а в списке тегов HTML следует воспользоваться вариантом img. К сожалению, в диалоговом окне Find and Replace (Найти и заменить) нет действия "Close Empty Tag in XHTML Style" ("Закрыть пустой тег в XHTML-стиле"). Таким образом, поиск будет гораздо проще, чем замена. Тем не менее, существует обходной путь, который является не особо элегантным, но приводит к желаемым результатам.
    После закрытия тегов нужно будет закрыть все остальные пустые теги с атрибутами. В этом задании также будут закрыты теги , расположенные в карте ссылок на каждой странице. Если бы сайт содержал формы, таким же способом пришлось бы закрыть пустые теги , которые тоже загружаются с атрибутами. Формы будут добавлены на сайт в последующих уроках.
  • В документе index.htm откройте диалоговое окно Find and Replace (Найти и заменить) и убедитесь, что выбран пункт Entire Current Local Site (Поиск на текущем сайте). Убедитесь, что в раскрывающемся списке Search (Поиск) выбран пункт Specific Tag (Специальный тег), а в списке тегов HTML – пункт img. В случае необходимости щелкните на кнопке Remove Search Criterion (Удалить критерий поиска) для того, чтобы не было никаких дополнительных критериев поиска.
    Эта часть процедуры должна уже стать привычной.
  • В раскрывающемся списке Action (Действие) укажите вариант Add After (Добавить после).

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

  • Введите в текстовую область надпись "QWERTY".

    При запуске операции поиска и замены Dreamweaver добавит надпись QWERTY сразу после угловой скобки (>), закрывающей тег . Эта скобка и является проблемой, которую требуется устранить, поскольку она должна иметь вид "/>" вместо ">". Но если просто запустить поиск всех ">" и заменить их на "/>", такой поиск изменит все угловые скобки, включая скобки тегов, которые написаны правильно, например, . Так что необходимо указать только те угловые скобки, которые закрывают теги .

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

    Примечание. QWERTY не является ключевым словом или специальным термином. Это просто уникальный набор букв, который точно не встречается ни в одном месте сайта. В этих же целях, с таким же успехом, может использоваться любое имя (если только это не Newland).

    Закрытие пустых тегов с атрибутами
    увеличить изображение

  • Нажмите кнопку Replace All (Заменить все), а затем, как обычно, – Yes (Да) в появившемся диалоговом окне с предупреждением.

    Закрытие пустых тегов с атрибутами
    увеличить изображение

    Если вы взглянете на документ в режиме Design (Дизайн), то убедитесь, что рядом с каждым изображением на странице появилась надпись QWERTY. Это свидетельствует о том, что операция поиска и замены проведена успешно.

  • Снова откройте диалоговое окно Find and Replace и в раскрывающемся списке Search For (Поиск) выберите опцию Source Code (Исходный код). В верхней текстовой области введите ">QWERTY" (не забудьте об угловой скобке), а в нижнем текстовом поле введите "/>" (не забудьте пробел).


    Dreamweaver получил указание отыскать все угловые скобки, которые закрывают только теги . Теперь нужно дать программе задание заменить эти скобки согласно правилам закрытия пустых тегов в XHTML.

    Закрытие пустых тегов с атрибутами
    увеличить изображение

  • Нажмите кнопку Replace All (Заменить все). Когда появится диалоговое окно с предупреждением, нажмите Yes (Да).

    Щелкните на наборе изображений в режиме Design (Дизайн) и внимательно просмотрите соответствующий код в режиме Code (Код). Все элементы теперь записаны по правилам XHTML. От надписи QWERTY не осталось никаких следов.

    Закрытие пустых тегов с атрибутами
    увеличить изображение

  • Повторите операцию с надписью QWERTY, чтобы должным образом закрыть все теги .

    Закрытие пустых тегов с атрибутами
    увеличить изображение

    Для того, чтобы убедиться, что изменение сработало, следует открыть любую страницу, кроме index.htm. Теги применяются как часть карты ссылок на панели навигации. Код карты ссылок находится в нижней части документа, прямо над закрывающим тегом .

    Закрытие пустых тегов с атрибутами
    увеличить изображение

  • Сохраните index.htm.


  • Содержание Назад Вперед

    Замена строк в исходном коде

    В этом упражнении будет произведена замена нескольких простых тегов. В частности, все теги
    будут заменены на
    . Поскольку у этого тега нет атрибутов или вариантов, которые следует исключить из поиска, изменения проводятся напрямую (в отличие от таких тегов, как , для замены которых из-за наличия атрибутов требуется больше усилий).
  • Выполните команды Edit\Find and Replace (Правка\Найти и заменить), чтобы снова открыть диалоговое окно.
    В этот раз достаточно просто вводить информацию в текстовые области, а не вставлять из буфера обмена.
  • В верхней текстовой области введите
    , а в нижней текстовой области –
    (не забудьте ввести пробел между буквой "r" и прямым слэшем "/"). Убедитесь, что текст, который прежде использовался в текстовых полях, полностью удален.
    В раскрывающемся списке Find In (Поиск) должна быть активной опция Entire Current Local Site (Поиск на текущем сайте), а в меню Search (Поиск) – опция Source Code (Исходный код) (см. рис. вверху следующей страницы).
  • Нажмите кнопку Replace All (Заменить все).
    Снова появится предупреждение, а затем на панели Results (Результаты) отобразятся внесенные коррективы. В этом случае на сайте будет выполнено несколько меньше изменений.
    Замена строк в исходном коде
    увеличить изображение

  • Повторите шаги 2 и 3, чтобы заменить тег
    тегом
    .
    Функция поиска и замены позволяет быстро выполнять работу, которая, в противном случае, оказалась бы довольно утомительной.
  • Повторите шаги 2 и 3, чтобы заменить тег тегом .
    Чтобы не вводить этот код вручную, достаточно скопировать его из строки 6 на любой странице.
    Сайт Newland Tours создавался в Dreamweaver, и заменяемый тег был добавлен автоматически. Как правило, разработчики используют тег , чтобы передавать информацию о документе. Часто встречаются теги с описаниями и списками ключевых слов. Поскольку на разных страницах они иногда немного отличаются, их замена при помощи функции поиска и замены может оказаться проблематичной. Но в данном случае это не представляет никакой проблемы, поскольку на каждую страницу программа Dreamweaver добавила один и тот же тег . Таким образом, программа заменит их все.
  • Повторите шаги 2 и 3, чтобы заменить тег
    Файл index. htm не содержит этого тега. Следует ввести его вручную или открыть любой из остальных четырех файлов и скопировать его оттуда. Тег располагается в нижней части каждой страницы.

    Определенные объекты веб-страниц имеют идентифицирующие атрибуты, которые, помимо прочего, позволяют сценариям получать доступ к объектам и управлять ими. В предыдущих версиях HTML имя атрибута использовалось, чтобы присвоить объекту уникальный идентификатор. В XHTML идентификатор задается не атрибутом name, а атрибутом id. К сожалению, многие разработанные в недалеком прошлом браузеры все еще не распознают атрибут id. В то же время, следует отметить, что со временем, возможно, современные браузеры не будут распознавать атрибут name. Проблема решается при помощи обоих атрибутов name и id с одинаковыми значениями, так, чтобы все браузеры могли их распознавать.

    Замена строк в исходном коде
    увеличить изображение

  • Сохраните index..


  • Содержание Назад Вперед

    Замена тегов

    Вследствие перехода от тегов, определяющих внешний вид страниц, к тегам для структурной разметки содержимого, не рекомендуется употреблять теги (задание начертания bold) и (задание курсивного начертания italic). Оба соответственно заменены тегами и . Большинство популярных браузеров отображают тег при помощи полужирного начертания, а тег – курсивного. Другими словами, замена тега на , а тега – на позволяет достичь соответствия стандартам и ускорить доступ к соответствующим элементам, не меняя внешнего вида документов в распространенных браузерах.
    Поскольку это изменение довольно простое и происходит без изменения масштаба, и ни один из этих четырех тегов не имеет атрибутов, можно с легкостью найти тег и заменить его на , а тег – на и т.д. Но Dreamweaver предоставляет еще более легкий способ замены тегов – действие Change Tag (Изменить тег) в диалоговом окне Find and Replace (Найти и заменить).
  • Не закрывая документ index.htm, выполните в меню Edit (Правка) команду Find and Replace (Найти и заменить). Убедитесь, что в ниспадающем меню Find in (Поиск) выбран пункт Entire Current Local Site (Поиск на текущем сайте).
    Настройки диалогового окна соответствуют запросам, производимым в предыдущих упражнениях, но теперь требуется их изменить.
  • Выберите опцию Specific Tag (Специальный тег) из раскрывающегося списка Search (Поиск).
    Остальная часть диалогового окна Find and Replace (Найти и заменить) кардинально изменится.
    Замена тегов
    увеличить изображение

    При выборе варианта Specific Tag (Специальный тег) становятся доступными несколько настроек, позволяющих управлять тегами. Поскольку основной целью является обновление HTML до XHTML, то отображаемые настройки оказываются невероятно полезными.
  • В раскрывающемся списке тегов, расположенном справа от раскрывающегося списка Search (Поиск), выберите пункт b.
    Первой задачей является замена тега на . Затем необходимо изменить тег . При выборе в списке элемента b программе отдается указание найти не только открывающий тег , но и закрывающий .
  • Щелкните на кнопке Remove Search Criterion (Удалить критерий поиска), чтобы удалить строку "With Attribute", которая добавлена по умолчанию.

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

  • Выберите опцию Change Tag (Специальный тег) в раскрывающемся списке Action (Действие), а в раскрывающемся списке To (на) – пункт strong.

    Список Action (Действие) содержит все варианты действий, которые Dreamweaver может совершить по отношению к тегу, указанному в списке HTML-тегов. Некоторые из них будут использоваться. В данном случае Dreamweaver должен найти все теги и и заменить их на теги и , не изменяя содержимого, расположенного между ними. К этому моменту экран должен выглядеть так же, как показано на рисунке.

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

  • Нажмите кнопку Replace All (заменить все), а затем в появившемся диалоговом окне нажмите Yes (Да).

    В результате откроется окно Results (Результаты), в котором будет видно, что Dreamweaver произвел замену указанных тегов по всему сайту.

  • Выполните следующие шаги для замены тегов на .

    При повторном открытии диалогового окна Find and Replace (Найти и заменить) Dreamweaver отобразит настройки предыдущей операции, и для того, чтобы указать другие теги, потребуется немного времени.

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

  • Сохраните index.htm.



  • Содержание Назад Вперед

    Переопределение элементов HTML

    Переопределение элементов HTML при помощи каскадных таблиц стилей

    Одно их преимуществ HTML заключается в наличии широкого диапазона логических тегов, достаточных для описания структуры большинства простых документов. HTML содержит шесть уровней заголовков (

    ,

    ,

    и т.д.), обычный текст (), списки ( и ) и их элементы (
  • ), а также таблицы (
  • , ,
    ), цитаты (
    ), адрес (
    ) и т.п. Все это позволяет быстро размечать документы, – при этом теги действительно описывают содержимое и структуру документа. Вдобавок, браузеры распознают эти теги и умеют их отображать. Например, содержимое, расположенное между тегами

    и

    отображается крупным шрифтом заголовка первого уровня с помощью полужирного начертания, со значительными интервалами над заголовком и под ним, в то время как содержимое тегов отображается обычным шрифтом на странице, к примеру, с помощью системного шрифта размером 12 пунктов.
    По умолчанию браузеры отображают все HTML-страницы согласно определенному стандарту. В частности, каждый заголовок второго уровня отображается с использованием шрифта Times New Roman размером 18 пунктов и полужирного начертания. Подобное единообразие при создании стиля оформления сайта не позволяет быстро выделить нужный структурный компонент среди других и надоедает пользователям. По этой причине HTML-разработчикам потребовался способ управления внешним видом веб-документов. Для решения этой проблемы в стандарты были добавлены специальные теги, определяющие дизайн веб-страниц, и, в частности, тег . Как известно из предыдущего урока, сейчас употреблять тег не рекомендуется, по большей части из-за неэффективности. При его использовании разработчики должны добавлять атрибуты форматирования для каждого абзаца, который должен отличаться от стандартных настроек браузера.
    С появлением спецификации CSS (Cascading Style Sheets – каскадные таблицы стилей) разработчики получили более мощный и гибкий способ настройки стиля оформления веб-документов. Возможно, самое простое и, конечно, самое мощное свойство CSS заключается в возможности задавать стили для стандартных HTML-тегов. Например, таблицы стилей позволяют указать браузеру, чтобы он отображал все содержимое, заключенное между тегами , шрифтом Verdana черного цвета размером 12 пунктов, а все заголовки 2 уровня –шрифтом Verdana фиолетового цвета и размером 16 пунктов с помощью полужирного начертания. Ключевым моментом в применении каскадных таблиц стилей является то, что все правила определяются в одном месте, и каждый тег и

    отображается согласно таблице стилей, не требуя дополнительного кода. Более того, если в дальнейшем внести в таблицу небольшие изменения, они сразу отобразятся по всему сайту. Те, кто уже разрабатывал страницы или даже работал с текстовыми процессорами, скорее всего, знакомы с преимуществами автоматических стилей.
    Помимо возможности управлять внешним видом существующих HTML-тегов, каскадные таблицы стилей позволяют разработчикам создавать собственные стили или классы , которые могут применяться к любому участку текста, вне зависимости от того, относится ли он к так называемым блоковым элементам, таким как , или к строке внутри обычного абзаца. Единственная проблема классов заключается в том, что их недостаточно определить, – чтобы применить класс, нужно добавить дополнительный код на самой странице (в отличие от HTML-тегов, внешний вид которых обновляется при каждом сохранении стиля). Для удобства Dreamweaver позволяет применять классы, не набирая код вручную.
    В первом упражнении создается ряд стилей, которые переопределяют наиболее распространенные HTML-теги, использованные на сайте. Затем эти стили будут прикреплены ко всем страницам сайта. К концу упражнения будет отформатирована большая часть текста на сайте, что позволит завершить создание стиля оформления к концу книги. В следующем упражнении создаются и применяются пользовательские стили, отвечающие за внешний вид в некоторых исключительных ситуациях. Остальные будут добавлены в нужных местах книги. Но, в первую очередь, следует переопределить HTML-элементы, чтобы создать дизайн, отвечающий стилю работы компании Newland Tours.
  • Откройте файл index.htm и выполните в меню Window (Окно) команду CSS Styles (CSS-стили), чтобы открыть одноименную панель CSS Styles (если панель не открыта).

    Стили создаются и применяются с помощью панели CSS Styles (CSS-стили). Те же самые команды и классы доступны через Property Inspector (Инспектор свойств).

    Кнопки у нижнего края панели CSS Styles иногда оказываются недоступными до тех пор, пока не выбрано одно из имен стиля (или, как в данном случае, когда отображается замещающий текст "no styles defined" ["ни один из стилей не определен"]).

    Переопределение элементов HTML при помощи каскадных таблиц стилей


  • Щелкните на кнопке New CSS Style (Создать CSS-стиль). В разделе Selector Type (Тип селектора) диалогового окна New CSS Style (Новый CSS-стиль) выберите вариант Tag (Тег), а в разделе Define in (Определить в) – вариант New Style Sheet File (Создать файл для новой таблицы стилей). В раскрывающемся списке Tag укажите элемент body. Нажмите OK.

    На этом шаге проводится подготовка к переопределению тега . Для этого программа Dreamweaver должна определить, что создаваемый стиль переопределяет HTML-тег и не является пользовательским. Группа переключателей Define in (Определить в) позволяет определить место хранения стиля: только в файле index.htm (если активен переключатель This document only [Только в этом документе]) или во внешней таблице стилей (при активной опции New Style Sheet File [Создать файл для новой таблицы стилей]).

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

    Переопределение элементов HTML при помощи каскадных таблиц стилей


  • В диалоговом окне Save Style Sheet File As (Сохранить файл для таблицы стилей как) убедитесь, что открыта папка newland и создайте новую папку с именем css. Дважды щелкните на новой папке, чтобы открыть ее. Назовите файл newland.cssи нажмите Save (Сохранить).

    На сайте Newland Tours применяется одна таблица стилей. Если таблиц несколько, рекомендуется хранить их в одном месте, например, в папке css, расположенной рядом с папкой images.


    Переопределение элементов HTML при помощи каскадных таблиц стилей


    Внизу диалогового окна в адресном поле URL Dreamweaver указывает путь к таблице стилей относительно текущего документа. В данном случае указан путь css/newland.css.

  • В раскрывающемся списке Font (Шрифт) категории Type (Тип) диалогового окна CSS Style Definition for body in newland.css (Определение CSS-стиля для body в newland.css) выберите пункт Verdana, Arial, Helvetica, sans-serif, а в списке Size (Размер) — 10 points (но не pixels [пикселы]!). Нажмите OK.

    Теперь следует задать настройки по умолчанию для всего текста на странице. Как внешний вид текста может определяться стилем тега , если текст находится внутри других наборов тегов, например, или

    ? Благодаря механизму наследования (inheritance) . Теги, вложенные внутрь других тегов, наследуют (теоретически) стили своих родительских тегов. Поскольку все содержимое страницы расположено внутри тега , оно должно наследовать информацию о стилях CSS, заданных для этого тега.

    Означает ли это, что текст, размещенный внутри тега

    , будет отформатирован шрифтом Verdana с размером 10 пунктов? Нет, поскольку по умолчанию браузеры имеют свои инструкции для форматирования тега

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

    ближе к тегам

    , чем к тегу , форматирование тега

    является более приоритетным.

    Переопределение элементов HTML при помощи каскадных таблиц стилей


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

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

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

    Примечание. При создании нового стиля Dreamweaver автоматически открывает CSS-файл. Это позволяет редактировать CSS-файл напрямую. В качестве дополнительной практики рекомендуется просмотреть CSS-код, который генерирует Dreamweaver, и попытаться изменить некоторые значения или добавить новые свойства (в выражении "font-size: 10pt;" font-size является свойством, а 10pt – значением). Для того чтобы убедиться в том, что использован правильный синтаксис, следует применить так называемые подсказки кода (code hints) Dreamweaver.




    Стили создаются и применяются с помощью панели CSS Styles (CSS-стили). Те же самые команды и классы доступны через Property Inspector (Инспектор свойств).

    Кнопки у нижнего края панели CSS Styles иногда оказываются недоступными до тех пор, пока не выбрано одно из имен стиля (или, как в данном случае, когда отображается замещающий текст "no styles defined" ["ни один из стилей не определен"]).

    Переопределение элементов HTML при помощи каскадных таблиц стилей


  • Щелкните на кнопке New CSS Style (Создать CSS-стиль). В разделе Selector Type (Тип селектора) диалогового окна New CSS Style (Новый CSS-стиль) выберите вариант Tag (Тег), а в разделе Define in (Определить в) – вариант New Style Sheet File (Создать файл для новой таблицы стилей). В раскрывающемся списке Tag укажите элемент body. Нажмите OK.

    На этом шаге проводится подготовка к переопределению тега . Для этого программа Dreamweaver должна определить, что создаваемый стиль переопределяет HTML-тег и не является пользовательским. Группа переключателей Define in (Определить в) позволяет определить место хранения стиля: только в файле index.htm (если активен переключатель This document only [Только в этом документе]) или во внешней таблице стилей (при активной опции New Style Sheet File [Создать файл для новой таблицы стилей]).

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

    Переопределение элементов HTML при помощи каскадных таблиц стилей


  • В диалоговом окне Save Style Sheet File As (Сохранить файл для таблицы стилей как) убедитесь, что открыта папка newland и создайте новую папку с именем css. Дважды щелкните на новой папке, чтобы открыть ее. Назовите файл newland.cssи нажмите Save (Сохранить).

    На сайте Newland Tours применяется одна таблица стилей. Если таблиц несколько, рекомендуется хранить их в одном месте, например, в папке css, расположенной рядом с папкой images.


    Переопределение элементов HTML при помощи каскадных таблиц стилей


    Внизу диалогового окна в адресном поле URL Dreamweaver указывает путь к таблице стилей относительно текущего документа. В данном случае указан путь css/newland.css.

  • В раскрывающемся списке Font (Шрифт) категории Type (Тип) диалогового окна CSS Style Definition for body in newland.css (Определение CSS-стиля для body в newland.css) выберите пункт Verdana, Arial, Helvetica, sans-serif, а в списке Size (Размер) — 10 points (но не pixels [пикселы]!). Нажмите OK.

    Теперь следует задать настройки по умолчанию для всего текста на странице. Как внешний вид текста может определяться стилем тега , если текст находится внутри других наборов тегов, например, или

    ? Благодаря механизму наследования (inheritance) . Теги, вложенные внутрь других тегов, наследуют (теоретически) стили своих родительских тегов. Поскольку все содержимое страницы расположено внутри тега , оно должно наследовать информацию о стилях CSS, заданных для этого тега.

    Означает ли это, что текст, размещенный внутри тега

    , будет отформатирован шрифтом Verdana с размером 10 пунктов? Нет, поскольку по умолчанию браузеры имеют свои инструкции для форматирования тега

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

    ближе к тегам

    , чем к тегу , форматирование тега

    является более приоритетным.

    Переопределение элементов HTML при помощи каскадных таблиц стилей


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

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

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

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

    Поддержка управления доступом при помощи скрытого элемента навигации

    Создание шаблона устранило необходимость многократного создания основных элементов для каждой новой страницы. В этом упражнении аналогичный жест будет сделан в сторону пользователей, получающих доступ к сайту при помощи экранного диктора с использованием функций синтезатора речи.
    Как известно, экранные дикторы — это браузеры, которые зачитывают содержимое страницы вслух, так что пользователи с нарушением зрения могут ознакомиться с содержимым сайта. Проблема заключается в том, что экранные дикторы начинают вслух воспроизводить содержимое страницы с самого начала. Это значит, что пользователи, использующие экранные дикторы, вынуждены прослушивать описание навигационной панели и всех ее активных областей при каждом посещении сайта.
    Проблема легко решается при помощи крошечного невидимого изображения и ссылки. Благодаря этим элементам, посетители смогут сразу перейти к основному содержимому страницы. А пользователи, посещающие страницу при помощи обычных браузеров, никогда не узнают о существовании подобного средства.
    Итак, вот решение проблемы. На страницу вставляется изображение размером 1x1 пиксел, и к нему присоединяется ссылка, пропускающая заголовок на каждой странице. Все это помещается на самый верх элемента , так что изображение будет первым элементом, который обнаружит экранный диктор.
  • В документе generic_template.htm. щелкните в любом месте внутри основной таблицы, после чего щелкните на теге в селекторе тегов. Затем один раз нажмите клавишу со стрелкой влево.
    Слева от таблицы появится крупный по размеру курсор. Это означает, что курсор находится сразу после открывающего тега .
    Поддержка управления доступом при помощи скрытого элемента навигации
    увеличить изображение

  • В категории Common (Общий) на панели Insert (Вставка) щелкните на кнопке Insert Image (Вставить изображение). Выберите изображение spacer.gif, расположенное в папке images и нажмите OK.
    Ширина и высота изображения spacer.gif равны одному пикселу, вследствие чего оно очень быстро загружается. Вдобавок прозрачность этого пиксела равна 100%, поэтому он невидим. Несмотря на это, изображение все еще имеет две особенности, нужные сейчас больше всего,– это возможность присоединить к нему гиперссылку и возможность добавить альтернативное описание.

    Поддержка управления доступом при помощи скрытого элемента навигации


  • Поместите курсор слева от слова "Page" в заголовке страницы. Выполните команды Insert\Named Anchor (Вставка\Именованный анкер). В одноименном диалоговом окне Named Anchor присвойте для закладки имя top и нажмите OK.

    Поддержка управления доступом при помощи скрытого элемента навигации


    В код будет добавлена закладка или анкер (якорь, anchor). В зависимости от настроек отображения под заголовком страницы может быть показан желтый значок с якорем. Этот значок относится к визуальной поддержке Dreamweaver и не отображается в браузере. На странице уже есть значок визуальной поддержки, соответствующий карте ссылок на панели навигации.

    Совет. Чтобы включить или отключить отображение этих значков, необходимо установить или снять соответствующий флажок, выполнив в меню View (Вид) команды Visual Aids\Invisible Elements (Визуальные помощники\Скрытые элементы).

    Поддержка управления доступом при помощи скрытого элемента навигации
    увеличить изображение


  • В области кода щелкните внутри тега , следующего сразу после открывающего тега .

    На панели Property Inspector (Инспектор свойств) отобразятся настройки этого изображения.

    Поддержка управления доступом при помощи скрытого элемента навигации
    увеличить изображение


  • В поле Alt на панели инспектора свойств введите "Skip to main page content".

    Атрибут alt используется для того, чтобы предоставить посетителю инструкции.

  • В поле Link (Ссылка) введите "#top".

    В результате, будет создана ссылка на именованный анкер, созданный чуть раньше.

  • В раскрывающемся списке Align (Выровнять) выберите пункт Left (По левому краю).

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

    Поддержка управления доступом при помощи скрытого элемента навигации
    увеличить изображение


  • Сохраните generic_template.htm.

    Шаблон готов к использованию.

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

    Хотя шаблон готов, на существующих страницах элемент навигации отсутствует. Для его добавления следует вставить скопированную строку кода на каждую страницу, а также вставить в верхней части каждой страницы именованный анкер.


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

    Поддержка управления доступом при помощи скрытого элемента навигации
    увеличить изображение


  • Откройте файл about.htm, щелкните в любом месте внутри основной таблицы на странице, а после этого в списке тегов выберите
  • и один раз нажмите кнопку со стрелкой вправо. В меню Edit (Правка) выполните команду Paste (Вставить).

    Теперь на страницу, в качестве элемента навигации (для перехода в нужное место на странице) будет вставлено изображение. Поскольку изображение является невидимым, то в режиме Design (Дизайн) оно не отобразится.

  • В режиме Design (Дизайн) поместите курсор слева от заголовка страницы и нажмите комбинацию клавиш (Ctrl)+(Alt)+(A) (Windows) или (Command)+(Option)+(A) (Macintosh), чтобы вставить именованный анкер. Снова назовите его "top" и нажмите OK.

    Очевидно, что анкер необходим для работы ссылки.

  • Повторите шаги 10 и 11 для каждой из оставшихся страниц, кроме страницы index.htm.

    Index.htm имеет другую структуру, поэтому она не будет работать таким же способом. Для этой страницы элемент навигации не является обязательным, но при большом желании его легко вставить.



  • СодержаниеНазадВперед

    Создание и применение пользовательских стилей CSS

    Определение стилей с помощью HTML-кода для изменения внешнего вида элементов веб-документов позволило быстро отформатировать большую часть сайта. Тем не менее, лучше оптимизировать сайт таким образом, чтобы для обновления его дизайна требовалось просто изменить CSS-файл. Для этого на любой странице используется панель CSS Styles (CSS-стили), после чего измененные настройки обновляются по всему сайту. Если сайт уже находится на сервере, нужно просто загрузить обновленный CSS-файл. Сами страницы заново загружать не требуется.
    Единственный недостаток, который не был явным до настоящего момента, заключается в ограниченности переопределения уже существующих HTML-стилей. Нельзя создавать пользовательские стили для текстовых элементов, не входящих в спецификацию HTML. Например, в колонке "Traveler’s Journal", расположенной на главной странице, указывается имя автора, но в HTML не существует тега . В этом упражнении показано, как создавать и применять пользовательские стили или классы.
  • Откройте index.htm. Убедитесь, что в правой части страницы есть раздел "Traveler’s Journal".
    Раздел "Traveler’s Journal" состоит из трех частей: заголовка, имени автора и текста статьи. Заголовок заключен в теги заголовка, а текст статьи размечен тегами , – так что в обоих случаях HTML-разметка отображает содержимое достаточно хорошо. Имя автора не так просто отнести к какой-то категории. Оно выделено с помощью полужирного начертания с использованием тега . Однако выделяется имя не потому, что оно является более значимым или информативным, чем остальной текст, а оттого, что выполняет другую функцию – содержит сведения об авторе. Поскольку в HTML не существует тега , здесь как нельзя лучше подойдет пользовательский стиль.
    Элемент, к которому прикреплен этот стиль (названный .author), будет просто выделяться при помощи полужирного начертания (в данном случае элементом является тег ). В браузере он будет выглядеть так же, как и сейчас. Но это изменение сделает код разметки более осмысленным, а также продемонстрирует механизм наследования в действии.

    Создание и применение пользовательских стилей CSS


  • Нажмите кнопку New CSS Style (Создать CSS-стиль). В разделе Selector Type (Тип селектора) диалогового окна New CSS Style (Новый CS-стиль) укажите вариант Class (Класс) и убедитесь, что в группе переключателей Define in (Определить в) все еще выбран файл newland.css. В текстовое поле Name (Имя) введите .author. Нажмите OK.

    Создание и применение пользовательских стилей CSS


    Точка перед именем класса означает, что стиль не переопределяет все теги (или другие теги, к которым он применяется), а определяет подчиненность стиля HTML-тегу. На практике это позволяет определить внешний вид некоторых тегов . В данном случае требуется именно эта особенность, поскольку только отдельные абзацы предназначены для ввода сведений об авторе (-ах).

    Другое преимущество пользовательских стилей заключается в том, что они применяются к различным элементам HTML. Например, класс .author можно применить не только к тегам , но и к тегам или
    .

  • В диалоговом окне CSS Style Definition (Определение CSS-стиля) установите значение параметра Weight (Начертание), равным bold (полужирное), и нажмите OK.

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

    Для ASP:

    <% Do Until rs_countries.EOF %>
    <% rs_countries.MoveNext() Loop %>


    Для ColdFusion:



    Для PHP:



    На этом шаге без использования модели поведения Dreamweaver создается повторяющаяся область. Несмотря на незначительные различия в коде все три сценария выполняются по единой логике. В каждом сценарии перед повторяющимся участком и после него (область, ограниченная тегами
    ) добавляется код. В каждом определяется набор записей и создается цикл, который прерывается только тогда, когда заканчиваются записи в наборе. В ASP для проверки этого условия применяется функция EOF, в ColdFusion цикл создается автоматически, когда внутри тега определяется запрос (параметр query), а в PHP применяется функция mysql_fetch_assoc().

    На следующем шаге в ячейки таблицы будет добавлено содержимое, состоящее из смешанного кода HTML и ASP, ColdFusion или PHP.

    Создание основной страницы

  • Между тегами


  • Поскольку код представляет собой статический HTML, он подходит как для ASP, так и для ColdFusion и PHP (за исключением расширений файлов в атрибуте href — для ColdFusion и PHP соответственно .cfm и .php вместо .asp). Вместо динамического кода применяются заменители, что дает возможность проверить правильность написания HTML.

    Создание основной страницы
    увеличить изображение

  • Замените статический код во всех трех ячейках динамическими данными, как показано ниже.

    Для ASP:




  • Для ColdFusion:



    Для PHP:



    В книге встречалось немало кода ASP, ColdFusion и PHP, выводящего данные на страницу, так что чтение приведенных сценариев не должно вызывать затруднений, особенно если вспомнить, что в ASP код <%= означает <%Response.Write().

    Создание основной страницы
    увеличить изображение

  • Сохраните файл, загрузите его на сервер и протестируйте в браузере.

    На страницу выводится таблица, количество строк в которой равно количеству записей в наборе. Если навести указатель мыши на одну из ссылок, появится не только URL-адрес, но и прикрепленный к нему параметр countryID, соответствующий выбранной стране.

    Создание основной страницы
    увеличить изображение

    Закройте файл admin_cp_master.asp.



  • Содержание Назад Вперед

    Создание сценария для добавления данных

    Форма полностью готова. Вся проблема в том, что пока не существует сценария, который будет добавлять данные формы в базу данных. В этом упражнении такой сценарий будет создан. Он будет выполнять те же действия, что и модель поведения, но при этом окажется несколько меньше и на этот раз будет понятен.
  • Откройте документ admin_cp_insert_processor.asp в режиме Code (Код).
    Файл не должен содержать никакого кода. Если код присутствует, следует его удалить.
    Прежде, чем добавить сценарий, нужно подумать, какие действия он должен выполнять. Он должен извлекать данные, введенные в форму и вставлять их в виде новой записи в таблицу tbl_country. После этого он должен перевести пользователя на страницу admin_cp_master.asp.
  • Вставьте код, создающий подключение к базе данных.
    Для ASP:
    <% Dim dbConn set dbConn = server.CreateObject("adodb.connection") dbConn.open("newland") %>
    Для ColdFusion:

    Для PHP:

    Это практически тот же код, что использовался в предыдущем упражнении для создания набора записей, заполняющего список формы. Разница состоит в том, что в данном случае извлекать набор записей не требуется. Напротив, данные добавляются в базу.
    Совет. Поскольку при подключении страниц к базе данных постоянно применяется один и тот же код, многие разработчики хранят шаблон кода для присоединения к базе данных в отдельном файле, который и включают в каждый документ. Это может быть специальный подключаемый файл, например, Application.cfm или обычный подключаемый файл, доступ к которому осуществляется при помощи функции, например, require_once() (PHP). Фактически именно это делает Dreamweaver в случае с ASP и PHP при "регистрации соединения". Другими словами, подключение conn_newland, которое применялось разработчиками ASP и PHP в других разделах книги, является обычным подключаемым файлом, содержащим основную информацию, необходимую для подключения к базе данных newland_tours.

  • В пустой строке, которая осталась на предыдущем шаге, добавьте код, который вставляет данные в таблицу.

    Для ASP:

    dbConn.Execute("INSERT INTO tbl_country (region, countryName, population, country_currency, description, imageURL, imageALT) VALUES ('" & Request.Form("region") & "', '" & Request.Form("countryName") & "', ' " & Request.Form("population") & "', '" & Request.Form("country_currency") & "', '" & Request.Form("description") & "', '" & Request.Form("imageURL") & "', '" & Request.Form("imageALT") & "');")

    Для ColdFusion:

    INSERT INTO tbl_country (region, countryName, population, country_currency, description, imageURL, imageALT) VALUES ('#form.region#', '#form.countryName#', '#form.population#','#form.country_currency#', '#form.description#', '#form.imageURL#', '#form.imageALT#')

    Для PHP:

    $query_rs_insertCountry = "INSERT INTO tbl_country (region, countryname, population, country_currency, description, imageURL, imageALT) VALUES ('".$_POST['region']."', '".$_POST['countryName']."', '".$_POST['population']."', '".$_POST['country_currency']."', '".$_POST['description']."', '".$_POST['imageURL']."', '".$_POST['imageALT']."');"; $rs_insertCountry = mysql_query($query_rs_insertCountry);

    Создание сценария для добавления данных
    увеличить изображение

    Понять этот код окажется проще, если вспомнить синтаксис SQL-оператора INSERT:

    INSERT INTO tbl_table (field1,field2,field3) VALUES ('value1', 'value2', 'value3')

    В сценариях для ASP, ColdFusion и PHP содержатся SQL-операторы, использующие этот синтаксис. Но поскольку переменным присваиваются действующие значения, требуется дать серверу указание извлекать значения из соответствующих выражений перед добавлением в базу данных. Для этого в код ColdFusion вставляется несколько знаков #, а в код ASP и PHP – много знаков конкатенации.


    Совет. Пользователи ASP и PHP могут воспользоваться таким преимуществом, как выделение кода цветом. Если в коде есть ошибка, его цвет, как правило, меняется. Это помогает находить ошибки еще до тестирования страницы. В коде для ASP функция Request.Form всегда должна быть выделена фиолетовым цветом, а имена полей формы – зеленым. Знаки &, используемые для конкатенации, должны выделяться синим оттенком. В коде для PHP строковые литералы (в том числе, запятые и одинарные кавычки) всегда выделяются красным. $_POST всегда выделяется голубым, а точки и квадратные скобки – темно-синим цветом.

    Примечание. В коде для ASP и PHP применяются как обычные ("), так и одинарные (') кавычки, что может показаться непонятным. Содержимое, заключенное в двойные кавычки относится к ASP или PHP, это, к примеру, строковые литералы, которые должны добавляться в код страницы в неизменном виде. Данные, заключенные в одинарные кавычки, относятся к SQL-запросу и представляют значения, которые добавляются в базу данных.

  • Добавьте код для перевода пользователя на основную страницу после добавления данных в базу.

    Для ASP перед закрывающим %>:

    Response.Redirect("admin_cp_master.asp") Для ColdFusion: Для PHP перед закрывающим ?>: header("Location: admin_cp_master.php");

    Поскольку при возникновении проблем ASP, ColdFusion и PHP выдают сообщение об ошибке, код перевода на основную страницу будет выполнен, только если данные успешно добавлены в базу.

    Чтобы убедиться в работоспособности страницы, необходимо протестировать ее (в форму можно ввести любые данные). После добавления данных загрузится страница admin_cp_master.asp, создание которой еще не завершено. Но кроме списка на основной странице есть и другой способ убедиться в успешности добавления данных. Для этого следует загрузить страницу с профилями стран. Поскольку приложение предназначено для отображения всей информации о странах, содержащейся в базе данных, добавленная страна тоже окажется здесь. Неважно, если данные профиля вымышлены, – чуть позже будет создано приложение для удаления данных и для его тестирования потребуется одна или две выдуманные страны, так что сейчас следует оставить добавленную страну в базе данных.

    Создание сценария для добавления данных
    увеличить изображение

    Примечание. При заполнении формы не следует использовать апострофы, так как в этом случае появится сообщение об ошибке. Эта проблема будет решена позже.

    Примечание. Пока в папку images не будет загружено изображение с тем же именем, что и указанное в форме, ссылка на изображение не будет работать.



  • Содержание Назад Вперед

    Создание сценария для обновления записей

    По сравнению с предыдущим упражнением последние два покажутся слишком легкими. Сначала будет создана страница, содержащая сценарий обновления записи.
  • Откройте файл admin_cp_update.asp и в режиме Code (Код) удалите все его содержимое.
    Так же, как и в прошлый раз, страница создается с нуля, так как содержит только сценарий.
  • Введите код, создающий соединение с базой данных.
    Для ASP:
    <% Dim dbConn set dbConn = server.CreateObject("adodb.connection") dbConn.open("newland")
    %>
    Для ColdFusion:


    Для PHP:

    После создания соединения можно сформировать SQL-запрос.
  • В пустой строке, которая осталась на предыдущем шаге, введите код, необходимый для обновления базы данных.
    Для ASP (весь код в одной строке):
    dbConn.Execute("UPDATE tbl_country SET region='" & Request.Form("region") & "', countryName='" & Request.Form("countryName") & "', population='" & Request.Form("population") & "', country_currency='" & Request.Form("country_currency") & "', description='" & Request.Form("description") & "', imageURL='" & Request.Form("imageURL") & "', imageALT='" & Request.Form("imageALT") & "' WHERE countryID=" & Request.QueryString("countryID"))
    Для ColdFusion (не запрещается разбивать код на строки):
    UPDATE tbl_country SET region='#form.region#', countryName='#form.countryName#', population='#form.population#', country_currency='#form.country_currency#', description='#form.description#', imageURL='#form.imageURL#', imageALT='#form.imageALT#' WHERE countryID=#URL.countryID#

    Для решения этой проблемы следует удалить из текста все апострофы. Но это решение не самое лучшее, поскольку синтаксическая конструкция для представления текста будет неверной.

    В последующих шагах на страницу будет добавлен код, который перед добавлением измененного текста в базу данных автоматически заменяет знаки апострофа соответствующей последовательностью символов ('). SQL проигнорирует последовательность символов (что и требуется), а при выведении данных на странице браузер преобразует код последовательности обратно в знак апострофа. Ни конечный пользователь, ни сотрудник компании, управляющий контентом сайта Newland Tours, не будут даже знать о том, что происходит в коде. Единственное заметное изменение (только при использовании ASP) заключается в том, что в базе данных вместо апострофов появятся последовательности символов '.

  • Только пользователям ASP. Снова откройте страницу admin_cp_update_processor.asp.

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

  • Только пользователям ASP. В верхней части страницы между открывающим элементом <% и строкой Dim dbConn добавьте следующий сценарий:

    Dim description_fixed, imageALT_fixed description_fixed = Replace(Request.Form("description"),"'","'") imageALT_fixed = Replace(Request.Form("imageALT"),"'","'")

    Создание сценария для обновления записей
    увеличить изображение

    ASP содержит встроенную функцию Replace(), в которой указывается:

  • переменная, в которой следует вести поиск,
  • строка, которую нужно найти, и строка, на которую следует заменить найденную.


  • Если сейчас протестировать файл, то сообщение об ошибке появится все равно, поскольку, несмотря на наличие переменных, в которых хранятся значения двух текстовых областей, содержимое этих переменныхне вставлено в форму. Для этого следует внести изменения в SQL код.

  • Только пользователям ASP. Замените две переменные в SQL-запросе, так, чтобы оператором UPDATE использовались их исправленные версии.


    Следует заменить код description='" & Request.Form("description") & "' на description='" & description_fixed & "', а imageALT='" & Request.Form("imageALT") & "' на imageALT='" & imageALT_fixed & "'.

    После завершения этого шага нужно обратить внимание на то, что после участка кода с переменной description стоит запятая, а после участка кода imageALT (который является последним) запятой нет.

    Создание сценария для обновления записей
    увеличить изображение

  • Только пользователям ASP. Сохраните страницу, загрузите ее на сервер и протестируйте.

    На этот раз обновляются все записи даже для стран, в описаниях и альтернативных текстах которых содержатся апострофы.

    Поскольку способ решения проблемы апострофов теперь известен, следует устранить ее и на странице для добавления стран.

  • Только пользователям ASP. Откройте страницу admin_cp_insert_ processor.asp и устраните описанную выше проблему.

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




  • Для PHP:

    //Update database $query_updateCountry = "UPDATE tbl_country SET region='".$_POST['region']."', countryName='".$_POST['countryName']."', population='".$_POST['population']."', country_currency='".$_POST['country_currency']."', description='".$_POST['description']."', imageURL='".$_POST['imageURL']." ', imageALT='".$_POST['imageALT']."' WHERE countryID=".$_GET['countryID']; $updateCountry = mysql_query($query_updateCountry);

    И вновь выделение цветом облегчает работу с кодом, особенно при использовании ASP или PHP. Важно убедиться в том, чтобы в конце кода перед предложением WHERE случайно не была добавлена запятая.

    Создание сценария для обновления записей
    увеличить изображение

  • Добавьте на страницу код, необходимый для перемещения пользователя на основную страницу.

    Для ASP (строка над закрывающим элементом %>):

    Response.Redirect("admin_cp_master.asp")

    Для ColdFusion (строка после закрывающего тега ):



    Для PHP (перед закрывающим тегом ?>):

    header("Location: admin_cp_master.php");

    Код переводит пользователя на основную страницу, где он может убедиться в том, что изменения успешно сохранены.

    Создание сценария для обновления записей
    увеличить изображение

  • Сохраните файл и загрузите его на сервер. Запустите основную страницу (F12), выберите страну, измените информацию о ней и нажмите кнопку Submit. Снова запустите страницу для обновления той же страны, чтобы восстановить первоначальное значение.

    В результате создание сценария для обновления завершено. Следует отметить, что он замечательно работает, – по крайней мере, для некото рых стран. Но если с помощью ASP попытаться изменить данные для Аргентины, Таиланда, Индии и некоторых других стран, появится сообщение об ошибке. Причина ее возникновения состоит в том, что в тексте описаний (description) или в альтернативном тексте к изображению (imageALT) могут содержаться знаки апострофа, которые непонятны обработчику кода SQL (PHP и ColdFusion автоматически пропускают этот символ, поэтому в случае с ColdFusion и PHP ошибки не возникнет).


    Для решения этой проблемы следует удалить из текста все апострофы. Но это решение не самое лучшее, поскольку синтаксическая конструкция для представления текста будет неверной.

    В последующих шагах на страницу будет добавлен код, который перед добавлением измененного текста в базу данных автоматически заменяет знаки апострофа соответствующей последовательностью символов ('). SQL проигнорирует последовательность символов (что и требуется), а при выведении данных на странице браузер преобразует код последовательности обратно в знак апострофа. Ни конечный пользователь, ни сотрудник компании, управляющий контентом сайта Newland Tours, не будут даже знать о том, что происходит в коде. Единственное заметное изменение (только при использовании ASP) заключается в том, что в базе данных вместо апострофов появятся последовательности символов '.

  • Только пользователям ASP. Снова откройте страницу admin_cp_update_processor.asp.

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

  • Только пользователям ASP. В верхней части страницы между открывающим элементом <% и строкой Dim dbConn добавьте следующий сценарий:

    Dim description_fixed, imageALT_fixed description_fixed = Replace(Request.Form("description"),"'","'") imageALT_fixed = Replace(Request.Form("imageALT"),"'","'")

    Создание сценария для обновления записей
    увеличить изображение

    ASP содержит встроенную функцию Replace(), в которой указывается:

  • переменная, в которой следует вести поиск,
  • строка, которую нужно найти, и строка, на которую следует заменить найденную.


  • Если сейчас протестировать файл, то сообщение об ошибке появится все равно, поскольку, несмотря на наличие переменных, в которых хранятся значения двух текстовых областей, содержимое этих переменныхне вставлено в форму. Для этого следует внести изменения в SQL код.

  • Только пользователям ASP. Замените две переменные в SQL-запросе, так, чтобы оператором UPDATE использовались их исправленные версии.


    Следует заменить код description='" & Request.Form("description") & "' на description='" & description_fixed & "', а imageALT='" & Request.Form("imageALT") & "' на imageALT='" & imageALT_fixed & "'.

    После завершения этого шага нужно обратить внимание на то, что после участка кода с переменной description стоит запятая, а после участка кода imageALT (который является последним) запятой нет.

    Создание сценария для обновления записей
    увеличить изображение

  • Только пользователям ASP. Сохраните страницу, загрузите ее на сервер и протестируйте.

    На этот раз обновляются все записи даже для стран, в описаниях и альтернативных текстах которых содержатся апострофы.

    Поскольку способ решения проблемы апострофов теперь известен, следует устранить ее и на странице для добавления стран.

  • Только пользователям ASP. Откройте страницу admin_cp_insert_ processor.asp и устраните описанную выше проблему.

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



  • Содержание Назад Вперед

    Создание сценария для удаления записей

    Написать сценарий, удаляющий профили стран, гораздо проще, чем сценарий для обновления. Как и прежде, доступ к сценарию пользователи получают с основной страницы, создание которой уже завершено, поэтому осталось только добавить сценарий, удаляющий записи из базы данных.
  • Откройте файл admin_cp_delete_processor.asp и в режиме Code (Код) удалите все его содержимое.
    Теперь страница будет содержать только короткий сценарий и код, переводящий пользователя на основную страницу, так что HTML кода на ней быть не должно.
  • Добавьте на страницу код, предназначенный для соединения с базой данных.
    Для ASP:
    <% Dim dbConn set dbConn = server.CreateObject("adodb.connection") dbConn.open("newland") %>
    Для ColdFusion:

    Для PHP:

    Далее следует добавить код, отправляющий SQL запрос.
  • В пустой строке, оставленной в предыдущем шаге, добавьте код, удаляющий выбранную запись, на которую указывает параметр URL - адреса.
    Для ASP (весь код в одну строку):
    dbConn.Execute("DELETE FROM tbl_country WHERE countryID=" & Request.QueryString("countryID"))
    Для ColdFusion (разрешено разбивать код на строки):
    DELETE FROM tbl_country WHERE countryID=#URL.countryID#
    Для PHP:
    $query_deleteCountry = "DELETE FROM tbl_country WHERE countryID=".$_GET['countryID']; $deleteCountry = mysql_query($query_deleteCountry);
    При использовании оператора DELETE не требуется указывать каждое поле, которое необходимо удалить, поскольку удаляются все поля записи. Это облегчает процесс написания кода. Но если при этом случайно забыть о предложении WHERE и не добавить его в код, то будет удалена вся таблица.

  • Добавьте на страницу код, необходимый для перехода пользователя на основную страницу.

    Для ASP (строка над закрывающим элементом %>):

    Response.Redirect("admin_cp_master.asp")

    Для ColdFusion (строка после закрывающего тега ):



    Для PHP (перед закрывающим тегом ?>):

    header("Location: admin_cp_master.php");

    Этот код переводит пользователя на основную страницу, где он может убедиться в том, что удаление прошло успешно.

    Создание сценария для удаления записей
    увеличить изображение

  • Сохраните файл и загрузите его на сервер. Нажмите клавишу (F12), чтобы открыть страницу admin_cp_master.asp в браузере и удалите страну, добавленную в одном из предыдущих упражнений урока.

    Как и написано в инструкции, удаление производится сразу же, и отменить его невозможно – не поможет даже кнопка Back (Назад).

    Создание сценария для удаления записей
    увеличить изображение



  • 

        Работа с информацией: Cистемы - Технологии - Рынок


    и ). Так что все, что требуется от стиля, – наследовать всю информацию о внешнем виде и выделять текст с помощью полужирного начертания.

    Создание и применение пользовательских стилей CSS


  • Создайте новый класс с именем .navhead со следующими параметрами: Size (Размер) = 12 points (пунктов); Weight (Начертание) = bold (полужирное); Color (Цвет) = #505748.

    Этот стиль будет применен к заголовку, расположенному вверху навигационной панели в левом столбце файла index.htm.

  • Создайте новый класс .caption с единственным параметром Style (Стиль) = italic (курсив).

    Этот стиль будет использоваться для всех подписей к изображениям на сайте. На данный момент они отформатированы при помощи тегов . Большинство браузеров выделяет текст, помещенный между этими тегами, курсивом. И снова .caption описывает содержимое лучше, чем тег , и создание этого стиля позволит управлять внешним видом всех подписей на сайте.


    К этому моменту на панели CSS Styles (CSS-стили) должно присутствовать девять стилей. Сейчас этого достаточно, хотя в процессе разработки, по мере необходимости, на панель будут добавляться и другие стили.

    Создание и применение пользовательских стилей CSS


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

  • В документе index.htm щелкните в любом месте текста "Explore the Site" вверху навигационной панели. Щелкните правой кнопкой мыши (Windows) или кнопкой мыши, одновременно удерживая нажатой клавишу (Control) (Macintosh), на теге в селекторе тегов, а затем в контекстном меню выберите пункт Remove Tag (Удалить тег).

    Это действие удалит из кода тег , не уничтожая содержимое документа. Он больше не нужен, поскольку созданный ранее класс .navhead уже имеет встроенный параметр bold.

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

    Создание и применение пользовательских стилей CSS


    Совет. Селектор тегов (tag selector) – очень полезный инструмент, позволяющий выделить любой нужный тег. Одна из проблем редактирования кода при работе с графическими программами заключается в том, что часто бывает трудно сообщить программе редактирования, какой из вложенных элементов требуется выделить. В частности, если требуется добавить фоновый цвет к строке текста, редактор может "решить", что нужно изменить фоновый цвет ячейки
  • , в которую вставлена эта строка.

    Совет. С этим связана проблема отображения панели Property Inspector (Инспектор свойств) для нужного тега. Чтобы изменить атрибут cellpadding, используемый при компоновке таблицы для заполнения ячеек, нужно выделить элемент , однако с равной вероятностью может оказаться выделен один из десятков элементов внутри таблицы. На помощь вновь приходит селектор тегов. Следует щелкнуть в любом месте страницы, внутри атрибута, который требуется изменить, а после этого выбрать нужный тег в селекторе тегов. Параметры этого тега отобразятся на панели инспектора свойств, а в контекстном меню появятся дополнительные настройки для его изменения.


    Создание и применение пользовательских стилей CSS


  • Нажмите кнопку New CSS Style (Создать CSS-стиль). В разделе Selector Type (Тип селектора) диалогового окна New CSS Style (Новый CS-стиль) укажите вариант Class (Класс) и убедитесь, что в группе переключателей Define in (Определить в) все еще выбран файл newland.css. В текстовое поле Name (Имя) введите .author. Нажмите OK.

    Создание и применение пользовательских стилей CSS


    Точка перед именем класса означает, что стиль не переопределяет все теги (или другие теги, к которым он применяется), а определяет подчиненность стиля HTML-тегу. На практике это позволяет определить внешний вид некоторых тегов . В данном случае требуется именно эта особенность, поскольку только отдельные абзацы предназначены для ввода сведений об авторе (-ах).

    Другое преимущество пользовательских стилей заключается в том, что они применяются к различным элементам HTML. Например, класс .author можно применить не только к тегам , но и к тегам или
    .

  • В диалоговом окне CSS Style Definition (Определение CSS-стиля) установите значение параметра Weight (Начертание), равным bold (полужирное), и нажмите OK.

    В этом случае нет необходимости определять другую информацию, например, шрифт или его размер, поскольку она уже указана в родительском теге (в данном случае, в тегах


  • Блок PHP
    увеличить изображение

  • Только пользователям ColdFusion. Перепишите код, чтобы он выглядел таким образом (весь код помещался в одной строке):

    #rs_countryNames.countryName#



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

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

  • Сохраните файл, загрузите его на сервер и протестируйте.



  • Теперь страница работает и отображается надлежащим образом.

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

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

    Динамическое формирование URL-адресов

    В этом задании будет создан список ссылок, по которым посетитель сможет перейти на страницу с информацией о нужной стране. Поскольку список должен формироваться динамически и так как все ссылки указывают на одну страницу (различия заключаются только в параметрах URL-адреса), в этом упражнении следует позаботиться о некоторых моментах. Для этого все названия стран должны выводиться на страницу таким образом, чтобы посетитель смог их прочитать. Для каждого из этих названий следует назначить ссылку, указывающую на страницу profiles_detail.asp. И, наконец, требуется прикрепить к каждому URL-адресу соответствующие значения полей countryID и countryName, необходимые при формировании страницы profiles_detail.asp.
  • Поместите курсор в строке, расположенной под текстом страницы (в случае необходимости, создайте новый абзац). На панели Bindings (Привязки) разверните список из наборов записей для разных стран Recordset (rs_countryNames) и выберите в нем вариант countryName (НазваниеСтраны), а потом нажмите Insert (Вставить).
    Подобные операции уже производились ранее. Значение поля countryName прикрепляется к текущему абзацу на странице.
    Совет. Существует и другой способ прикрепления динамических данных на страницу. Нужный элемент просто перетаскивается из панели Bindings (Привязки) на страницу. Единственный недостаток этого метода заключается в вероятности случайного прикрепления данных к другому элементу HTML, так что применение этого подхода требует повышенного внимания и осторожности.
    Динамическое формирование URL-адресов
    увеличить изображение

  • Выделите динамический текст "{rs_countryNames.countryName}", а затем в поле Link (Ссылка) на панели Property Inspector (Инспектор свойств) введите "abc" (или другой набор символов).
    В ближайшее время к URL-адресу будут добавлены динамические данные. После этого любая информация, введенная в поле, будет заменена другой. Однако, если оставить поле Link (Ссылка) незаполненным, Dreamweaver не сможет добавить динамический параметр к тегу , поскольку тег не будет создан. Другими словами, значение abc вводится в поле в качестве обходного маневра.

    Динамическое формирование URL-адресов
    увеличить изображение

  • Не снимая выделение с динамического текста, щелкните на теге в селекторе тегов, а затем на панели Bindings (Привязки) щелкните на варианте countryID, а в меню Bind To (Прикрепить к) выберите пункт a.href и нажмите кнопку Bind Прикрепить).

    На этом шаге значение поля countryID прикрепляется к атрибуту href тега
    . Значение abc, введенное на предыдущем шаге, удалено.

    Совет. Иногда на этом шаге список Bind To (Прикрепить к) оказывается недоступным (особенно при работе с ColdFusion). Для решения этой проблемы перед выделением countryID на панели Bindings (Привязки), следует в селекторе тегов выбрать тег
    .

    Единственная проблема состоит в том, что в качестве значения атрибута href теперь выступают значения поля countryID, такие как 6 или 9. Поскольку на данный момент на сайте не существует страниц с такими названиями, ссылка оказывается неработоспособной.

    Динамическое формирование URL-адресов

  • Поместите курсор в поле Link (Ссылка) на панели Property Inspector (Инспектор свойств) перед <% = в ASP, в ColdFusion или
    profiles_detail.asp?countryID=

    Теперь текст должен следовать за кодом ASP, ColdFusion или PHP. При открытии страницы, в результате обработки кода ASP, PHP или ColdFusion, получится одно число, – так что ссылка, например, на информацию об Аргентине будет содержать следующий URL-адрес: profiles_detail.asp?countryID=15.

    Совет. .Следует помнить, что для ColdFusion и PHP указанное в адресе расширение .asp должно заменяться соответственно на .cfm и .php.

    Динамическое формирование URL-адресов
    увеличить изображение

  • Сохраните файл, загрузите его на сервер и нажмите клавишу (F12), чтобы протестировать. Наведите указатель мыши на ссылку (но не щелкайте).

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

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


    Примечание. В браузере Internet Explorer для Windows XP или в Safari для Mac OS X строка состояния может не отображаться, поэтому в левом нижнем углу не будет URL-адреса. В обоих браузерах для ее просмотра следует в меню View (Вид) выполнить команду Status Bar (Строка состояния).

    Динамическое формирование URL-адресов
    увеличить изображение

  • Вернитесь в Dreamweaver на указанную страницу и вновь выделите динамический текст. Щелкните на теге в селекторе тегов, а затем на панели Server Behaviors (Модели поведения серверов) (после выполнения команд Window\Server Behaviors [Окно\Модели поведения серверов]) щелкните на кнопке Add Server Behaviors (Добавить модели поведения серверов) ("+") и выберите в списке пункт Repeat Region (Повторяющаяся область).

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

    Динамическое формирование URL-адресов

  • В диалоговом окне Repeat Region (Повторяющаяся область) оставьте без изменения опцию в поле со списком Recordset (Набор записей), а в группе переключателей Show (Показать) установите переключатель All records (Все записи).

    Активная опция в раскрывающемся списке Recordset (Набор записей) указывает значение набора записей, которое следует повторять. На этой странице существует только один набор записей, так что заданную опцию менять не требуется.

    Выбор переключателей в группе Show (Показать) позволяет задать для просмотра определенное количество записей (# # Records at a time [Записи за определенное время]), так и отображение всех записей (All records [Все записи]). Эта возможность называется постраничным выводом наборов записей (recordset paging). Порой для размещения наборов записей на странице требуется выводить так много строк или данных, что со страницей становится невозможно работать. Поэтому на одну страницу выводится, как правило, по 10 или 25 результатов. Этот способ применяется большинством поисковых систем. В данном случае список из 16 стран вполне умещается на одной странице, поэтому можно отобразить все данные сразу.


    Динамическое формирование URL-адресов

  • Сохраните файл, загрузите его на сервер и протестируйте.

    В списке отобразятся 16 стран, и, если навести указатель мыши на ссылку (но не щелкать), то в строке состояния будет отображаться адрес с отдельным значением countryID для каждой страны.

    Единственная проблема заключается в форматировании. Все страны последовательно размещаются в строке, одна за другой (ASP и ColdFusion), либо в одном столбце, но довольно далеко друг от друга (PHP).

    Динамическое формирование URL-адресов
    увеличить изображение

    Динамическое формирование URL-адресов
    увеличить изображение

    В сценариях ASP, ColdFusion и PHP используются циклы. В программировании циклы – это конструкции, в которых определенные действия в теле цикла повторяются многократно заданное число раз до тех пор, пока какое-то событие не прервет этот цикл. Циклы применяются для управления данными, точно так же, как и условный оператор выбора (if…else). Разница заключается в том, что в условных конструкциях все действия выполняются однократно, если выполняется какое-то условие, а в циклах действие повторяется, пока не будет выполнено условие. Цикл был создан в момент добавления на страницу модели поведения Repeated Region (Повторяющаяся область). Повторяющаяся область – это участок кода для вывода текста, расположенный внутри цикла, в результате чего определенная область выводится на страницу несколько раз. В данном случае в область входят название страны и соответствующая ему ссылка. Условие, которое должно выполняться для прерывания цикла и перехода к дальнейшей обработке страницы заключается в том, что должны отобразиться все записи набора.

  • Вернитесь в Dreamweaver и переключитесь в режим Code (Код), затем найдите динамический код, расположенный прямо под абзацем, начинающимся со слов "The following list shows…" ("В следующем списке показаны…")



  • Чтобы понять, почему список отображается не так, как нужно, следует посмотреть код цикла и попытаться выявить причину. Рекомендуется разобраться со всеми тремя участками кода, а не только с кодом, соответствующим выбранной модели.

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

    Добавление динамических изображений и форматирование численности населения

    К этому моменту создание основной части страницы с информацией о стране завершено. Осталось немного приукрасить внешний вид. В этом задании на страницу будет добавлен код, динамически открывающий то или иное изображение, а также будет применена функция для форматирования численности населения. Эта функция подобна функции форматирования валюты, которая использовалась ранее. Проблема с названием региона будет устранена позже в этом же уроке.
    Наверняка возникает вопрос, как динамически отобразить нужное изображение, если базы данных (Access или MySQL) не могут включать файлы с изображениями. Для этого следует поместить в базу данных адрес изображения. Все адреса уже содержатся в базе. Каждой стране и каждому туру соответствует свое изображение. Все они содержатся в папке Images. Адреса изображений содержатся в отдельном поле базы данных. Чтобы отобразить изображение, следует динамически поместить соответствующий URL-адрес внутри статического HTML-элемента .
  • В документе profiles_detail.asp переключитесь в режим Design (Дизайн) и поместите курсор перед тегом

    , соответствующим элементу {rs_countries.countryName}.
    Теперь в данной позиции будет добавлено изображение.

  • В главном меню выполните команды Insert\Image (Вставка\Изображение). Вверху (Windows) или внизу (Macintosh) диалогового окна Select Image Source (Выбор источника изображения) выберите вариант Data Sources (Источники данных).
    Обычно для добавления изображения следует указать нужный файл, после чего Dreamweaver автоматически вставит путь к изображению. Но поскольку в данном случае добавляется динамическое изображение, указать путь заранее невозможно. Вариант Data Sources позволяет получить доступ к набору записей, в котором содержится путь к динамическому изображению.
    Добавление динамических изображений и форматирование численности населения

  • Выберите в списке пункт imageURL и нажмите OK.
    На страницу будет вставлен значок, соответствующий динамическому изображению. Прежде чем продолжать, нужно хотя бы бегло просмотреть код.
    В случае с ASP добавляется следующий код:
    " />

    В случае с ColdFusion код будет таким:



    В случае с PHP добавляется код:



    Несмотря на то, что при добавлении кода на страницу не использовалась панель Bindings (Привязки), код получился таким же. Dreamweaver создает тег с атрибутом src. В качестве значения атрибута src не указан жестко заданный путь. Вместо этого, ASP, ColdFusion или PHP извлекает путь из набора записей. Как видно из приведенного рисунка, путь представляет собой простую строку текста.

    Добавление динамических изображений и форматирование численности населения
    увеличить изображение

  • В режиме Design (Дизайн) щелкните на значке динамического изображения и на панели Property Inspector (Инспектор свойств) измените опцию в поле со списком Alignment (Выравнивание) на Right (По правому краю).

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

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

  • Пользователям ASP и ColdFusion. Выделите и удалите динамический текст под заголовком "Population" (Численность населения). Поместите курсор в освободившейся строке. В категории Application (Приложение) на панели Insert (Вставка) щелкните на кнопке Dynamic Text (Динамический текст).

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

    Добавление динамических изображений и форматирование численности населения
    увеличить изображение

  • Пользователям ASP и ColdFusion. В диалоговом окне Dynamic Text (Динамический текст) выберите из списка пункт population. В раскрывающемся списке Format (Формат) укажите пункт Number – Rounded to Integer (Число, округленное до целого). Нажмите OK.


    В уроке 7 функция форматирования [FormatCurrency() или DollarFormat()] вводилась напрямую для развития навыков работы с кодом. На этом шаге сходная функция добавляется в код страницы посредством визуального интерфейса Dreamweaver.

    Добавление динамических изображений и форматирование численности населения
    увеличить изображение

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

    Добавление динамических изображений и форматирование численности населения

  • Пользователям PHP. Переключитесь в режим Code (Код) и найдите строку, предназначенная для отображения численности населения: .

    В результате выполнения этого кода на страницу выводится неотформатированное число. На следующем шаге в код будет добавлена функция форматирования.

    Добавление динамических изображений и форматирование численности населения
    увеличить изображение

  • Пользователям PHP. Измените найденную строку так, чтобы она выглядела следующим образом:



    Функция number_format() содержит четыре параметра, каждый из которых отделен запятой. Первый параметр – это число, которое требуется отформатировать, – здесь помещается извлеченное из базы данных значение. Второй – это количество десятичных цифр после запятой (здесь задается 0). Третий – это знак, отделяющий десятичные значения от целых. Поскольку десятичные дроби использоваться не будут, этот параметр является чисто формальным, однако указана точка. Важно, чтобы точка была заключена в одинарные кавычки, чтобы PHP обрабатывал ее как текстовую строку. Наконец, четвертый параметр – это символ, использованный для отделения тысяч. В данном случае в качестве разделителя применяется запятая. Она точно так же заключена в кавычки, поскольку является строкой.

    Добавление динамических изображений и форматирование численности населения
    увеличить изображение

  • Сохраните файл, загрузите его на сервер и протестируйте.

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

  • Не закрывая браузер, протестируйте работу обеих на панели навигации, а затем щелкните на любой стране из списка.



  • Теперь, по крайней мере, понятно, что Канада – не единственная страна в базе данных (см. рис. внизу следующей страницы).

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

    Наполнение страницы динамическими данными

    До этого момента все динамические данные, которые выводились на страницу, были довольно простыми и обычно сводились к доработке одного элемента. Но сейчас требуется вывести исчерпывающую информацию о стране, которая включает различные виды данных. Для этого следует дополнить динамически выводимые данные статическим кодом, который уже был вставлен на страницу в предыдущем упражнении.
  • Поместите курсор после надписи "Country Name", а затем на панели Bindings (Привязки) разверните пункт Recordset (rs_countries) (Набор записей [rs_countries]) и выберите поле countryName, после чего нажмите кнопку Insert (Вставить). В окне документа удалите статический текст "Country Name" и оставьте только динамический текст.
    В результате, название страны, взятое из указанной в динамическом коде записи, будет отображаться на странице в виде заголовка второго уровня (

    ).
    Наполнение страницы динамическими данными
    увеличить изображение

  • Поместите курсор после двоеточия в строке с текстом "World Region" ("Регион") и нажмите комбинацию клавиш (Shift)+(Enter) (Windows) или (Shift)+(Return) (Macintosh), чтобы вставить разрыв строки. Выделите текст "World Region", а затем щелкните на кнопке Bold (Полужирный) на панели Property Inspector (Инспектор свойств).
    Примечание. Если Dreamweaver поместит вокруг текста тег , как в одном из предыдущих уроков, следует удалить этот тег, а потом в режиме Code (Код) вручную добавить теги .
    Динамические данные будут размещены строкой ниже, а полужирное начертание отделяет название от самих данных.
    Строка, расположенная ниже строки с надписью "World Region" не должна быть выделена с помощью полужирного начертания.
    Наполнение страницы динамическими данными
    увеличить изображение

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

  • Поочередно прикрепите поле region (регион) к строке, расположенной под заголовком "World Region"; поле imageALT – под "ImageCaption", population – под "Population", а country_currency – под "Local Currency".

    Добавление динамических данных на страницы – довольно легкое занятие (см. рис. вверху следующей страницы).

  • Сохраните файл, загрузите его на сервер и протестируйте.



  • Для начала неплохо, но остается несколько проблем, с которыми надо разобраться.

    Во-первых, почему на странице отображается именно Канада? (Не забудьте, что в данном случае речь идет об англоязычном варианте написания этой страны – Canada.) Причина заключается в том, что при создании запроса программа Dreamweaver установила значение параметра URL-адреса по умолчанию равным 1 (для ASP, ColdFusion и PHP), а в базе данных это значение соответствует именно Канаде. Если бы Dreamweaver не добавил значение по умолчанию, при загрузке страницы появилось бы сообщение об ошибке или о том, что на странице отсутствуют какие-либо данные (в зависимости от серверной модели), поскольку запрос зависит от параметра URL-адреса, которого в этом случае бы не существовало. При переходе по ссылке со страницы profiles.asp передается правильный параметр URL-адреса.

    Наполнение страницы динамическими данными
    увеличить изображение

    В качестве значения в поле World Region указано число 1, которое ни о чем не говорит. Почему для Канады в качестве региона вместо названия региона, скажем, Северной Америки, указано числовое значение 1? Это связано с устройством баз данных. Как известно, нередко в полях реляционных баз данных вместо действительных значений содержатся соответствующие им внешние ключи. В данном случае используются именно они. Поскольку большинство стран расположено на одних и тех же континентах, в базе данных применяется отдельная таблица для континентов, а первичный ключ (uniquieID) таблицы tbl_region употребляется в качестве внешнего ключа в таблице tbl_country. В результате, вместо названия региона на странице отображается значение ключа – в данном случае 1. Для того, чтобы исправить это, следует найти название региона, соответствующего идентификатору 1 в таблице tbl_region.

    Наконец, численность населения (Population) отображается в виде числа 30007094, хотя для чтения удобнее формат 30,007,094. С целью форматирования чисел для этой категории будет использована специальная функция, встроенная в серверную модель.

    Наполнение страницы динамическими данными
    увеличить изображение

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

    Подготовка страницы ввода

    На данный момент на странице Country Profiles (profiles.asp) содержится список, состоящий из многих стран, в которые компания Newland Tours организует турпоездки. Список составлен на основе статического HTML-кода. Следует уточнить, что названия стран будут перечислены на второй странице, которую еще потребуется добавить. Это значит, что все содержимое этой страницы (кроме заголовка) является лишним, так что его нужно удалить.
    После удаления содержимого следует добавить список ссылок, по которым посетители смогут перейти к профилю нужной страны. Поскольку список должен генерироваться динамически, требуется добавить набор записей с данными, необходимыми для создания ссылок, в том числе, поля countryName и countryID. Таким образом, в этом задании будет удалено устаревшие сведения и добавлен набор записей, позволяющий создать список динамических URL-адресов.
  • Откройте страницу profiles.asp в режиме Design (Дизайн).
    Проще удалить ненужные записи в режиме Design (Дизайн), чем отыскивать их в коде стараясь при этом не удалить лишние теги.
  • Выделите все содержимое страницы, начиная с горизонтальной линии над словом "Namibia" и включая всю таблицу.
    Не следует выделять желтый значок (соответствующий карте ссылок) внизу страницы за пределами таблицы.
    Подготовка страницы ввода
    увеличить изображение

  • Нажмите клавишу (Del).
    Содержимое будет удалено, а размер таблицы изменится.
    Подготовка страницы ввода
    увеличить изображение

  • Замените текст заголовка страницы на Select a Country Profile. Первую строку текста замените на текст "The following list shows all of the countries to which we currently offer tours. To learn more about a country, follow its link". (В следующем списке показаны все страны, туры по которым мы сейчас можем предложить. Чтобы узнать больше о конкретной стране, воспользуйтесь соответствующей ссылкой.)
    Заголовок и текст на странице должны соответствовать назначению создаваемого приложения.
    Подготовка страницы ввода
    увеличить изображение

  • На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+") и выберите в списке пункт Recordset (Query) (Набор записей [запрос]).
    Процесс добавления нового набора записей должен быть уже привычным.
  • Присвойте набору записей имя rs_countryNames. В качестве соединения укажите conn_newland. Выберите таблицу tbl_country и задайте поля countryName и countryID. Помимо этого отсортируйте записи по полю countryName в алфавитном порядке по возрастанию.
    Как говорилось ранее, если результат работы создаваемого запроса вызывает сомнения, следует протестировать полученные данные, щелкнув на кнопке Test (Проверить). В данном случае будет получен список из 16 стран, упорядоченных по алфавиту в порядке возрастания, начиная с Argentina и заканчивая United States.
    Подготовка страницы ввода

  • Сохраните файл.


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

    Подготовка страницы вывода

    Страница ввода готова, но все ее ссылки предназначены для перехода на страницу, которой еще не существует. Новая страница будет создана в этом упражнении. Также будет сформирован набор записей, содержащий данные, извлеченные из базы данных на основе переменной URL-адреса, которая пересылается, когда посетитель переходит по ссылке с предыдущей страницы.
  • Откройте страницу generic_template.asp. В поле Title (Заголовок) на панели инструментов введите заголовок "Newland Tours: Country Profiles" и сохраните страницу как profiles_detail.asp.
    И снова на основе шаблона можно быстро и легко создать основной каркас страницы.
  • В режиме Design (Дизайн) введите на странице заголовок "Country Profiles: Individual Profiles". После этого добавьте приведенный ниже текст, чтобы каждая строка размещалась в отдельном абзаце:
    Country Name: (Название страны:)
    World Region: (Регион:)
    Description: (Описание:)
    Image Caption: (Надпись к рисунку:)
    Population: (Численность населения:)
    Local Currency: (Денежная единица:)
    На этом и нескольких последующих шагах создается общая структура (макет) страницы, к которой в дальнейшем будут добавлены динамические данные.
    Подготовка страницы вывода
    увеличить изображение

  • Один раз щелкните на "Country Name", а потом в поле Format (Формат) на панели Property Inspector (Инспектор свойств) выберите пункт H2.
    В соответствии с заданным ранее стилем CSS шрифт в тексте "Country Name" должен стать крупным и фиолетовым. Остальные поля будут отформатированы в следующем упражнении.
  • Создайте на панели Bindings (Привязки) новый набор записей на основе указанной информации:
    Name: rs_countries (Название: rs_countries)
    Connection: conn_newland (Соединение: conn_newland)
    Table: tbl_country (Таблица: tbl_country)
    Columns: All (Столбцы: все)
    Filter: countryID = URL Parameter countryID (Фильтр: countryID = URL параметр countryID)
    Sort: None (Сортировка: отсутствует)
    Подготовка страницы вывода

    Как говорилось ранее, если нет уверенности в том, какой должен получиться результат, следует нажать кнопку Test (Проверить). Поскольку фильтрация производится на основе параметра URL-адреса, потребуется указать контрольное значение для проверки. Если ввести 3, то отобразится информация о Тайване.
    По завершении на панели Bindings (Привязки) появится новый набор записей, который предназначен для наполнения страницы.


  • Содержание Назад Вперед

    Поиск данных внешней таблицы при помощи SQL

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

    Поиск данных внешней таблицы при помощи SQL
    увеличить изображение

    До того, как приступать к решению проблемы, рекомендуется повторить основные теоретические положения. Связи между таблицами являются краеугольным камнем большинства систем управления базами данных, в частности, Microsoft Access и MySQL. Они позволяют наиболее эффективно распределить данные по таблицам, устранить избыточность и упростить поддержку данных. Для создания связей разработчики помещают уникальный первичный ключ из одной таблицы в другую в качестве внешнего ключа. Благодаря этому разработчики получают возможность при помощи запроса объединять информацию из связанных между собой таблиц. В таблице tbl_country содержится поле region (регион), значением которого является первичный ключ, взятый из уникального поля regionID (КодРегиона), расположенного в таблице tbl_region.
    Пора перейти к более конкретным данным. В таблице tbl_region первичный ключ записи, содержащей название North America, имеет значение 1. Записи, содержащей название East Asia, соответствует первичный ключ 4. В таблице tbl_country первичный ключ записей, содержащих информацию о Канаде и Соединенных Штатах, равен 1. Это означает, что обе страны находятся в Северной Америке. Японии (Japan), Таиланду (Thailand) и Тайваню (Taiwan) соответствует регион со значением, равным 4. Это значит, что страны находятся в Восточной Азии (East Asia). Связь между таблицами показана рисунке.
    Поиск данных внешней таблицы при помощи SQL

    Загвоздка заключается в том, первичный ключ таблицы tbl_region не несет смысловой нагрузки для посетителей, и, в то же время, это поле является общим для таблиц. Требуется скомбинировать все данные из двух таблиц (tbl_country и tbl_region) по общему полю. Так, если пользователь выберет Канаду, запрос извлечет не только строку с информацией о Канаде из таблицы tbl_country, но и данные, соответствующие значению поля region (1). В случае с Канадой это North America.
    К сожалению, встроенный в Dreamweaver генератор SQL-запросов предназначен для создания относительно простых запросов, а не для создания, скажем, перекрестного запроса для извлечения данных из двух связанных таблиц. Это означает, что часть SQL-кода придется ввести вручную. Dreamweaver содержит расширенное окно для создания SQL-запросов, однако для приобретения опыта работы с SQL рекомендуется отредактировать код непосредственно в документе.
  • В документе profiles_detail.asp переключитесь в режим Code (Код). Найдите следующий SQL-код:

    Для ASP:

    SELECT * FROM tbl_country WHERE countryID = " + Replace (rs_countries__MMColParam, "'", ",,") + ""

    Для ColdFusion:

    SELECT * FROM tbl_country WHERE countryID = #URL.countryID#

    Для PHP:

    SELECT * FROM tbl_country WHERE countryID = %s", $colname_rs_countries);

    Все три выражения хоть и отличаются внешне, но содержат одни и те же указания: извлечь из таблицы tbl_country все поля, в которых значение в поле countryID равно значению countryID, переданному на страницу в качестве параметра URL-адреса.

    Как упоминалось ранее, чтобы предотвратить появление сообщений об ошибке в случае, если на страницу не передан параметр URL-адреса, Dreamweaver присваивает переменной значение по умолчанию. В ASP это значение хранится в переменной MMColParam, в ColdFusion – в переменной URL.countryID, а в PHP – в переменной $colname_rs_countries.

    Пока все идет хорошо, – ненужных данных код не извлекает. Другое дело, что извлеченных данных недостаточно.

    Поиск данных внешней таблицы при помощи SQL
    увеличить изображение

    Совет. Несмотря на то, что код ColdFusion и PHP отличается от кода ASP, приведенного на рисунках, при использовании любой серверной модели нужно следовать приведенным шагам.
  • В запросе замените tbl_country на tbl_country, tbl_region. Следует делать это осторожно, чтобы не повредить код.

    Изначально запрос извлекал все поля из таблицы tbl_country. После этого изменения он будет извлекать все поля из таблиц tbl_country и из tbl_region.

  • Поместите курсор после оператора WHERE и добавьте код, приведенный ниже, стараясь при этом не изменить последующий код.

    tbl_region.regionID = tbl_country.region AND

    Поиск данных внешней таблицы при помощи SQL
    увеличить изображение

    Этот код создает новый критерий для отбора, согласно которому следует извлечь из таблицы tbl_region только те записи, которые соответствуют записям, извлеченным из таблицы tbl_country. Другими словами, если из таблицы tbl_country извлечена только Канада, из таблицы tbl_region будет извлечена только запись, имеющая то же значение поля regionID (в случае с Канадой – 1).


    Дополнительный оператор AND, добавленный в конце, означает, что запрос должен соответствовать как новому критерию, так и исходному, согласно которому следует извлекать только записи, соответствующие параметру URL-адреса.

    Если говорить конкретнее, измененный запрос добавит в набор записей два новых поля из таблицы tbl_regions: regionID (КодРегиона) и regionName (НазваниеРегиона). Поля связаны таким образом, что извлекаются только значения полей regionID и regionName, соответствующие выбранной стране.

  • На панели Bindings (Привязки) щелкните на кнопке Refresh (Обновить), чтобы убедиться в том, что поля regionID и regionName прикреплены к списку.

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

    Поиск данных внешней таблицы при помощи SQL

  • В режиме Design (Дизайн) удалите динамический текст rs_countries.regionName, расположенный под строкой World Region, а вместо него поместите поле regionName из панели Bindings (Привязки).

    На этом шаге на страницу выводится текст с названием региона. Благодаря только что записанному SQL-коду, выводимое название будет правильным (так, Канада не окажется в Восточной Азии).

    Поиск данных внешней таблицы при помощи SQL
    увеличить изображение

  • Сохраните файл, загрузите его на сервер и протестируйте.



  • На этот раз, в разделе "World Region" вместо числа отображается название региона, в котором находится страна.

    Поиск данных внешней таблицы при помощи SQL
    увеличить изображение

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

    Планирование приложения

    Добавление изображений и атрибутов alt

    Как и в случае с профилями стран, описанию каждого путешествия соответствует свое изображение. В этом задании изображения будут динамически добавлены на страницу вместе с альтернативным текстом, описывающим изображение на основе информации, содержащейся в базе данных.
  • Поместите курсор перед названием путешествия {rs_tourDetail.count-ryName}, содержащимся в заголовке вверху страницы.
    Изображение будет размещаться в правом верхнем углу описания так же, как в случае с профилями стран.
  • Выполните команды Insert\Image (Вставка\Изображение). В диалоговом окне Select Image Source (Выбор источника изображений) щелкните на кнопке выбора Data Sources (Источники данных). Разверните набор записей и укажите в списке поле tour_imageURL. Нажмите OK.
    Добавление изображений и атрибутов alt

    Как и в прошлый раз, в базе данных содержатся текстовые строки с URL-адресами изображений. Вместо динамических изображений на страницу добавляется динамический текст, содержащий элемент , внутри которого указан адрес изображения.
    В том месте, где только что находился курсор, появится значок изображения.
  • Не снимая выделения со значка изображения, на панели Property Inspector (Инспектор свойств) выровняйте его по правому краю страницы (Align Right).
    Значок изображения переместится к правому краю.
    Для того, чтобы проверить изображение в действии, следует включить опцию Live Data (Оперативные данные). На странице должна отобразиться фотография чудесного пейзажа с озером на переднем плане на фоне радуги и водопадов.
    Примечание. Если вместо, скажем, озера появится изображение гор, покрытых льдом, значит, вместо поля tour_imageURL в диалоговом окне Select Image Source (Выбор источника изображений) было выбрано поле imageURL. В поле imageURL содержатся ссылки на изображения для профилей стран. Для путешествий предназначаются особые картинки, и пути к ним хранятся в поле tour_imageURL.
    Добавление изображений и атрибутов alt
    увеличить изображение

  • Выделите изображение на странице, а затем на панели Bindings (Привязки) выберите поле tour_imageALT.
    При выборе tour_imageALT в нижней части панели станет доступным меню Bind To (Прикрепить к). Обычно, по умолчанию в нем выбрано значение img.src.

    Добавление изображений и атрибутов alt

  • В списке Bind To (Прикрепить к) выберите вариант img.alt. Нажмите Bind (Прикрепить).

    Добавление изображений и атрибутов alt

    Теперь подпись прикреплена к изображению в качестве альтернативного описания. Для того, чтобы убедиться в этом, следует выделить изображение, а потом на панели Property Inspector (Инспектор свойств) проверить поле Alt. В поле должен содержаться динамический код, в котором будет ссылка rs_tourDetail.tour_imageALT.

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

  • Сохраните файл, загрузите его на сервер и протестируйте.

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



  • К этому моменту в браузере страница выглядит замечательно. В некоторых браузерах при наведении указателя мыши на изображение появится экранная подсказка с альтернативным описанием. Отметим также, что следует внимательно проверить правильность всех динамических полей. Например, под таблицей с расписанием маршрутов должна располагаться надпись "Learn More About Argentina" ("Дополнительные сведения об Аргентине").

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

    Передача данных другим приложениям

    Теперь посетители имеют возможность просматривать все разделы с информацией о турах, в частности, одновременно пять из них. Все сведения упорядочены и отформатированы, а панель навигации облегчает перемещение между ними. Прежде чем закончить урок, требуется добавить еще две дополнительные функциональные возможности.
    Внизу каждого из разделов должны быть две ссылки. Первая ссылка – это название страны, с помощью которой осуществляется переход на страницу profiles_detail.asp, содержащую информацию о стране. Вторая ссылка позволяет перейти к приложению с калькулятором для расчета стоимости путешествий (tourprice.asp). Однако недостаточно просто создать ссылки на эти страницы. Требуется также передать им данные, чтобы приложения могли определить, с каким из разделов ознакомился пользователь во время перехода по ссылке.
    В случае с профилями стран реализовать этот механизм несложно. Как известно из предшествующего урока, чтобы определить, о какой именно стране следует показывать информацию, приложение использует параметр URL-адреса countryID. Этот параметр появляется в тот момент, когда посетитель переходит по ссылке со страницы profiles.asp. Для получения такого же эффекта следует прикрепить соответствующий параметр URL-адреса к ссылке на странице tours_detail.asp.
    Создание ссылки на приложение для расчета стоимости путешествий окажется гораздо сложнее. На этой странице содержится динамически генерируемый список, в котором перечислены все путешествия. Но если посетитель просматривает описание путешествия Highlights of Italy (Достопримечательности Италии), а затем по ссылке Price This Tour With the Tour Price Calculator переходит на страницу с формой для расчета стоимости, он предполагает узнать стоимость тура Highlights of Italy (а не выбранного в списке по умолчанию Biking from Oxford to London). Решение почти такое же, как в случае со ссылкой на профиль страны, когда требуется просто передать на страницу дополнительные данные. Но приложение для расчета стоимости путешествия несколько сложнее, потому что оно не готово к получению и использованию этих данных, в отличие от страницы с профилями стран, которая уже ожидает передачи параметра URL-адреса countryID. В этом задании эта проблема (а также пара других) будет успешно решена.
    Во-первых, следует уделить внимание ссылке, ведущей на страницу с профилем страны.
  • Выделите динамический текст в конце абзаца "Learn more about" ("Дополнительные сведения о"). На панели Property Inspector (Инспектор свойств) прикрепите к нему ссылку, указав в качестве заменителя адреса значение abc.

    Так же, как в уроке 10, заменитель адреса будет удален сразу после прикрепления к ссылке динамических данных. Но для создания ссылки нужно обязательно указать какое-нибудь значение.

    Передача данных другим приложениям
    увеличить изображение

  • Не снимая выделение с динамического текста, на панели Bindings (Привязки) щелкните на поле countryID и выберите в раскрывающемся списке Bind To (Прикрепить к) пункт a.href, а после этого нажмите Bind (Прикрепить).

    Значение countryID окажется прикрепленным к URL-адресу. На данный момент атрибут ссылки href содержит только число. Следует ввести основной URL-адрес, а также имя переменной для URL-параметра.

    Передача данных другим приложениям

  • Не снимая выделение со ссылки, поместите курсор в самое начало поля Link (Ссылка) (на панели инспектора свойств), – перед динамическим кодом, и введите profiles_detail.asp?countryID=.

    Это ссылка на страницу. После того, как сервер обработает весь код, значение поля countryID будет добавлено после знака равенства. Теперь страница profile_details.asp работает правильно. Чтобы убедиться в этом, достаточно протестировать страницу tours_detail.asp в браузере и щелкнуть на одной из ссылок, прикрепленных к названию страны.

    Передача данных другим приложениям
    увеличить изображение

  • В последнем абзаце описания выделите слова "Tour Price Calculator" ("Калькулятор дл расчета стоимости тура"). В поле Link (Ссылка) на панели Property Inspector (Инспектор свойств) введите значение abc, чтобы привязать к выделенному тексту ссылку. Так же, как и раньше, на панели Bindings (Привязки) выберите поле tourID, и в списке Bind To (Прикрепить к) прикрепите его к атрибуту a.href. Нажмите Bind (Прикрепить).

    Текст abc будет заменен значением поля tourID. Осталось вернуться на панель инспектора свойств и ввести остальную часть адреса.

    Передача данных другим приложениям

  • На панели инспектора свойств поместите курсор в начало строки Link (Ссылка) и введите перед динамическим текстом следующий URL-адрес: "tourprice.asp?tourID=". Сохраните и закройте документ tours_detail.asp.

    На этом шаге был создан механизм для отправки значения поля tourID на страницу tourprice.asp. К сожалению, на странице tourprice.asp нет кода, способного обработать это значение, – так что ничего не происходит.

  • Откройте файл tourprice.asp. На панели Bindings (Привязки) добавьте новую переменную Request.Querystring (ASP) или URL (ColdFusion и PHP) и присвойте ей имя tourID.


    Передача данных другим приложениям

    После этого переменная, присланная в составе URL-адреса со страницы tours_detail.asp, становится доступной. На следующем шаге эта информация будет прикреплена к списку, после чего нужное путешествие будет выбираться автоматически.

    Совет. В серверных моделях ColdFusion и PHP переменные URL-адреса, форм и файлов cookie, определенные в прошлом, остаются на месте в течение длительного времени, что может оказаться полезным, а может надоесть – в зависимости от регулярности использования тех или иных переменных. Например, переменная myPet из небольшого приложения, созданного в уроке 5, до сих пор находится в списке на панели Bindings (Привязки). Прежние переменные, подобные этой, не приносят вреда, но, чисто в эстетических целях, когда беспорядок начинает надоедать, можно принять решение об их удалении. Чтобы удалить прикрепленную переменную, следует просто выделить ее и нажать клавишу (Del) (или кнопку удаления переменной в виде знака минус "–"). Если удаляемая переменная является последней или единственной переменной в категории (например, cookie), будет удалена вся категория. Удаление переменной на панели не повлияет на переменные, уже добавленные на страницы.



  • Как известно из урока 9, объект списка определяется двумя основными видами информации: надписью, которую видят посетители (в качестве надписей в данном случае используются названия путешествий) и ее значениями, которые пересылаются в составе переменных формы (в качестве значений применяются идентификаторы путешествий). В данном шаге выбранное значение (а, следовательно, и надпись) устанавливается равным полученному значению параметра URL-адреса.

    Передача данных другим приложениям
    увеличить изображение

  • Сохраните страницу tourprice.asp и загрузите ее на сервер. На панели Site (Сайт) выберите страницу tours_detail.asp и нажмите клавишу (F12), чтобы ее протестировать. Выберите любое путешествие и щелкните на ссылке с названием страны (которая приведет к соответствующему профилю), а затем на ссылке Tour Price Calculator (которая приведет на страницу с соответствующим названием путешествия, выбранным по умолчанию в меню формы).

    При наведении указателя мыши на ссылку Tour Price Calculator (Калькулятор для расчета стоимости тура) в строке состояния отображается адрес страницы с прикрепленным к нему параметром. Механизм работает превосходно, но за одним исключением.

    Передача данных другим приложениям
    увеличить изображение

  • Не закрывая браузер, щелкните на ссылке Tour Price Calculator из любого раздела с описанием путешествия. Не вводя значения в поля Number of Adults (Количество взрослых) и Number of Children (Количество детей), нажмите кнопку Submit.

    Запускается сценарий для проверки формы, и страница загружается снова – с сообщением об ошибке. Все работает правильно. Но в списке Tour Name (Название тура) вновь выбран пункт Biking from Oxford to London (Байкинг от Оксфорда до Лондона). При повторной загрузке страницы параметр tourID пропадает, поэтому форма не может отобразить нужный тур и выводит первый запись из набора.

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

    Передача данных другим приложениям
    увеличить изображение

  • Закройте страницу tourprice.asp и откройте tourprice_processor.asp. В режиме Code (Код) в верхней части документа найдите комментарий "Form validation script; redirects user back to tourprice.asp if form fields…" В сценарии, к которому относится комментарий, найдите следующий код:


    Для ASP:

    Response.Redirect("tourprice.asp?error=notnumeric")

    Для ColdFusion:



    Для PHP:

    header("Location: tourprice.php?error=notnumeric"

    Этот участок кода отвечает за перенаправление на страницу tourprice.asp. Как видно из кода, здесь уже задан один параметр URL-адреса. Для улучшения работы приложения достаточно добавить еще один параметр.

  • Измените найденный код так, чтобы он выглядел следующим образом:

    Для ASP:

    Response.Redirect("tourprice.asp?error=notnumeric&tourID=" &Request.Form("tourName"))

    Для ColdFusion:



    Для PHP:

    header("Location: tourprice.php?error=notnumeric&tourID=".$_POST['tourName']);

    Несложно догадаться, для чего предназначен добавленный код. При перенаправлении на страницу tourprice он прикрепляет к запросу переменную URL-адреса tourID. Значение этой переменной равно значению переменной формы form.tourName, которое было выбрано в списке к моменту нажатия кнопки Submit. Как известно из шагов 6, 7 и 8, при загрузке страницы tourprice.asp значение в списке по умолчанию выбирается на основе переменной URL-адреса tourID.

  • Сохраните все файлы, загрузите их на сервер и снова протестируйте.

    На этот раз все должно работать без сбоев. Данные незаметно передаются от одного приложения другому, и страница реагирует соответствующим образом благодаря простым операциям по пересылке и подготовке данных.



  • Содержание Назад Вперед

    Планирование приложения

    Перед разработкой любого приложения следует подробно разобраться в том, как оно должно работать. В процессе создания непременно потребуется что-либо усовершенствовать и принять новые решения, и идея будет развиваться дальше. Но прежде, чем начинать, следует точно знать, что именно будет построено. Нередко я рисую блок-схемы как с помощью программы Freehand MX, так и на бумаге.
    В случае с этим приложением рекомендуется снова посетить онлайновую версию сайта и посмотреть окончательную версию приложения. После того, как станет ясно, к чему следует стремиться, все шаги станут намного понятнее.
  • Откройте в браузере страницу, расположенную по адресу: http://www.allectomedia.com/newland_dynamic/tours.asp, для идентификации пользователя введите "osiris@allectomedia.com", в качестве пароля – "osiris", а затем нажмите кнопку для регистрации Submit.
    Процедура регистрации для входа в систему будет реализована через несколько уроков.
  • Не нажимая кнопку мыши, наведите указатель на ссылки с названиями географических регионов и на ссылку View all tours (Просмотр всех туров) у нижнего края страницы.
    Cтраница содержит три различных способа для доступа к описаниям путешествий. Во-первых, туры отображаются по выбранному региону. Во-вторых, можно показать все путешествия для выбранной страны. Если щелкнуть на ссылке View all tours, то на странице будут представлены все путешествия (без всякой фильтрации).
    При наведении указателя мыши на ссылки, фильтрующие данные по региону, окажется, что к URL-адресу прикреплен параметр regionID=1 (или другое значение). Неудивительно, что SQL-оператор на странице с описаниями (tours_details.asp) использует для фильтрации именно этот параметр. Но при наведении указателя на ссылку View all tours к адресу не добавляются параметры. Поскольку при переходе по этой ссылке данные не фильтруются, нет необходимости пересылать на следующую страницу какие-то переменные.
    Если выбрать в меню отдельную страну и нажать кнопку Submit, данные будут отправлены в качестве переменной формы и использованы для фильтрации выбранных записей на следующей странице. Конечно, список стран в этом меню формируется динамически, поэтому список всегда отображает самые последние изменения (см. рис. вверху следующей страницы).

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

    Особое внимание следует уделить URL-адресу. Он содержит параметры только при щелчке на одной из ссылок с названием региона. При переходе на страницу при помощи формы или ссылки View all tours параметры URL-адреса не передаются. Также следует обратить внимание, что все три способа позволяют просмотреть информацию о путешествиях в любой из выбранных стран (см. рис. внизу следующей страницы).

  • Из любого раздела с описанием путешествия щелкните на ссылке Tour Price Calculator (Калькулятор для расчета стоимости поездки).

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

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

    Следует обратить внимание на то, что в раскрывающемся списке с названиями путешествий, отображается именно тот тур, описание которого было на экране во время перехода по ссылке. Так, например, если щелкнуть на ссылке Tour Price Calculator, расположенной в разделе с описанием путешествия "Highlights of Morocco" ("Достопримечательности Марокко"), то в списке окажется выбранным именно это название. Отчасти, это возможно благодаря параметру URL-адреса (в случае с "Highlights of Morocco" — это tourID=17).

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

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



  • Завершив изучение приложения, следует закрыть браузер и вернуться в Dreamweaver.

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

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

    Реализация постраничного вывода наборов записей

    Если не считать двух ссылок внизу страницы, каждая из которых ведет к другим приложениям (к приложению с профилями стран и приложению для расчета стоимости путешествий), формирование описания завершено. Единственная заметная проблема заключается в том, что на странице отображается только одно путешествие (в Аргентину). Требуется создать цикл, с помощью которого на страницу будут выводиться информация для всех путешествий, а не только для первого в списке.
    Модель поведения сервера Repeat Region (Повторяющаяся область) была задействована в уроке 10 при выводе названий стран на страницу profiles.asp. Эта модель поведения будет использована снова для вывода на страницу нескольких разделов с описанием туров. Сложность заключается в том, что вместо того, чтобы выводить только названия стран, как в случае со страницей profiles.asp, требуется выводить подробные сведения с изображениями. Следствием этого могут стать большие размеры страницы и значительное время загрузки.
    Страница станет более функциональной, если ограничить количество показанных записей так, чтобы, например, за один раз отображалось пять записей, а пользователи могли перемещаться между ними. Это возможно, и довольно просто, если использовать набор встроенных в Dreamweaver моделей поведения серверов. Модель поведения Repeat Region (Повторяющаяся область) позволяет ограничить число отображаемых на странице записей (в данном случае, разделов с описанием путешествий). Другая модель поведения Recordset Navigation Bar (Панель навигации для перемещения между записями) автоматизирует процесс добавления на страницу ссылок (или кнопок) First (Первая), Previous (Предыдущая), Next (Следующая) и Last (Последняя) для перемещения между записями, относящимися к разным разделам с писанием туров. В этом задания для обеспечения необходимой функциональной гибкости будут использованы обе модели поведения.
  • Перетаскивая указатель мыши, выделите все описание, начиная с горизонтальной линейки (включительно) и заканчивая абзацем "Price this tour with the Tour Price Calculator" ("Расчет стоимости тура с помощью калькулятора").

    Выделенная область будет повторяться при выполнении цикла. Информация об авторском праве и вторая ссылка Find Tours (Поиск туров) не входят в повторяющуюся область, поскольку они должны отображаться ниже всех описаний.

    Реализация постраничного вывода наборов записей
    увеличить изображение

  • C помощью панели Server Behaviors (Модели поведения серверов) добавьте к выделенной области модель поведения Repeating Region (Повторяющаяся область). В одноименном диалоговом окне Repeat Region укажите, что за один раз должны отображаться 5 записей. Нажмите OK.

    Реализация постраничного вывода наборов записей

    Повторяющаяся область будет отмечена границей.

  • Сохраните документ, загрузите его на сервер и нажмите клавишу (F12), чтобы протестировать страницу в браузере.

    На странице будет показано пять записей, перечисленных в алфавитном порядке по названиям стран. Первый раздел с описанием – это вновь вариант "Highlights of Argentina" ("Достопримечательности Аргентины"), а последний – "Highlights of France" (см. рис. вверху следующей страницы).

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

    Реализация постраничного вывода наборов записей
    увеличить изображение

  • Вернитесь в Dreamweaver и вставьте пустую строку под повторяющейся областью. Поместите курсор в этой пустой строке и выполните команды Insert\Application\Objects\Recordset Paging\Recordset Navigation Bar (Вставка\Приложение\Объекты\Постраничный вывод набора записей\Панель навигации для перемещения между записями).

    Добавляемый "объект приложения" на самом деле является группой серверных моделей поведения. Он создает ссылки (или кнопки – на выбор) First (Первая), Previous (Предыдущая), Next (Следующая) и Last (Последняя). При щелчке на каждой из этих ссылок ASP, ColdFusion или PHP получает информацию о том, какие пять наборов записей следует отобразить. Вдобавок, если посетитель просматривает первый набор записей, ссылки/кнопки First и Previous будут скрыты, поскольку в них нет необходимости. Точно так же окажутся невидимыми и ссылки/кнопки Next и Last, если посетитель находится на странице с последним набором записей. Все четыре ссылки/кнопки отображаются на страницах посередине – между первой и последней.

  • В диалоговом окне Recordset Navigation Bar (Панель навигации для перемещения между записями) подтвердите значения, заданные по умолчанию (набор записей rs_tourDetail и активный переключатель Text (Текст) в группе Display using [Отображение]), а затем нажмите OK.


    Реализация постраничного вывода наборов записей

    По завершении на страницу будет добавлена новая таблица, содержащая четыре ссылки. Обратите внимание, что в нижней части панели Server Behaviors (Модели поведения серверов), отобразится несколько новых моделей поведения, в том числе несколько начинающихся со слов "Show if not…" ("Показать, если не..."), и несколько "Move to XXX Record" ("Перейти к XХX записи"). Все это отдельные модели поведения, созданные в момент добавления навигационной панели для перемещения между записями.

    Реализация постраничного вывода наборов записей
    увеличить изображение

    Существует возможность создать подобную навигационную панель вручную. Все необходимые серверные модели поведения доступны на панели Server Behaviors (Модели поведения серверов) – в опциях Recordset Paging (Постраничный вывод набора записей) и Show Region (Показать область).

  • Щелкните в любом месте внутри таблицы с четырьмя ссылками, выберите в селекторе тегов крайний справа тег
  • и ). Так что все, что требуется от стиля, – наследовать всю информацию о внешнем виде и выделять текст с помощью полужирного начертания.

    Создание и применение пользовательских стилей CSS


  • Создайте новый класс с именем .navhead со следующими параметрами: Size (Размер) = 12 points (пунктов); Weight (Начертание) = bold (полужирное); Color (Цвет) = #505748.

    Этот стиль будет применен к заголовку, расположенному вверху навигационной панели в левом столбце файла index.htm.

  • Создайте новый класс .caption с единственным параметром Style (Стиль) = italic (курсив).

    Этот стиль будет использоваться для всех подписей к изображениям на сайте. На данный момент они отформатированы при помощи тегов . Большинство браузеров выделяет текст, помещенный между этими тегами, курсивом. И снова .caption описывает содержимое лучше, чем тег , и создание этого стиля позволит управлять внешним видом всех подписей на сайте.

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

    Создание шаблона для многократного применения

    В значительной мере, работа над внешним видом сайта Newland Tours завершена. Как уже говорилось, необходимость в небольших настройках и дополнениях будет возникать на протяжении всего процесса разработки, но в целом дизайн сайта не изменится.
    На этом этапе разработки, как правило, следует остановиться и создать общий шаблон с дизайном сайта для новых страниц. Нередко все страницы сайта используют один и тот же заголовок, базовую компоновку, таблицу стилей и т.д. Вместо того, чтобы каждый раз "с нуля" создавать все это, – достаточно создать общий шаблон страницы и, тем самым, ускорить работу.
    В этом упражнении создается шаблон, который будет использоваться на протяжении всей книги в качестве основы для новых страниц сайта.
    Прежде чем продолжать, важно уяснить, что шаблон, который будет создан, не является файлом шаблона Dreamweaver. Шаблоны Dream-weaver позволяют дизайнерам создавать шаблоны страниц, а затем закрывать для редактирования определенные области, чтобы другие разработчики не могли модифицировать контент. Прочие области остаются доступными для редактирования, так что при желании любой разработчик может вносить свои коррективы в содержимое, но без изменения внешнего вида сайта или навигационной схемы. Шаблоны Dreamweaver – это мощный инструмент, особенно в сочетании с программой Macromedia Contribute, позволяющей, в частности, технически неподкованным работникам компаний управлять содержимым страницы и поддерживать ее, не имея профессиональных навыков по веб-разработке и не нарушая код.
    Хотя шаблоны Dreamweaver являются интересным и полезным инструментом, работа с ними выходит за рамки этой книги. Тем не менее, при создании любого сайта с большим числом разделов и документов, особенно при работе в команде разработчиков, следует помнить об их существовании.
    В завершение отметим, что термин "шаблон" используется в широком смысле, а не в контексте готовых шаблонов, встроенных в программу Dreamweaver.
  • Откройте файл about.htm.
    Для создания шаблона следует удалить с одной из страниц сайта весь уникальный контент. Очевидно, что самый быстрый способ это сделать – использовать страницу, на которой меньше всего содержимого. Файл about.htm является самой простой страницей сайта, так что это неплохая отправная точка.
  • В меню File (Файл) выполните команду Save As (Сохранить как) и сохраните файл под именем generic_template.htm.

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

  • Щелкните на большой фотографии с изображением французской части Альп, чтобы выделить ее, и нажмите клавишу (Del). Выделите два последних абзаца и текст подписи к фотографии, а после этого вновь воспользуйтесь клавишей (Del).

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

    Может оказаться, что после того, как программа Dreamweaver удалила содержимое, она не изменила размер таблицы (хотя программа Dreamweaver MX 2004 гораздо лучше решает эту проблему, чем ее предыдущие версии), вследствие чего на странице появилось много свободного места. Эта проблема связана не с кодом, а с отображением на экране. В браузере страница будет отображаться надлежащим образом.

    Если возникла такая проблема, следует просто щелкнуть на теге в селекторе тегов, чтобы программа Dreamweaver заново отобразила таблицу.

    Примечание. Многие пользователи пытаются решить проблему пустого пространства, перетаскивая нижнюю границу таблицы вверх. Однако вследствие этого Dreamweaver часто изменяет атрибут height для высоты таблицы (или, возможно, высоты ячеек). Другими словами, это попытка устранить проблему отображения путем изменения кода. На самом деле, этот способ приводит к созданию новых проблем, при этом не решая изначальной. Отметим также, что нижнюю границу таблицы перемещать не следует!

    Создание шаблона для многократного применения
    увеличить изображение


  • Выделите текст "About Newland Tours" и замените его текстом "Page Title Goes Here".

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

    . Если каждое слово заменителя начинается с прописной (заглавной) буквы, это служит напоминанием всем, кто работает с шаблоном, что все слова заголовка начинаются с прописных букв.

  • Замените первый абзац текста в документе текстом "Body text goes here". Несколько раз нажмите клавишу (Del) до тех пор, пока не будут удалены все пустые строки под абзацем.

    Чтобы Dreamweaver заново отобразил таблицу, следует щелкнуть в селекторе тегов на теге
  • .

    Шаблон страницы должен выглядеть так же, как на рисунке.

    Создание шаблона для многократного применения
    увеличить изображение


  • Сохраните документ generic_template.htm.


  • СодержаниеНазадВперед

    Основы динамического веб-сайта

    Основы динамического веб-сайта

    Если на мгновение отвлечься от особенностей сайта Newland Tours, описанных в предыдущих уроках, будет легко понять ряд принципов, которые важны для разработки динамического сайта. Один из них – это отделение структурной разметки от дизайна. К этому моменту за структурную разметку страниц отвечает XHTML-код, а за их внешний вид – каскадные таблицы стилей. Другой принцип – сочетание двух различных типов документов (HTML-страницы и CSS-файла), в результате чего появляется новый документ, непохожий на исходные. Эти принципы являются системообразующими при разработке динамичных веб-сайтов.
    Для того чтобы понять это взаимодействие и подготовиться к будущим заданиям, уделим время анализу отношений между тремя различными источниками информации, из которых формируется каждая веб-страница: контентом (текстом, картинками и т.д.), логической структурой (иерархическим построением элементов структуры документа, например, заголовками и обычным текстом) и оформлением (цветом, размером шрифтов, расположением и другими визуальными эффектами).
    В ранних версиях HTML текст, разметка и код внешнего вида содержались в HTML-документе. Другими словами, на жестком диске разработчика и в браузере пользователя документ выглядел одинаково. Эта простая взаимосвязь отображена на первой схеме вверху следующей страницы.
    В результате изменений, проведенных в уроках 2 и 3, взаимосвязь изменилась, а конкретно, внешний вид документа был отделен от его структуры и контента. Информация о внешнем виде теперь содержится в CSS-файле. Содержимое документа расположено в виде текста внутри разметки XHTML, отображающей логическую структуру документа. Только при объединении XHTML- и CSS-документов формируется итоговая страница. Эта новая взаимосвязь представлена на второй схеме вверху следующей страницы.
    Основы динамического веб-сайта

    Теперь в эту взаимосвязь будет добавлен еще один уровень, еще мощнее и значимее, чем переход от HTML к XHTML и CSS. Его суть заключается в том, что при добавлении на страницу сведений из базы данных, оно отделяется от структурных компонентов документа. Это означает, что все три уровня – внешний вид, логическая структура и контент – становятся практически независимыми друг от друга, то есть при существенном изменении на одном из уровней не требуется вносить правки на других. Взаимосвязь (и основной план для всей книги) представлена на схеме вверху следующей страницы.
    HTML не позволяет отделить контент от логической структуры документа. Даже в ключевой пятой версии (XHTML 1) язык разметки HTML, в значительной мере, предназначен для разметки открытого текста. Он не может выполнять сценарии, вычислять значения выражений, производить математические расчеты, взаимодействовать с базой данных или обмениваться с пользователем информацией. Тем временем, для отделения логической структуры от контента порой необходимо использовать все эти возможности и даже больше. Для выполнения всех этих задач с помощью HTML требуются дополнительные средства, и для этого идеально подходят технологии, выполняемые на стороне сервера – Microsoft ASP, Macromedia ColdFusion MX и PHP.
    Основы динамического веб-сайта

    Примечание. Язык стилей XSLT (eXtensible Stylesheet Language for Transformation – расширяемый язык стилей для преобразования) представляет усиленный вариант CSS и способен создавать циклы, преобразовывать данные и многое другое. Одна из самых полезных его особенностей – это возможность конвертировать один тип XML-документов (например, язык XML, разработанный для внутреннего применения) в другой (в частности, стандартный тип XML-документов для передачи другим), и наоборот. Несмотря на свои полезные функции, XSLT не настолько эффективен и гибок, как приложения, выполняемые на стороне сервера, разработанные при помощи ASP, ColdFusion или PHP.

    Серверные технологии (ASP, ColdFusion, PHP и другие, к примеру, JSP и ASP.NET) способны выполнять программные задачи, в частности, вычисление значения выражений, проведение математических расчетов и выполнение сценариев. Вдобавок, они могут взаимодействовать с источниками данных, включая базы данных, структурированные текстовые файлы и, в некоторых случаях, данные XML-документов. Ряд функций связан исключительно с сетью, например, с возможностью собирать данные, присланные пользователем и управлять информацией, которая отправляется ему обратно.

    Но здесь есть одна загвоздка. Браузеры могут обрабатывать только HTML, CSS и JavaScript, а серверные сценарии они не способны обрабатывать (под серверными сценариями подразумевается код, написанный на ASP, ColdFusion, PHP и т. п.). Поэтому серверные сценарии выполняются на сервере, а затем пересылаются браузеру. Все, что сервер отправляет браузеру, должно быть предварительно преобразовано в стандартный HTML-код.

    Проще говоря, для того чтобы страница с динамическим содержимым отобразилась в браузере, следует запустить ее на сервере, способном выполнить код. Это и есть главное отличие от стандартных HTML-страниц, которые отображаются в браузере, независимо от их расположения. Если открыть в Internet Explorer или Netscape любую HTML-страницу из папки Lesson04/Start, то она отобразится должным образом. Если попытаться открыть страницы из папки Lesson04/Complete, то окажется, что они не открываются (или открываются в Dreamweaver MX и не открываются в браузере). Браузер не распознает непонятный для него код и отказывается открывать файл. Именно поэтому для просмотра окончательной версии использовался сайт, размещенный по адресу http://www.allectomedia.com, а не файлы с компакт-диска.

    Обычно, когда речь идет о серверах в сети, под сервером подразумевается компьютер, на котором хранится HTML-файл. Правильнее называть его веб-сервером. К самым популярным веб-серверам относятся Apache, управляемый операционными системами Unix/Linux или Mac OS X, и Microsoft Internet Information Services (IIS) под управлением Windows.

    Помимо веб-серверов, для отправки динамических данных применяются и другие виды серверов, в частности, серверы баз данных (например, MySQL или Microsoft SQL Server) или серверы приложений. Сервер приложений выполняет серверные сценарии. ColdFusion, по существу, является сервером приложений. Сервер приложений, выполняющий сценарии ASP, встроен в IIS, то есть IIS – это гибрид веб-сервера и сервера приложений. PHP – это сервер приложений, который устанавливается в качестве модуля на сервер Apache.

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

    Повторная регистрация сайта Newland Tours для разработки динамического сайта

    Настройка Dreamweaver для работы с динамическими веб-сайтами является более трудоемкой, чем для работы со статичными. Для настройки сайта точно так же используется диалоговое окно Site Definition (Определение сайта). Регистрация динамического сайта осложняется внешними причинами, – для его разработки требуется доступ (и соответствующие права) на реальный веб-сервер, желательно с сервером приложений и базами данных.
    Для многих это может оказаться непривычным делом, с которым они сталкиваются в первый раз. В прошлом сайты разрабатывались на жест-ком диске разработчика, а затем загружались на сервер для публикации. В случае с динамическими веб-сайтами, помимо разработки на локальном компьютере, требуется доступ на рабочий сервер. На общедоступный сервер сайт можно загружать только после того, как он будет протестирован и отлажен на рабочем сервере.
    Примечание. Единственная разница между рабочим и обычным веб-сервером заключается в том, что рабочий веб-сервер закрыт для общего доступа. Но, с технической точки зрения, рабочий сервер идентичен обычному, то есть обрабатывает и выводит код таким же образом.
    Серверы могут располагаться как на локальном, так и на удаленном компьютере (например, сервер в локальной сети или сервер интернет-провайдера, при работе с которым применяется протокол FTP). Соответственно, существует два варианта подключения к серверам.
    При работе с локальным сервером нужно затратить некоторое время на настройку компьютера, следуя приведенным далее инструкциям. При работе с удаленным сервером настраивать компьютер не требуется, но необходима определенная информация от администратора сервера, позволяющая настроить Dreamweaver для дальнейшей работы.
    В зависимости от того, какой вариант выбран, следует организовать работу в этом уроке тем или иным образом:
  • при разработке сайта на локальном сервере следует перейти к следующему разделу "Разработка на локальном сервере";
  • при разработке сайта на удаленном сервере необходимо перейти к разделу "Разработка на удаленном сервере";
  • по завершении работы с одним из разделов, вне зависимости от серверной модели или выбранных настроек, нужно настроить Dreamweaver для работы с сервером и выбранной серверной моделью. Об этом говорится в разделе "Регистрация динамического сайта в Dreamweaver (всем пользователям)".


  • СодержаниеНазадВперед

    Разработка на локальном сервере

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

  • Теперь укажем основные недостатки локальной разработки:
  • установка сервера ослабляет систему безопасности компьютера. Чем меньше знаний по настройке сервера, тем выше уязвимость компьютера к атакам, вирусам, взломам и червям;
  • исследовать и решать проблемы, связанные с настройками и сбоями в работе, как правило, приходится самостоятельно.
  • Совет. Лучший способ защитить сервер от взломов, вирусов и червей – это, как минимум, два раза в неделю запускать обновления Windows Update (Windows) или Software Update (Macintosh) и устанавливать все обновления по безопасности. Особенно важно это для пользователей операционной системы Windows, поскольку именно она чаще всего становится жертвой злоумышленников. Команда запуска Windows Update расположена в меню Start (Пуск), а команда запуска Software Update для Macintosh – в System Preferences (Системные установки).
    Если принято решение разрабатывать сайт Newland Tours на локальном компьютере, следует выбрать одну из серверных моделей и соответствующим образом настроить систему. Далее приведены различные варианты настроек, каждый из которых соответствует определенной модели. По завершении следует перейти в раздел "Регистрация динамического сайта в Dreamweaver (всем пользователям)".
    Примечание. У пользователей Macintosh OS X, которые решили разрабатывать сайт на локальном компьютере, есть только один вариант – PHP в сочетании с веб-сервером Apache. Для того чтобы работать с ASP или ColdFusion, нужно подключиться к удаленному серверу, который уже поддерживает эти технологии.Примечание. Строго говоря, Macintosh все же предоставляет возможность локальной разработки сайта на основе ColdFusion. Для этого нужно установить сервер Macromedia JRun 4, а поверх него – ColdFusion. Такая установка может оказаться непривычной для начинающих и потребовать значительных усилий, особенно если работа над сайтом Newland Tours является первым опытом подобного рода. Тем не менее, организации, в которых применяются компьютеры Macintosh и которые предпочитают использовать сервер Macintosh, должны серьезно рассмотреть эту возможность. В книге разработка сайта при помощи ColdFusion, установленной поверх JRun на Macintosh, подробно не описывается, хотя большинство шагов и фрагментов кода будут такими же.

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

    Разработка на удаленном сервере

    Вариант с установкой и настройкой локального сервера подходит не для всех. Пользователи Macintosh, как правило, не имеют доступа к IIS или ColdFusion. К тому же, многие пользователи Windows и Macintosh, работающие в локальных сетях университетов или других учебных заведений и организаций, не имеют прав на установку и запуск веб-серверов, даже при наличии брандмауэра. Причиной подобных запретов является обеспечение безопасности. Веб-серверы требуют от администратора постоянного наблюдения и своевременной реакции на вирусы или прорехи в системе безопасности, наличие которой резко повышает вероятность взлома сетей. Чтобы предотвратить эту угрозу или, по крайней мере, снизить вероятность проникновения злоумышленников через систему безопасности, администраторы нередко запрещают пользователям устанавливать серверы.
    При отсутствии доступа к локальному серверу очевидным решением становится использование другого рабочего сервера. Это может быть сервер, специально предназначенный для разработок (в университете у меня именно такой), или просто закрытая для общего доступа папка, которая расположена на веб-сервере для публикации. Для подключения к серверу используется соединение по сети или FTP-протокол. В любом случае для регистрации сайта в Dreamweaver требуется знать либо сетевой путь, либо параметры FTP-доступа, полученные от администратора сервера. На сервере должен быть установлен IIS (если применяется ASP), ColdFusion MX (если используется ColdFusion) или Apache, либо IIS с модулем PHP (если задействован PHP).
    Помимо личной учетной записи и прав на добавление и удаление файлов и папок в ее рамках, требуются следующие данные от администратора сайта.
  • Путь к папке в сети, который выглядит приблизительно так:
    \\webdev.bigcompany.com\your_site\ \\serverName\your_site\
    Примечание. При наличии сетевого доступа к серверу следует подключить сетевой диск к учетной записи.
  • Данные FTP-доступа на сайте: имя хоста или его IP-адрес (например, 123.12.123.12), имя пользователя и пароль для доступа к учетной записи.
    Указанной информации достаточно для того, чтобы загружать файлы в эти папки. Но для просмотра содержимого сервера требуется другой URL-адрес. Обычно он выглядит следующим образом: http://webdev.bigcompany.com/your_site/ или http://serverName/your_site/. При открытии сайта для свободного доступа URL-адрес (согласно этому примеру) станет следующим: http://www.bigcompany.com/your_site/. Важно следить за тем, чтобы в URL-адресах содержался префикс http://. Информацию об адресах может предоставить только серверный администратор.


  • СодержаниеНазадВперед

    Регистрация динамического сайта в Dreamweaver (всем пользователям)

    Вне зависимости от выбранной серверной модели, нужно зарегистрировать сайт в Dreamweaver. Этот процесс описан в последующих шагах. Для регистрации требуется доступ к полностью сконфигурированному веб-серверу с установленным и запущенным сервером приложений или модулем, который был выбран.
  • Откройте сайт Newland Tours в Dreamweaver и в меню Site (Сайт) выполните команду Manage Site (Управление сайтом). Убедитесь, что в одноименном диалоговом окне Manage Site выбран сайт Newland Tours и нажмите Edit (Изменить).
    Следует помнить, что сайт Newland Tours уже зарегистрирован, поэтому не нужно начинать регистрацию с нуля. Достаточно добавить на сайт информацию об удаленном сервере (remote server) и сервере тестирования (testing server).
  • В диалоговом окне Site Definition for Newland Tours (Определение сайта для Newland Tours) щелкните на вкладке Advanced (Дополнительно). Затем в списке категорий в левой части окна выберите категорию Remote Info (Удаленная информация). В раскрывающемся списке Access (Доступ), согласно приведенным ниже указаниям, выберите нужную опцию и введите в появившиеся поля соответствующую информацию.
    При использовании локальной версии IIS (поверх которой установлены ASP или ColdFusion) выберите в раскрывающемся списке Access (Доступ) вариант Local/Network (Локальная сеть). Щелкните на изображении папки справа от поля Remote folder (Удаленная папка) и перейдите в папку C:\Inetpub\wwwroot\. Нажмите кнопку Add New Folder (Добавить новую папку), чтобы создать новую папку newland. Дважды щелкните на папке, чтобы сделать ее удаленной.
    Примечание. Папка Inetpub\wwwroot является корневым каталогом IIS на компьютере. При просмотре сайта (http://localhost/) страницы будут обрабатываться именно в этой папке.
    Регистрация динамического сайта в Dreamweaver (всем пользователям)

    При использовании локальной версии автономного веб-сервера ColdFusion, выберите в раскрывающемся списке Access (Доступ) вариант Local/Network (Локальная сеть). Щелкните на значке с изображением папки справа от поля Remote folder (Удаленная папка) и перейдите в папку C:\CFusionMX\wwwroot\. Нажмите кнопку Add New Folder (Добавить новую папку), чтобы создать новую папку newland. Дважды щелкните на папке, чтобы сделать ее удаленной.

    Примечание. Папка CfusionMX\ wwwroot является корневым каталогом автономного сервера ColdFusion, установленного на компьютере. При просмотре сайта (http://localhost:8500/) страницы будут обрабатываться именно в этой папке.

    При использовании локальной версии Apache в раскрывающемся списке Access (Доступ) выберите пункт Local/Network (Локальная сеть). Щелкните на значке с изображением папки справа от поля Remote folder (Удаленная папка) и перейдите в папку C:\Program Files\Apache Group\ Apache2\htdocs (Windows) или HD:Library:WebServer:Documents (Macintosh). Нажмите кнопку Add New Folder (Добавить новую папку) (Windows) или New Folder (Создать папку) (Macintosh), чтобы создать новую папку newland. Дважды щелкните на папке, чтобы сделать ее удаленной.

    В случае применения сетевого сервера выберите в списке Access (Доступ) пункт Local/Network (Локальная сеть) и перейдите в папку сервера. Желательно, чтобы это происходило на подключенном сетевом диске. В диалоговом окне Choose Remote Folder (Выбор удаленной папки) создайте новую папку newland и укажите ее в качестве удаленной.

    При использовании сервера с FTP-доступом убедитесь, что на сервере создана папка newland. Затем в диалоговом окне Site Definition (Определение сайта) в раскрывающемся списке Access (Доступ) выберите пункт FTP и в текстовое поле FTP Host (Узел FTP) введите IP-адрес или веб-адрес. В поле Host Directory (Каталог угла) введите путь к папке newland. В поля Login и Password введите логин и пароль. По завершении щелкните на кнопке Test (Проверить), чтобы убедиться в том, что все параметры введены правильно.

  • В списке категорий в левой части диалогового окна воспользуйтесь категорией Testing Server (Сервер тестирования). В меню Server Model (Модель сервера) выберите пункт ASP VBScript, ColdFusion или PHP MySQL, в зависимости от выбранной серверной модели. В раскрывающемся списке Access (Доступ) и в полях, расположенных ниже, укажите ту же информацию, что и на предыдущем шаге.

    Примечание. Пункт ASP JavaScript выбирать не следует. Хотя в целом эта серверная модель работает хорошо, она несовместима с большей частью кода, который используется в книге.

    Для сайта Newland Tours удаленный сайт (Remote site) и сервер тестирования (Testing server), по сути, являются одним и тем же. Разница заключается в том, что удаленный сайт позволяет Dreamweaver сохранять файлы в соответствующей папке, а сервер тестирования – проверять файлы после их обработки сервером, тем самым, давая возможность убедиться в том, что они действительно являются работоспособными.




  • Примечание. Папка CfusionMX\ wwwroot является корневым каталогом автономного сервера ColdFusion, установленного на компьютере. При просмотре сайта (http://localhost:8500/) страницы будут обрабатываться именно в этой папке.

    При использовании локальной версии Apache в раскрывающемся списке Access (Доступ) выберите пункт Local/Network (Локальная сеть). Щелкните на значке с изображением папки справа от поля Remote folder (Удаленная папка) и перейдите в папку C:\Program Files\Apache Group\ Apache2\htdocs (Windows) или HD:Library:WebServer:Documents (Macintosh). Нажмите кнопку Add New Folder (Добавить новую папку) (Windows) или New Folder (Создать папку) (Macintosh), чтобы создать новую папку newland. Дважды щелкните на папке, чтобы сделать ее удаленной.

    В случае применения сетевого сервера выберите в списке Access (Доступ) пункт Local/Network (Локальная сеть) и перейдите в папку сервера. Желательно, чтобы это происходило на подключенном сетевом диске. В диалоговом окне Choose Remote Folder (Выбор удаленной папки) создайте новую папку newland и укажите ее в качестве удаленной.

    При использовании сервера с FTP-доступом убедитесь, что на сервере создана папка newland. Затем в диалоговом окне Site Definition (Определение сайта) в раскрывающемся списке Access (Доступ) выберите пункт FTP и в текстовое поле FTP Host (Узел FTP) введите IP-адрес или веб-адрес. В поле Host Directory (Каталог угла) введите путь к папке newland. В поля Login и Password введите логин и пароль. По завершении щелкните на кнопке Test (Проверить), чтобы убедиться в том, что все параметры введены правильно.

  • В списке категорий в левой части диалогового окна воспользуйтесь категорией Testing Server (Сервер тестирования). В меню Server Model (Модель сервера) выберите пункт ASP VBScript, ColdFusion или PHP MySQL, в зависимости от выбранной серверной модели. В раскрывающемся списке Access (Доступ) и в полях, расположенных ниже, укажите ту же информацию, что и на предыдущем шаге.

    Примечание. Пункт ASP JavaScript выбирать не следует. Хотя в целом эта серверная модель работает хорошо, она несовместима с большей частью кода, который используется в книге.

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

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

    Если при тестировании сайта на удаленном сервере главная страница отобразилась в браузере должным образом, значит все настроено правильно. Тем не менее, действительно динамических страниц на сайте Newland Tours пока нет. В этом упражнении на примере создания простого динамического приложения демонстрируются принципы работы динамических сайтов и приводится последовательность шагов, необходимых для того, чтобы приложение заработало.

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

    Создание страницы ввода

    Первым делом нужно создать страницу, на которой вводятся имена пользователей. Нажатие кнопки Submit, предназначенной для регистрации, переводит пользователя на другую страницу, где отобразится введенное им имя. Это приложение, конечно, не демонстрирует всех возможностей ASP, ColdFusion и PHP. Тем не менее, в нем представлены основные способы создания форм и обработки динамических данных, а также показаны различия между кодом, выполняемым на стороне клиента, и кодом, исполняемым на стороне сервера.
  • В меню File (Файл) выполните команду New (Создать) (сайт Newland Tours должен быть открыт). В списке категорий, расположенном в левой части диалогового окна New Document (Новый документ), выберите пункт Dynamic Page (Динамическая страница), а затем в столбце справа укажите пункт ASP, ColdFusion или PHP. Убедитесь, что установлен флажок Make document XHTML compliant (Сделать документ совместимым с XHTML). Нажмите Create (Создать).
    Создание страницы ввода

    На этом шаге создается новая динамическая страница. Определение типа динамической страницы позволяет указать Dreamweaver, какой код использовать во встроенных в программу моделях поведения сервера, какое расширение добавлять при сохранении файла и (в некоторых случаях) какой код следует добавлять в заголовок документа.
    При использовании ASP на страницу будет добавлена строка <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>. Эта строка определяет, какой язык применяется с ASP: VBScript или JScript. Для упражнений этой книги следует использовать VBScript. В ColdFusion, как и в PHP, употребляется только один язык для написания сценариев, – так что на новой странице ColdFusion или PHP подобных строк не будет.
  • Щелкните в любом месте в режиме Design (Дизайн), перейдите в категорию Forms (Формы) на панели Insert (Вставка) и нажмите кнопку Form (Форма), чтобы вставить форму. Щелкните на кнопке Text Field (текстовое поле), а затем – на кнопке Button (Кнопка).
    Теперь на страницу будет добавлена основная форма.
    Создание страницы ввода
    увеличить изображение

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

    Форма на этом этапе еще не настроена и пока не выполняет никаких действий. Рядом с текстовым полем нет надписи, объясняющей назначение формы.

  • Щелкните на текстовом поле и один раз нажмите на клавиатуре клавишу перемещения со стрелкой влево, чтобы поместить курсор перед текстовым полем. Введите надпись "First Name" ("Имя").

    Если рядом с текстовыми полями не ставить надписей, никто не поймет, какую информацию в них следует вводить.

  • Щелкните на текстовом поле и на панели Property Inspector (Инспектор свойств) присвойте ему название "firstName" ("имя"), после чего нажмите клавишу (Tab) или (Enter)/(Return).

    Создание страницы ввода
    увеличить изображение

    Вскоре это имя будет использовано для того, чтобы поместить введенное значение в сценарий ASP, ColdFusion или PHP. Рекомендуется всегда присваивать полям формы осмысленные имена. Написание кода и так достаточно трудоемкий процесс, поэтому не стоит дополнительно усложнять его, оставляя имена, которые Dreamweaver использует по умолчанию (Textfield1, Textfield2, Textfield3 и т.д.).

    Нажатие (Tab) или (Enter)/(Return) подтверждает те изменения, которые были выполнены на панели Property Inspector (Инспектор свойств).

  • В селекторе тегов щелкните на теге , чтобы на панели инспектора свойств открыть свойства формы. Присвойте форме имя frm_name, а в текстовое поле Action (Действие) введите "test_form_processor.asp" (либо .cfm или .php).

    В поле Action (Действие) указывается URL-адрес страницы (или другого ресурса), на которой хранится сценарий, обрабатывающий данные формы. В этом случае в поле указан несуществующий адрес, поскольку файл test_form_processor.asp (.cfm или .php) еще не был создан. В раскрывающемся поле со списком Method (Метод) должен быть выбран пункт POST. О методе POST будет рассказано в одном из следующих уроков.

    Примечание. С этого времени подразумевается, что вы можете самостоятельно указывать расширения согласно выбранной серверной модели. Отсутствие замечания (либо .cfm или .php), возникающего каждый раз при упоминании файла, свидетельствует о вашем довольно высоком IQ. Далее в книге задействован вариант .asp, – так что при использовании ColdFusion следует подставлять вместо него расширение .cfm, а при употреблении PHP – расширение .php.

    Создание страницы ввода
    увеличить изображение

  • В меню File (Файл) выполните команду Save as (Сохранить как) и присвойте файлу имя test_form.asp.

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



  • СодержаниеНазадВперед

    Создание страницы вывода

    Страница ввода готова. Пора продемонстрировать, как ASP, ColdFusion или PHP могут собирать эту информацию, вставлять ее в обычный XHTML-код и возвращать браузеру.
  • Создайте новую динамическую страницу.
    Этот шаг повторяет действия, описанные на шаге 1 предыдущего упражнения.
  • Сохраните новый файл как test_form_processor.asp.
    В названиях страниц, используемых для обработки данных, я обычно добавляю суффикс "_processor". Созданная страница будет обрабатывать данные, введенные пользователем в форму.
  • В режиме Design (Дизайн) введите текст "Thank you, , for filling out my form" ([Имя пользователя], мы признательны Вам за заполнение формы). Поместите курсор в любое место абзаца и в поле со списком Format (Формат) на панели Property Inspector (Инспектор свойств) выберите пункт Paragraph (Абзац).
    В итоге, текст будет выглядеть следующим образом: "Thank you, [имя пользователя], for filling out my form". Большая часть предложения представляет собой статический текст. К динамической части относится имя пользователя, которое будет извлечено из формы.
    При выборе в раскрывающемся списке Format (Формат) пункта Paragraph (Абзац) строка текста помещается между тегами и
    .
    Создание страницы вывода
    увеличить изображение

  • Поместите курсор между запятыми, где должно находиться имя. Откройте панель Bindings (Привязки) с помощью команд Window\ Bindings (Окно/Привязки).
    Панель Bindings применяется для указания всех данных, которые доступны на странице. Эти данные, как правило, хранятся в виде пары "имя-значение". В данном случае имя – firstName. Значения еще не существует, и оно не появится до тех пор, пока кто-нибудь не заполнит форму. Следует также помнить, что значение попадает на страницу вывода из формы, расположенной на странице test_form.asp. Помимо форм к возможным источникам данных относятся URL-адреса, наборы записей (данные, полученные из базы данных), файлы cookie и т.д. О других источниках речь пойдет позже, а в этом упражнении данные поступают из формы.

    Создание страницы вывода

  • Нажмите кнопку со знаком "+", чтобы прикрепить новое значение. В поле со списком выберите вариант Request Variable (Переменная запроса) (ASP) или Form Variable (Переменная формы) (ColdFusion и PHP). В случае с ASP в появившемся диалоговом окне выберите в поле со списком Type (Тип) пункт Request.Form, а в поле Name (Имя) введите "firstName". В случае с ColdFusion или PHP введите в текстовое поле Name имя firstName. Нажмите OK.

    На первом примере показано диалоговое окно Request Variable, которое отобразится при использовании ASP, а на втором – диалоговое окно Form Variable, которое увидят пользователи ColdFusion и PHP.

    Создание страницы вывода

    Создание страницы вывода

    Панель Bindings (Привязки) будет обновлена, и в ней отобразится переменная firstName. На примере показано, как выглядит панель Bindings при использовании ASP. В случае с ColdFusion и PHP она несколько отличается (вместо слова Request [Запрос] используется слово Form [Форма], а надпись Form.firstName заменяется надписью firstName).

    Создание страницы вывода

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

    В начале урока, один за другим, было приведено три фрагмента кода (на ASP, ColdFusion и PHP). В коде была указана переменная (firstName), ее источник (форма) и действия, которые с ней следует предпринять (вывести в XHTML). Действия, выполненные с помощью панели Bindings (Привязки), реализовали эту логическую взаимосвязь в том виде, который Dreamweaver способен понять и преобразовать в код.

    В случае с ASP определена переменная запроса (Request Variable). В ASP объект Request применяется для получения информации из заданного места. В диалоговом окне выбран тип Request.Form, дающий указание искать в объекте Request переменную, которая задается через форму. Наконец, указано имя самой переменной. Образно говоря, Dreamweaver и ASP приобрели "дорожную карту", с помощью которой можно найти значение переменной firstName.

    В случае с ColdFusion и PHP определена переменная формы (Form Variable), которой достаточно для поиска (объекты Request и прочая уточняющая информация не требуются). Затем указано имя переменной. В данном случае тоже подходит сравнение с дорожной картой.

    К этому моменту Dreamweaver располагает исчерпывающей информацией о том, как найти переменную. Но программа еще не получала ни указания искать ее, ни инструкций по обработке значения переменной после того, как она будет найдена.




  • В случае с ColdFusion и PHP определена переменная формы (Form Variable), которой достаточно для поиска (объекты Request и прочая уточняющая информация не требуются). Затем указано имя переменной. В данном случае тоже подходит сравнение с дорожной картой.

    К этому моменту Dreamweaver располагает исчерпывающей информацией о том, как найти переменную. Но программа еще не получала ни указания искать ее, ни инструкций по обработке значения переменной после того, как она будет найдена.

  • Убедитесь, что на панели Bindings (Привязки) выделена переменная Form.firstName (ASP) или firstName (ColdFusion/PHP), после чего нажмите кнопку Insert (Вставить), расположенную внизу панели.

    На странице между запятыми появится надпись {Form.firstName}, выделенная синим цветом. В Dreamweaver синим цветом обозначается текст, относящийся к динамическому содержимому. При просмотре страницы в браузере синий цвет показан не будет. Не будет отображаться и надпись {Form.firstName}, вместо нее отобразится имя пользователя.

    Создание страницы вывода
    увеличить изображение

    Примечание. Надпись {Form.firstName} внешне напоминает код, но на самом деле является псевдокодом. Внешний вид надписи не зависит от серверной модели. Возможно, псевдокод применяется для того, чтобы указать, какая часть страницы относится к динамическому содержимому. Главное – не пытаться использовать этот синтаксис при написании кода.

    В действительности, на страницу будет добавлен следующий код: <%= Request.Form("firstName") %> (ASP), #form.firstName# (ColdFusion) или (PHP). Это те же фрагменты кода, которые демонстрировались в начале урока, с небольшим изменением в коде ASP.

    Для того чтобы сервер IIS вывел значение на страницу, используется объект Response (Отклик). Чаще всего, объект Response используется в виде Response.Write(). Эта команда указывает IIS вставить в документ текст, расположенный внутри скобок. Функция Response.Write() эквивалентна (с небольшими отличиями) или echo. Она настолько часто применяется, что имеет и сокращенный вариант. Сочетание <%= (вместо <%) в начале ASP-кода означает <% Response.Write(). Другими словами, две строки кода, приведенные ниже, абсолютно равнозначны.

    <% Response.Write(Request.Form("firstName")) %> <%= Request.Form("firstName") %>


    Итак, в двух предыдущих шагах при помощи кнопки со знаком плюс "+", расположенной на панели Bindings (привязки), была добавлена информация для Dreamweaver и ASP (Dreamweaver и ColdFusion, Dreamweaver и PHP) о том, как найти переменную firstName. Затем переменная была прикреплена на страницу, благодаря чему ASP, ColdFusion или PHP получили информацию о том, как найти и отобразить ее текущее значение.

  • Сохраните и закройте все открытые документы. На панели Site (Сайт), удерживая нажатой клавишу (Shift), выделите файлы test_ form.asp и test_form_processor.asp. Нажмите кнопку Put File(s) (Поместить файл [-ы]), расположенную на панели инструментов в верхней части панели.

    Создание страницы вывода

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

    Совет. Об этом шаге достаточно легко забыть. Если в процессе разработки возникнет неожиданная ошибка, первое, что нужно проверить при ее поиске – все ли необходимые файлы были загружены.
  • На панели Site (Сайт) выделите файл test_form.asp и нажмите клавишу (F12), чтобы протестировать его в браузере. Когда страница загрузится, введите в поле свое имя и нажмите кнопку регистрации Submit.

    Загрузится страница test_form_processor.asp, и введенное в форму имя отобразится на экране.

    Создание страницы вывода

  • Не закрывая браузер, в меню View (Вид) выполните команду Source (Источник) (или эквивалент этой команды в браузере). Обратите внимание на строку, размещенную между тегами .

    Интересно, что динамический код был полностью удален! Код страницы представляет собой статический XHTML. Даже имя, относящееся к динамической части надписи, выглядит так, словно изначально записывалось в виде статического кода. Но это, конечно, не так.

    Создание страницы вывода
    увеличить изображение

    Беглый анализ кода приводит к пониманию важного принципа. Код, вводимый в Dreamweaver, отличается от кода страницы, которую пользователь видит в браузере (даже несмотря на то, что у обеих страниц одно и то же имя – и, конечно, много других общих свойств).

    Разница между двумя версиями страницы возникает вследствие того, что код исходной страницы (ASP, ColdFusion или PHP) обрабатывается, а затем заменяется XHTML-кодом полученных значений.

    Два варианта страницы имеют и некоторые сходные черты. Весь стандартный XHTML-код исходной страницы (в том числе, теги и , а также большая часть текста) остался неизменным в ее итоговой версии.



  • СодержаниеНазадВперед

    Стратегия параллельного изучения ASP, ColdFusion и PHP

    Не стоит опасаться перспективы одновременного изучения всех трех моделей. В большинстве случаев, если для обработки определенных выполняемых функций нужно добавить участок кода на ASP, то потребуется добавить эквивалентный участок для обработки таких же функций средствами ColdFusion или PHP. Самой сложной частью является не изучение синтаксиса разных типов кода, а понимание того, какие данные используются в коде, где именно они расположены и каким образом обрабатываются для получения нужного результата. Если все это четко различать, то синтаксис не представит особой сложности.
    По этой причине ASP, ColdFusion и PHP описываются параллельно. Конечно, разрабатывать один и тот же сайт трижды, по отдельности для каждой серверной модели, не нужно, однако важно приложить усилия, чтобы понять все три фрагмента кода. Например, вместо того, чтобы при работе с ColdFusion пропускать код для ASP и PHP, следует уяснить, каким образом код на разных языках выполняет одни и те же вещи. Понимание того, как все три фрагмента кода выполняют одну и ту же задачу, заметно ускоряет процесс обучения веб-программированию.
    В частности, три приведенных ниже фрагмента кода выполняют одну и ту же задачу – отображение значения, которое пользователь вводит в поле "firstName", содержащееся в форме на XHTML-странице.
    Для ASP:
    Thank you, <% Response.Write(Request.Form("firstName")) %>, for your submission.

    Для ColdFusion:
    Thank you, #form.firstName#, for your submission.

    Для PHP:
    Thank you, , for your submission.

    Проведем сравнительный анализ приведенных трех участков кода и постараемся понять, что в них общего:
  • в каждом применяется специальный набор тегов, которые обозначают код, выполняемый сервером. На ASP – это <% и %>, на ColdFusion – и , а на PHP – ;
  • в каждом приведена команда вывода данных. На ASP это Response.Write, на ColdFusion – , а на PHP –echo;
  • в каждом содержится явная ссылка на имя переменной (firstName);
  • в каждом из них указано, что это переменная формы или переменная POST-запроса (переменные формы, как будет рассказано позже, пересылаются при помощи метода POST). На ASP – это Request.Form("firstName"), на ColdFusion –#form.firstName#, а на PHP – $_POST['firstName'];
  • ни в одном не содержится дополнительного кода, кроме того, что перечислен выше.


  • Запоминать этот код не требуется, так как его тестирование проводиться не будет, и в дальнейшем для практической работы с кодом будет достаточно много упражнений. Указанный код приводится для того, чтобы показать полную идентичность действий, которые осуществляются при выполнении этих фрагментов: все три запрашивают переменную формы с именем firstName, и помещают ее в строку обычного XHTML-кода. Следовательно, разница между этими фрагментами только формальная – это вопрос синтаксиса и поиска нужной информации в справочнике. А самая сложная часть – это, в первую очередь, понимание того, что можно взять введенное в форму значение и отправить его обратно вместе с обычным XHTML-кодом.

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

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

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

    Установка Apache для Mac OS X

    Начиная с версии операционной системы Mac OS X, Apache устанавливается по умолчанию, – так что здесь ничего устанавливать не нужно. Но поскольку по умолчанию работа веб-сервера Apache приостановлена, следует его включить.
  • Откройте окно System Preferences (Системные установки) и щелкните на папке Sharing (Общий доступ).
    Эта папка используется для управления доступом к файлам и принтерам с разных компьютеров в сети, для работы с веб-сервисами, FTP-доступом, брандмауэрами и т. д.
    Установка Apache для Mac OS X

  • На вкладке Services (Службы) диалогового окна Sharing (Общий доступ) следует установить флажок Personal Web Sharing (Доступ к Personal Web Server).
    Выполнение указанных операций приведет к запуску Apache.
    Примечание. С Mac OS X совместим сервер Apache версии 1.3.х. В момент написания этой книги последней версией была 2.0.x. Для упражнений, приведенных в книге, вполне подходит версия 1.3. Для того, чтобы установить последнюю версию Apache, нужно зайти на страницу по адресу http://www.apache.org/ и следовать инструкциям по установке.
    Примечание. Веб-разработчикам, работающим на Macintosh, будет полезен сайт по настройке Mac, размещенный по адресу: http://develo-per.apple.com/internet/macosx/intro.html.
    Установка Apache для Mac OS X



  • СодержаниеНазадВперед

    Установка Apache для Windows

    Чтобы загрузить и установить веб-сервер Apache для Windows, нужно придерживаться приведенных ниже инструкций.
    Примечание. Инструкции подразумевают, что в качестве локального веб-сервера не применяется IIS. Если Apache не является единственным сервером на компьютере, процесс установки и настройки несколько изменяется.
  • Откройте страницу, расположенную по указанному адресу, прочтите инструкции и щелкните на ссылке Download (Загрузить).
    http://httpd.apache.org/
    Помимо веб-сервера, на сайте содержится множество полезных ресурсов для веб-разработчиков.
  • Найдите двоичный файл для установки под Windows (Windows Binary) самой свежей версии и щелкните на соответствующей ему ссылке.
    В момент написания этой книги номер самой последней версии был 2.0.47.
  • Сохраните файл на жестком диске и дождитесь, пока он будет загружен.
    Приложение Apache для Windows упаковано в один установочный файл.
    В момент написания этой книги размер этого двоичного файла составлял около 6 Мб.
  • Дважды щелкните на файле, который вы загрузили, чтобы запустить Мастер установки. Ориентировочное название файла должно быть apache_2.0.47-win32-x86-no_src.msi.
    Установочный файл расположен на жестком диске в папке, где он был сохранен в предыдущем шаге.
  • Проведите установку. На экране Server Information (Информация о сервере) в полях Network Domain (Домен сети) и Server Domain (Домен сервера) введите "localhost". Выбранный по умолчанию вариант for All Users (для всех пользователей) оставьте без изменений.
    Все экраны в программе установки сервера Apache содержат подробное описание, кроме экрана Server Information (Информация о сервере). На нем указывается, каким образом разработчики и пользователи должны попадать на сервер. Если бы Apache устанавливался на сетевой сервер, пришлось бы указать имя компьютера и доменное имя, но поскольку он будет использоваться только на одном компьютере, достаточно ввести имя "localhost".
    Установка Apache для Windows

  • Чтобы проверить, насколько успешно прошла установка, следует открыть окно браузера и ввести следующий адрес:
    http://localhost/
    Должна открыться показанная ниже страница.
    Установка Apache для Windows
    увеличить изображение



  • СодержаниеНазадВперед

    Установка локальной среды для Apache/PHP

    Пользователям Macintosh и Windows, не знакомым с Unix-системами, установка локальной среды на основе открытых программных продуктов Apache и PHP может показаться сложной и пугающе запутанной. Происходит это потому, что нередко встречается несколько версий одной и той же программы и несколько способов ее установки и настройки.
    Но основная причина, по которой многие пользователи Windows и Macintosh избегают устанавливать Apache и PHP, заключается в непривычном способе взаимодействия с программой. В Windows и Mac OS взаимодействие пользователя с компьютером осуществляется при помощи диалоговых окон и Мастеров. Так, для установки IIS, используется диалоговое окно, запускаемое из Панели управления ( для Windows), а для настройки ColdFusion – специальная веб-страница, содержащая профессионально разработанные и документированные веб-формы для заполнения. Для настройки PHP, Apache и (в дальнейшем) MySQL требуется открывать и вручную редактировать текстовые файлы, разбросанные по вложенным папкам. Единственная опечатка способна вызвать сбои в работе системы или даже полностью остановить все процессы (до тех пор, пока все не будет исправлено). При этом текстовый документ содержит минимум информации о необходимых действиях. Такова цена свободно распространяемых технологий.
    В разделе описывается установка как для Windows, так и для Mac OS, хотя описание имеет общий характер. Причина заключается в том, что с того времени, как писалась эта книга, шаги могли слегка измениться.
    Сначала следует скачать последние версии веб-сервера Apache и программного модуля PHP, которые распространяются бесплатно. Поскольку работа PHP зависит от веб-сервера, в первую очередь нужно устанавливать Apache.
    Примечание. Если на компьютере уже установлен веб-сервер IIS, может возникнуть искушение установить программный модуль PHP непосредственно поверх него и тем самым избежать установки Apache. Такой вариант, конечно, сработает, но у него есть существенный недостаток – PHP на сервере IIS создает сравнительно небольшой список интернет-провайдеров. PHP практически всегда устанавливается в паре с Apache. Поскольку крайне желательно, чтобы среда разработки имела как можно большее сходство со средой, в которой будет функционировать сайт, открытый для общего доступа, следует установить Apache. Кроме того, это дает возможность познакомиться со средой Apache: с правами доступа, командами, интерфейсом и т.д.

    В процессе загрузки Apache, PHP или MySQL помимо указания операционной системы, обычно предлагается выбрать исходные или двоичные файлы для загрузки. Исходный файл содержит нескомпилированный код, являющийся основой для программы. Прежде чем устанавливать и использовать такие файлы, их следует скомпилировать, то есть преобразовать исходный код в комбинацию нулей и единиц, известную как двоичный код. Файл с двоичным кодом уже скомпилирован и готов к установке. В коммерческих продуктах (например, выпускаемых компаниями Microsoft или Macromedia) исходный код программ всегда держится в секрете, – так что используются только двоичные файлы. Преимущество исходного кода заключается в том, что его можно изменять. Тем не менее, предполагается, что технический уровень тех, кто читает эту книгу, не позволит им редактировать исходный код Apache или PHP. Вдобавок, исходный код требует преобразования в двоичный. Поэтому при работе с этой книгой рекомендуется выбрать самый легкий путь и просто загрузить двоичные файлы.

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

    Установка локальной среды для ColdFusion

    Благодаря программе установки ColdFusion устанавливается на локальный компьютер довольно легко.
    Примечание. Этот вариант подходит только пользователям Windows.
  • Запустите инсталлятор ColdFusion, находящийся на компакт-диске.
    Через несколько секунд начнется установка.
  • Прочтите текст, приведенный в разделе Introduction (Введение), и нажмите Next (Далее). В разделе License Agreement (Лицензионное соглашение) прочтите текст, подтвердите согласие с лицензионным соглашением и снова нажмите Next (Далее).
    В обоих разделах содержится важная информация, так что не стоит пропускать ее.
  • На экране Install Type (Тип установки) предлагается ввести серийный номер программы. В данном случае следует установить флажок Developer Edition (Версия для разработчика) и нажать Next (Далее).
    Вариант Developer Edition, предназначенный для разработчиков, является бесплатным и может применяться без ограничений во времени. Ключевое ограничение заключается в том, что установленный сервер может использоваться только на локальном компьютере. Это означает, что если пользователь на другом компьютере, подключенном к сети, предпримет попытку доступа к веб-странице, размещенной на сервере ColdFusion и созданной при помощи Developer Edition, пользователь на локальном компьютере увидит сообщение о том, что максимально допустимое количество IP-адресов исчерпано.
    При установке версии для предприятий Enterprise Edition сервера ColdFusion, вводится серийный номер, а ограничение для одного компьютера снимается.
    Установка локальной среды для ColdFusion

  • На экране Install Configuration (Конфигурирование при инсталляции) оставьте активным действующий по умолчанию вариант Server configuration (Конфигурирование сервера) и нажмите Next (Далее).
    Два других варианта предназначены для установки ColdFusion поверх сервера J2EE.
  • На экране Choose Install Directory (Выбор каталога для установки) оставьте без изменения путь, указанный по умолчанию, и нажмите Next (Далее).
    На этом экране указан каталог, в котором предполагается установить ColdFusion.
  • На экране Web Server Selection (Выбор веб-сервера) укажите вариант Built-in web server (Встроенный веб-сервер), если не используется веб-сервер (например, IIS). Если другой веб-сервер применяется, выберите вариант Configure web server connector for ColdFusion MX (Сконфигурировать коннектор веб-сервера для ColdFusion MX), а после этого убедитесь, что название сервера добавлено в поле списка Web Servers/Sites (Веб-серверы/Сайты).

    ColdFusion не предназначен для выполнения роли веб-сервера, поскольку является сервером приложений. При публикации сайта эту роль выполняет другой сервер, в частности, IIS или Apache.

    При разработке сайта реальный веб-сервер по тем или иным причинам может оказаться недоступным. Компания Macromedia таким образом сконфигурировала ColdFusion, чтобы в случае необходимости он мог выполнять роль веб-сервера. Для этого применяется встроенный веб-сервер (вариант Built-in web server [Встроенный веб-сервер]).

    Если веб-сервер (к примеру, Apache или ISS) уже установлен, можно оставить его в качестве основного и подключить к нему ColdFusion. В этом случае веб-сервер, обнаружив непонятный код ColdFusion, передает его на выполнение серверу приложений ColdFusion.

    Установка локальной среды для ColdFusion

    Выбор варианта влияет на адреса страниц, разработанных в ColdFusion, – это важно при дальнейшей настройке Dreamweaver.

  • С этого момента экраны Мастера установки содержат достаточно пояснений. После перехода к последнему экрану нажмите Install (Установить).

    На одном из экранов потребуется указать пароль администратора. Этот пароль крайне важен. Он требуется для настройки сервера ColdFusion и для доступа к ColdFusion из Dreamweaver во время разработки сайта.

    Процесс установки может занять несколько минут, после чего сервер ColdFusion будет запущен.

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

    Требуется нажать Next (Далее) еще несколько раз и подождать несколько минут, пока ColdFusion не завершит процесс установки. После вывода дампа в приложение администрирования ColdFusion установка будет завершена, после чего можно начинать разработку.



  • СодержаниеНазадВперед

    Установка локальной среды для IIS/ASP

    Пользователям, выбравшим ASP, необходимо убедиться, что на компьютере установлен и запущен сервер Internet Information Services (IIS). IIS поставляется бесплатно вместе в Windows 2000 и XP Pro.
    Примечание. В системах Windows 98 и Me вместо IIS следует использовать Personal Web Server (PWS). Однако этот веб-сервер уже не применяется, имеет значительно меньше возможностей и менее надежную систему безопасности. Для разработки динамических веб-сайтов под управлением баз данных требуется профессиональная среда, которой PWS не является. Рекомендуется установить Windows 2000 или Windows XP Professional и пользоваться IIS. Пользователям Windows XP Home тоже не повезло: согласно официальному заявлению Microsoft, для работы с веб-сервером следует использовать Windows XP Professional. Обходной путь решения этой проблемы описан в статье, с которой можно ознакомиться по адресу: http://www.15seconds.com/issue/020118.htm (эффективность этого способа я не проверял).
    Наличие установленного сервера IIS зависит от настроек, изначально выбранных при установке Windows. Для того чтобы это определить, следует открыть папку Control Panel (Панель управления) и активировать опцию Administrative Tools (Администрирование) (чтобы увидеть эту настройку, пользователям Windows XP следует переключиться в классический режим отображения Classic View). Если в окне присутствует значок Internet Information Services, следовательно, сервер уже установлен. Чтобы убедиться в том, что он запущен, следует дважды щелкнуть на значке и в левой части появившегося диалогового окна выбрать пункт Web Sites (Веб-сайты). В правой части окна отобразится пункт Default Web Site (Веб-сайт по умолчанию), напротив которого расположена надпись Running (Выполнение). Если напротив расположена надпись Stopped (Остановленный), следует щелкнуть на кнопке Start (Пуск), чтобы перезапустить его.
    Установка локальной среды для IIS/ASP

    Для установки и запуска IIS нужно выполнить следующие шаги.
  • На панели Control Panel (Панель управления) выберите пункт Add/Remove Programs (Установка и удаление программ). В раскрывшемся диалоговом окне щелкните на кнопке Add/Remove Windows Compo-nents (Добавление и удаление компонентов Windows).
    В течение нескольких минут Windows будет определять, какие компоненты уже установлены на компьютер. После того, как система сформирует профиль, откроется Windows Components Wizard (Мастер компонентов Windows).
  • Следует установить флажок Internet Information Services и нажать Next (Далее).
    Установка по умолчанию замечательно подойдет для наших целей, так что дополнительных настроек производить не требуется. После нажатия кнопки Next (Далее) Windows установит и запустит IIS.
    Установка локальной среды для IIS/ASP



  • СодержаниеНазадВперед

    Установка PHP для Mac OS X

    PHP так же, как и Apache, входит в состав инсталляционной версии Mac OS X, так что устанавливать его не требуется. Установленная на Mac OS X версия PHP не является последней (PHP 4.12). Чтобы загрузить и инсталлировать последнюю версию PHP, следует посетить сайт разработчиков Apple, упомянутый в последнем абзаце предыдущего раздела. Установка последней версии потребует дополнительных усилий, – к тому же для выполнения упражнений этой книги вполне достаточно предустановленной версии. Из всего приведенного в книге PHP-кода в этой версии не будет работать только одна строка, но для выполнения нужной функции есть простой обходной путь, который будет продемонстрирован в нужный момент.
    Для использования PHP для Mac OS следует запустить его. Здесь недостаточно просто установить флажок, как при включении сервера, а необходимо ввести определенный код в файл настроек Apache – httpd.conf.
    Примечание. При разработке сайтов на платформе Mac применяется реализация Unix для Macintosh, названная Darwin. Для успешной работы с системой Darwin требуются навыки работы с окном терминала, перемещения между папками, управления правами доступа и назначения дополнительных полномочий для привилегированных пользователей, а также редактирования текста в популярных текстовых редакторах Unix, таких как pico. Помимо этого, требуются навыки работы в командной строке Unix. Для тех, кто сталкивается с этим впервые, рекомендую свою любимую книгу по OS X "Unix для Mac OS X: руководство по Visual QuickPro" (издательство Peachpit).
  • В окне Terminal откройте файл httpd.conf в режиме текстового редактора.
    Обычно этот файл можно найти по адресу: /etc/httpd/httpd.conf.
  • С помощью функции поиска или обычной прокрутки найдите в файле ряд строк, начинающихся с надписи LoadModule или #LoadModule.
    LoadModule позволяет активировать на сервере Apache различные расширения (в том числе, и PHP).
    Знак #, присутствующий в начале некоторых строк , служит для создания комментариев. Любые строки, перед которыми стоит знак #, будут проигнорированы интерпретатором.

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

    LoadModule php4_module libexec/httpd/libphp4.so

    Это одна из двух строк в файле httpd.conf , активирующих PHP на сервере Apache.

    Установка PHP для Mac OS X

  • Немного ниже раздела со строками LoadModule расположен раздел, каждая из строк которого начинается с надписи AddModule или #AddModule. В раздел следует добавить приведенную ниже строку кода. Если она уже присутствует в разделе в виде комментария, следует удалить символ #, стоящий в ее начале. Если такой строки кода нет совсем, нужно ввести ее в конец раздела AddModule.

    AddModule mod_php4.c

    Строки, введенные на этом и предыдущем шагах, позволяют Apache получить достаточно информации для запуска PHP.

    Установка PHP для Mac OS X

  • С помощью функции поиска или простой прокрутки найдите в файле группу строк, начинающихся с оператора AddType.

    Обнаружить группу AddType несколько сложнее. Чтобы облегчить задачу, следует воспользоваться поиском и в качестве запроса указать текст комментария, расположенного над группой (текст приведен на рисунке).

    Установка PHP для Mac OS X

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

    AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps

    Эти две строки сообщают Apache, что следует просмотреть все файлы с расширением .php как PHP-файлы, а все файлы с расширением .phps как файлы с исходным кодом PHP. Сценарии, содержащиеся в файлах с исходным кодом PHP, не обрабатываются сервером, а отображаются с подсветкой синтаксиса в браузере. Эта возможность полезна для поиска и исправления ошибок.

  • Сохраните и закройте httpd.conf .

    Итак, настройка Apache для работы с PHP завершена. Однако прежде чем начинать работу, сервер следует перезапустить.

  • Для перезапуска Apache нужно вернуться на вкладку Services (Службы) диалогового окна System Preferences (Системные установки), а затем в списке, расположенном слева, установить флажок Personal Web Sharing (Общий доступ к Personal Web Server), нажать кнопку Stop (Остановить), а после того, как она сменится кнопкой Start (Пуск), снова щелкнуть на ней.

    Теперь система настроена для выполнения и использования PHP-файлов.

    Установка PHP для Mac OS X



  • СодержаниеНазадВперед

    Установка PHP для Windows

    Инсталляция PHP для Windows несколько сложнее, чем установка Apache, поскольку с файлами не поставляется программа установки. Вместо этого нужные файлы упакованы в zip-архив. После распаковки некоторые файлы следует вручную переместить в определенные места.
  • Откройте страницу, расположенную по адресу http://www.php.net/downloads.php и скачайте самую последнюю устойчивую версию PHP (не бета-версию) в виде двоичного файла для Windows.
    В момент написания этой книги последней устойчивой версией являлась PHP 4.3.2. Помимо этого была доступна бета-версия PHP 5. Может быть, к настоящему времени полная версия уже выпущена. В таком случае некоторые шаги, приведенные ниже, будут несколько скорректированы. При установке PHP 5 следует посетить сайт книги (по адресу http://www.allectomedia.com) и проверить наличие ошибок и дополнений.
    При использовании PHP версии 4.2 или выше, код работает, как описано в книге.
  • Откройте папку, в которой был сохранен файл, и распакуйте его. В качестве места распаковки укажите диск C.
    Например, в моем случае, PHP располагается по адресу C:\php-4.3.2-Win32. Позже расположение PHP потребуется указать, так что не следует забывать этот адрес.
  • Откройте папку с PHP, расположенную на диске C, найдите файл php.ini-dist и переместите его в системную папку c:\windows (Windows XP) или c:\winnt (Windows 2000). После перемещения переименуйте файл в php.ini.
    Файл php.ini позволяет настраивать запуск PHP на компьютере – это основной файл настроек для PHP.
  • В папке с PHP найдите файл php4ts.dll и переместите его в системную папку c:\windows\system32.
    Теперь все файлы расположены должным образом. После этого нужно указать серверу Apache, где находится PHP.
  • Найдите на компьютере файл httpd.conf и откройте его в текстовом редакторе.
    В моем случае он расположен по адресу C:\Program Files\Apache Group\Apache2\conf\httpd.conf.
    Этот файл играет ту же роль, что и файл php.ini для PHP: он позволяет конфигурировать Apache. При настройке большинства программ для Windows используются диалоговые окна, но в открытых программных проектах, работающих на основе Unix, пользователи обычно взаимодействуют с приложениями через текстовый файл.

    Установка PHP для Windows
    увеличить изображение

  • С помощью функции поиска или используя прокрутку найдите в файле ряд строк, начинающихся с надписи LoadModule или #LoadModule.

    LoadModule позволяет активировать на сервере Apache различные расширения (в том числе, и PHP).

    Знак #, содержащийся в начале некоторых строк, служит для создания комментариев. Любые строки, перед которыми стоит знак #, будут проигнорированы интерпретатором (см. рис. вверху следующей страницы).

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

    LoadModule php4_module c:/php-4.3.2-Win32/sapi/php4apache2.dll

    Установка PHP для Windows
    увеличить изображение

    К концу этого шага (вне зависимости от того, была ли в файле изначально строка LoadModule для PHP) в разделе LoadModule должна содержаться строка, приведенная выше, точно в таком же виде, за исключением номера версии, который мог измениться.

  • Сохраните и закройте файл httpd.conf.

    Чтобы изменения вступили в силу, следует перезапустить Apache.

  • Откройте диспетчер Apache, дважды щелкнув на соответствующем значке, расположенном на панели задач. Нажмите кнопку для перезапуска Restart.

    При перезапуске сервера в диалоговом окне появится сообщение, подтверждающее перезапуск. Помимо этого, в левом нижнем углу диспетчера должна появиться надпись вида "Apache/2.0.46 (Win32) PHP/4.3.2". Эта информация подтверждает, что PHP успешно загружен (см. рис. вверху следующей страницы).

  • Закройте диспетчер Apache и перейдите к разделу "Регистрация динамичного сайта в Dreamweaver".

    Локальная система настроена для запуска PHP на сервере Apache.

    Установка PHP для Windows



  • СодержаниеНазадВперед

    Выбор серверной модели

    Итак, существует несколько распространенных серверных языков. Это знание порождает логичный вопрос, естественный для тех, кто только начинает заниматься разработкой динамичных сайтов, а именно: "Какую серверную модель следует использовать?". В приведенном ниже списке описаны основные функции, а также "плюсы" и "минусы" каждой технологии.
  • Aсtive Server Pages (ASP). ASP – это технология, разработанная Microsoft для создания динамичных веб-сайтов. Технология соединяет IIS- и PWS-серверы (соответственно Internet Information Services для Windows 2000 and XP и Personal Web Server для Windows 98) с языком VBScript (Visual Basic Script). Второй язык, используемый в ASP, – JScript –представляет собой реализацию корпорацией Microsoft языка JavaScript. Технология ASP бесплатна и встроена в IIS- и PWS-серверы. Это означает, что каждый пользователь Windows, разобравшись в настройках, имеет возможность бесплатно разрабатывать сайты на основе технологии ASP. Правда, для тех, у кого нет опыта в программировании, язык VBScript может показаться довольно сложным. В настоящее время ASP постепенно вытесняется более разрекламированной технологией ASP.NET (см. ниже).
  • ColdFusion. ColdFusion – это серверная технология, разработанная компанией Macromedia. Ее синтаксис, основанный на тегах, гораздо проще, чем синтаксис VBScript, а код значительно более компактный. Большинство разработчиков считают ее самой подходящей из всех серверных моделей. Объективно говоря, ColdFusion представляет собой мощный язык, намного ускоряющий разработку динамичных сайтов. С выходом Macromedia ColdFusion MX 6.1 заметно увеличилось быстродействие, которое оставляло желать лучшего в прежних версиях. Недостаток технологии ColdFusion заключается в том, что ее использование является платным, хотя стоимость окупается повышением производительности. Установка и настройка ColdFusion осуществляются невероятно просто.
  • PHP Hypertext Processor (PHP). Технология, в названии которой используется рекурсивный акроним PHP, довольно быстро развивается по ряду причин. Это проект с открытым исходным кодом, а, кроме того, он является бесплатным и хорошо сочетается с другими замечательными свободно распространяемыми продуктами, такими как веб-сервер Apache и система управления базами данных MySQL. Код четвертой версии PHP 4, используемой в этой книге, по сложности сравним с ASP, хоть и несколько проще. В появившейся недавно пятой версии языка, в большей степени, задействован объектно-ориентированный подход и, как следствие, он намного сложнее для начинающих (хотя значительно удобнее и эффективнее для опытных программистов). Один, общий для всех программных продуктов с открытым исходным кодом, недостаток заключается в том, что установка и настройка связки PHP-Apache-MySQL может оказаться непростым делом.
  • ASP.NET. ASP.NET является частью платформы .NET и отвечает за создание веб-приложений. Это новая мощная технология для реализации быстродействующих и эффективных веб-разработок. Как и предшествующая технология ASP, ASP.NET запускается на любом сервере Microsoft IIS, если на нем установлены бесплатные расширения .NET. Но с учетом принципов своей работы и архитектуры ASP.NET отличается от ASP, ColdFusion и PHP. Вне зависимости от уровня профессионализма и опыта разработчика (даже если он работал с ASP) для эффективной работы с ASP.NET требуется определенная подготовка. ASP.NET поддерживает многочисленные языки программирования, но самыми популярными являются VisualBasic.NET и C#.
  • Java Servlet Pages (JSP). Технология разработки динамичных веб-сайтов JSP основана на языке Java. Для интерпретации кода требуется Java-сервер (такой, например, как J2EE). Технология JSP отличается впечатляющей скоростью откликов на запросы и невероятной эффективнойстью. Пожалуй, до появления .NET она была самой мощной технологией, да и сейчас вполне может "померяться силами" с .NET. Но, опять же, код JSP очень сложен для тех, кто только приступает к разработке динамичных веб-сайтов.


  • В книге рассматривается классическая технология ASP (в дальнейшем просто ASP), ColdFusion и PHP. Но книга не посвящена именно ASP, ColdFusion и PHP. Она задумана как введение в принципы и практику разработки динамичных веб-сайтов, управляемых базами данных, при помощи Dreamweaver MX 2004 компании Macromedia. В ней приводится большое количество кода, описываются принципы кодирования, а также принципы работы с вложенными в Dreamweaver моделями поведения сервера, позволяющими ускорить и упростить процесс разработки. Книга учит объединять несколько технологий для создания динамической страницы, а также планировать и создавать сайты, эффективно использующие возможности технологий. После ее прочтения вы вряд ли станете экспертом в ASP, ColdFusion или PHP, но, взяв в руки книгу по любой из этих технологий и ориентированную на практическую запись кода, в том числе, предназначенную для опытных пользователей, вы будете в состоянии в достаточной степени, понять ее, чтобы двинуться дальше – по пути разработки сложных веб-проектов.

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

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

    Протокол HTTP

    Отправка данных при помощи гиперссылок

    Несмотря на то, что открытое отображение данных становится проблемой при работе с конфиденциальной информацией, строки кода имеют ряд преимуществ. Одно из них заключается в возможности вставлять данные в гиперссылки. Это позволяет получать информацию, не требуя от пользователей заполнения формы. В этом упражнении будет создано простое приложение, на примере которого демонстрируется действие некоторых ключевых принципов разработки динамичных сайтов.
    Приложение будет состоять из двух страниц, на которых пользователь должен указать, какие черты присутствуют в его характере: кошки или собаки (cat person и dog person). Первая страница содержит две ссылки – для просмотра сведений об особенностях поведения кошек и собак. Специфика этих ссылок состоит в том, что обе направляют пользователя к одной странице. Различаются они прикрепленными строками запроса, каждая из которых соответствует выбранному животному. На второй странице выводится динамический текст, соответствующий выбранной ссылке. Если сначала выбрать одно животное, а затем вернуться и выбрать другое, откроются две разные страницы, хотя, на самом деле, это будет один и тот же файл, при обработке которого использовались разные текстовые значения.
    Для оценки важности этого принципа достаточно представить крупный интернет-магазин, например, Amazon.com. Вместо отдельной страницы для каждой книги, которая есть в продаже, применяется один шаблон страницы с информацией о товаре, который динамически наполняется данными, когда пользователь выбирает ту или иную книгу. Другими словами, динамические веб-страницы позволяют разработчикам значительно сократить количество страниц, которые необходимо создавать и поддерживать, и, в то же время, увеличить количество отображаемых сведений.
    Так что рекомендуется на некоторое время забыть о малой пригодности создаваемого приложения в практических целях, поскольку основой для его разработки является освоение базовых принципов по поддержке сайта, которые будут реализованы позже на сайте Newland Tours.
  • В меню File (Файл) выполните команду New (Создать) и создайте новую страницу (ASP/VBScript, ColdFusion или PHP). Убедитесь, что установлен флажок Make document XHTML compliant (Сделать документ, совместимым с XHTML).

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

    Отправка данных при помощи гиперссылок

  • В режиме Design (Дизайн) введите текст, показанный на приведенном рисунке. Отформатируйте первую строку как заголовок первого уровня

    , а остальные две строки – как абзацы .

    На этом шаге производится разметка статической части приложения.

    Отправка данных при помощи гиперссылок
    увеличить изображение

  • Сохраните файл как animal_questions.asp. Затем в меню File (Файл) выполните команду Save as (Сохранить как) и сохраните страницу снова, на этот раз, как animal_home_page.asp.

    После этого сохраняется первая страница, а на основе нее создается вторая.

  • В документе animal_home_page.asp. замените заголовок следующим текстом: "The Person Home Page". Вторую строку замените текстом "You are a person", а третью просто удалите.

    Снова создана статическая часть страницы. В текущем виде страница бессмысленна. Чтобы сделать ее более содержательной, следует написать сценарий, который вставляет в каждый абзац перед словом "person" слово "Cat" или "Dog".

    Отправка данных при помощи гиперссылок

  • Откройте файл animal_questions.asp. Дважды щелкните на слове "Cat" во второй строке, чтобы выделить его. В поле Link (Связать с) на панели Property Inspector (Инспектор свойств) введите следующее: "animal_home_page.asp?mypet=Cat".

    Строка запроса добавляется к URL-адресу вручную. При щелчке на этой ссылке на сервер будут отправлены как URL-адрес, так и строка запроса, после чего ее содержимое станет доступно на странице animal_home_page.asp.

    Отправка данных при помощи гиперссылок
    увеличить изображение

  • Повторите предыдущий шаг, чтобы привязать ссылку с соответствующей строкой запроса к слову "Dog". Сохраните файл и загрузите его на сервер (кнопка Put File(s) (Поместить файл [-ы]) на панели Site [Сайт]).

    Теперь создание страницы завершено.

  • Снова перейдите к документу animal_home_page.asp. На панели Bindings (Привязки) добавьте переменную типа QueryString или URL, названную mypet.

    Отправка данных при помощи гиперссылок

    Эта переменная была указана в ссылках на предыдущей странице с двумя разными значениями – Cat и Dog. На панели Bindings (Привязки) указывается переменная и ее тип, что в дальнейшем позволит извлечь ее значение.

  • Поместите курсор перед словом "Person" в первой строке. На панели Bindings (привязки) выберите переменную mypet и щелкните на кнопке Insert (Вставить). Добавьте еще один экземпляр переменной перед словом "Person" во второй строке. Сохраните страницу и загрузите ее на сервер.


    Приложение готово.

    Отправка данных при помощи гиперссылок
    увеличить изображение

  • На панели Site (Сайт) выберите файл animal_questions.asp и нажмите клавишу (F12), чтобы протестировать работу приложения.

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



  • Отправка данных при помощи гиперссылок

    Итак, страница animal_home_page.asp – это шаблон для любого содержимого. Если добавить на страницу animal_questions.asp ссылки для просмотра игуан, тропических рыб и питонов, на странице animal_home_page.asp без малейших изменений в коде отобразятся и эти экзотические животные. В этом и заключается основная мощь динамических веб-страниц: чтобы отображать, добавлять и изменять любое количество содержимого, не требуется вносить изменения в отдельные XHTML-страницы. Достаточно изменить содержимое в исходном файле, и оно отобразится на итоговой XHTML-странице.

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

    Получение данных из URL-адреса

    В конце предыдущего урока пользователи заполняли форму с небольшим числом полей и переходили на страницу, где отображалось введенное значение. Из предыдущего раздела известно, что значение формы было направлено в файл test_form_processor.asp в теле запроса. Существуют и другие способы перемещения данных между страницами, например, в составе URL-адресов, файлов cookie и (в зависимости от выбранной серверной модели) переменных сеансов связи и приложений. В дальнейшем в книге будет рассказано о каждом из этих способов, а сейчас достаточно просто знать о том, что их много.
    Возникает логичный вопрос о том, для чего существует так много способов, и как понять, какой из них использовать в той или иной ситуации? Дело в том, что каждый способ имеет свои возможности и ограничения.
    Например, в переменной формы из урока 4, отправленной в теле запроса, данные перемещались со страницы ввода на страницу, которая их обрабатывала и отображала. Такой подход ограничен тем, что после завершения обмена данными сервер забывает и переменную firstName, и ее значение. Если пользователь перейдет на другую страницу, сервер не сможет повторно выдать значение переменной firstName, а, следовательно, оно не сможет использоваться в коде страницы. При создании опросника или многостраничной формы с бланком заказа в интернет-магазине ограничения в использовании переменных формы становятся особенно заметны.
    В этом задании данные перемещаются из формы на страницу test_form_processor.asp другим способом – при помощи строки запроса. Строка запроса – это список переменных, который добавляется в конец URL-адреса. В сети часто встречаются длинные адреса, которые по виду содержат больше информации, чем просто адрес страницы. Эта информация и является строкой запроса. В этом упражнении будет продемонстрировано, как изменить форму, созданную в уроке 4 таким образом, чтобы она отправляла информацию не при помощи переменной, а при помощи строки запроса.
  • Откройте файл test_form.asp.
    В данный момент форма имеет малое число полей для ввода данных.
  • Поместите курсор справа от текстового поля и нажмите (Enter)/(Return). Введите Last Name и добавьте второе текстовое поле. На панели Property Inspector (Инспектор свойств) присвойте новому полю имя lastName. Поместите курсор справа от текстового поля lastName (Фамилия) и снова нажмите (Enter)/(Return), чтобы переместить кнопку для регистрации Submit в следующую строку.

    На этом шаге в форму добавляется и форматируется второе текстовое поле. В форму разрешается вставлять любые элементы и форматировать их, если это не нарушает правил XHTML.

  • В селекторе тегов щелкните на теге , чтобы выделить всю форму и открыть на панели инспектора свойств соответствующие настройки.

    Чтобы изменить параметры какого-либо элемента, рекомендуется выделить его в селекторе тегов (особенно, если в элемент вложено несколько других, как, например, в теге ).

  • В поле со списком Method (Метод) на панели Property Inspector (Инспектор свойств) выберите пункт GET.

    По умолчанию установлено значение POST, указанное в предыдущем уроке. При изменении POST на GET меняется способ отправки данных в файл test_form_processor.asp. При использовании метода POST данные пересылаются в теле запроса, как описывалось выше. Но при употреблении метода GET данные пересылаются в составе строки запроса, а, значит, переменные firstName, lastName и их значения, прикрепленные к URL-адресу, становятся видимыми.

    Получение данных из URL-адреса
    увеличить изображение

  • Сохраните и закройте файл test_form.asp.. Откройте test_form_ processor.asp.

    Следует внести на страницу test_form_processor.asp изменения, поскольку динамический текст на этой странице ищет значение переменной формы firstName. Поскольку метод POST был изменен на GET, значение firstName будет недоступно в виде переменной формы, оно будет доступно только в составе строки запроса. Это означает, что следует снова открыть панель Bindings (Привязки) и прикрепить новую переменную.

  • На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+"). При использовании ASP выберите Request Variable (Переменная запроса) и в диалоговом окне укажите тип Request.Querystring, после чего введите имя "firstName". В случае применения ColdFusion или PHP выберите тип URL variable (Переменная URL) и введите имя firstName. Нажмите OK.

    Оба варианта — Querystring и URL variable (строка запроса и переменная URL-адреса) – означают переменную, прикрепленную к URL-адресу. Существует несколько небольших различий в обработке этих типов переменных различными серверными моделями, но в книге подразумевается, что оба типа различаются только названием.

    Результаты изменений отразятся на панели Bindings (Привязки). Ниже приведен пример панели для ASP. Пользователи ColdFusion и PHP увидят две категории переменных: Form (с вложенной переменной firstName) и URL (с вложенной переменной firstName).

    Получение данных из URL-адреса




  • Результаты изменений отразятся на панели Bindings (Привязки). Ниже приведен пример панели для ASP. Пользователи ColdFusion и PHP увидят две категории переменных: Form (с вложенной переменной firstName) и URL (с вложенной переменной firstName).

    Получение данных из URL-адреса

  • Повторите шаг 6, чтобы прикрепить переменную lastName того же типа.

    Внесенные изменения снова отобразятся на панели Bindings (Привязки). Теперь в списке будут содержаться три переменные: два варианта firstName и один вариант lastName.

    Получение данных из URL-адреса

    Может показаться странным, что одна и та же переменная firstName присутствует в двух экземплярах. Но, в понимании ASP, ColdFusion и PHP, эти две переменные являются абсолютно разными. Одна из них – это переменная формы, которая доступна только из тела HTTP-запроса. Другая – переменная строки запроса, которая доступна только из самого URL-адреса. Принцип, согласно которому доступ к переменным ограничен определенным пространством, называется областью видимости переменной (variable scope) . К области видимости относятся как те места, в которых переменная существует, так и те, в которых она не определена. Переменная lastName существует только в виде строки запроса в рамках URL-адреса. В теле запроса ASP, ColdFusion или PHP найти ее не смогут, поскольку тело HTTP-запроса содержится за рамками строки запроса.

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

    При изменении метода отправки данных формы с POST на GET, меняется и область видимости переменной firstName. При изменении типа переменной на панели Bindings (Привязки), код, который выполняется на стороне сервера, получает доступ к соответствующей области видимости. Кроме переменных формы и строк запроса существуют и другие типы переменных со своими областями видимости (это заметно при работе с панелью Bindings), но все они подчиняются одному принципу.


  • Выделите динамический текст {Form.firstName}, окрашенный синим цветом, и нажмите клавишу (Del), чтобы удалить его. Поместите курсор перед второй запятой, а на панели Bindings (Привязки) щелкните на строке запроса QueryString.firstName (ASP) или выполните команды URL\ firstName (ColdFusion и PHP) и нажмите Insert (Вставить).

    После этого на странице появится новый динамический текст, выделенный синим цветом: {QueryString.firstName} (ASP) или {URL.firstName} (ColdFusion и PHP).

    Получение данных из URL-адреса
    увеличить изображение

    Псевдокод динамического текста Dreamweaver имеет определенную структуру и смысл. Фигурные скобки ограничивают блок динамического текста, а внутри них указывается область видимости, после которой следует точка и имя переменной. Это позволяет быстро увидеть область видимости и имя переменной.

    Реальный код, внедренный в HTML, выглядит следующим образом:

    <%= Request.QueryString("firstName") %> – (ASP) #URL.firstName# – (ColdFusion) – (PHP). Примечание. В ColdFusion знаки # применяются для обозначения переменных, которые перед выводом на страницу требуется обработать. Если в строке кода, приведенной в предыдущем абзаце, опустить знаки #, на странице отобразится следующий текст: "Thank you, URL.firstName, for filling out my form". При наличии знаков # ColdFusion вычисляет значение помещенной между ними переменной. В данном случае на страницу будет выведено любое значение переменной firstName, содержащейся в URL-адресе.
  • Поместите курсор после блока firstName и прикрепите на страницу переменную QueryString.lastName или URL.lastName.

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

    Примечание. Если имя и фамилия пользователя сливаются (обычно это случается в ASP), следует добавить между ними неразрывный пробел ( ).

    Получение данных из URL-адреса
    увеличить изображение

  • Сохраните файл test_form_processor.asp. На панели Site (Сайт), удерживая в нажатом состоянии клавишу (Shift), выделите файлы test_form.asp и test_form_processor.asp, а затем нажмите кнопку Put File(s) (Поместить файл [-ы]).


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

  • На панели Site (Сайт) щелкните на файле test_form.asp и нажмите клавишу (F12), чтобы протестировать его в браузере. Введите в поля имя и фамилию, а затем нажмите кнопку Submit.

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

    Получение данных из URL-адреса
    увеличить изображение

    Наибольший интерес здесь представляет URL-адрес. После адреса самой страницы идет знак вопроса и три переменных с указанными значениями:

    http://localhost/newland/test_form_processor.asp?firstName= =Yuki&lastName= Makimura&Submit=Submit

    Три прикрепленные переменные являются строкой запроса. Выводимые на страницу имя и фамилия извлекаются непосредственно из URL-адреса. Синтаксис адреса не зависит от серверной модели, поскольку строки запроса относятся не к ней, а непосредственно к HTTP-протоколу.

    Поскольку метод POST скрывает данные от пользователя, он, как правило, применяется для пересылки данных формы, которые затем помещаются в базу данных. Если после ввода в поля формы имени пользователя и пароля они отображаются в адресной строке браузера, где каждый может их увидеть, то, очевидно, это сделает систему безопасности более уязвимой для атак злоумышленников. Помимо этого, метод POST позволяет пересылать значительно больше данных, чем в составе строки URL-адреса при использовании метода GET. Тем не менее, в данном упражнении строки запроса имеют некоторые преимущества перед переменными формы.

  • Закройте браузер. На панели Site (Сайт) щелкните на файле test_form_processor.asp и нажмите (F12).>

    Получение данных из URL-адреса
    увеличить изображение



  • На этот раз при тестировании страницы на ней отсутствуют данные, которые нужны ASP, ColdFusion и PHP для обработки кода, поскольку после закрытия браузера данные были стерты из памяти. Интересно, что ASP и PHP решают эту проблему иначе, чем ColdFusion. ASP и PHP выводят надпись: "Thank you, , for filling out my form" ("[Имя пользователя], мы признательны Вам за заполнение"). ColdFusion отказывается отображать страницу и выдает сообщение об ошибке: "The page cannot be displayed" ("Страница не может быть отображена").

    При разработке динамических сайтов необходимо исключать ситуации, в которых пользователь открывает страницу, а необходимые для ее обработки данные не отправлены на сервер. В этом случае обычно выдается сообщение об ошибке, которое сбивает посетителей с толку. Решение проблемы состоит из двух частей. Во-первых, если на сервере недостаточно данных для обработки страницы, не следует давать посетителю доступ на нее. Если по какой-то причине доступ получен, нужно перехватить сообщение об ошибке и перенаправить посетителя на специальную страницу, с которой можно сообщить администратору о возникшей проблеме. Такой вариант более удобен, чем автоматические сообщения об ошибке, выдаваемые ASP, ColdFusion или PHP. В книге используется несколько способов для проверки наличия нужных данных на сервере при загрузке страницы.

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

    Протокол HTTP

    Страницы перемещаются в сети по протоколу HTTP. Этот протокол определяет, как пользователи (или системы) посылают запросы на серверы, расположенные по всей сети, и как серверы отвечают на эти запросы. Понимание основ этого протокола облегчает понимание принципов работы динамических страниц.
    По сути, протокол HTTP – это система обмена сообщениями. Клиент посылает запрос на сервер, а сервер возвращает ответ. В состав запроса входит URL-адрес (Uniform Resource Locator – унифицированный указатель ресурса). При щелчке на ссылке в браузере на сервер отправляется запрос, содержащий адрес нужного файла.
    Многие не знают, что помимо адреса компьютер-клиент отправляет серверу и другую информацию – о своих настройках. Сюда входят информация о браузере (в терминологии протокола: об агенте пользователя (user agent), имя пользователя, IP-адрес, форматы файлов, которые принимает клиент (например, GIF иJPEG ) и несколько источников данных. Запрос состоит из заголовка и тела. Большая часть перечисленной информации содержится в заголовке. Причина, по которой не все об этом знают, заключается в том, что заголовок запроса виден только компьютеру.
    Получив запрос, сервер, по возможности, отвечает на него. Если в запрошенном документе содержится код, выполняемый на стороне сервера (например, код VBScript для ASP, языка разметки ColdFusion Markup Language или PHP), сервер обрабатывает его. Затем он удаляет обработанный код, а полученные результаты и код XHTML объединяет в документ, который отправляет клиенту в теле ответа. Ответ, как и запрос, содержит заголовок, в который помещается информация, предназначенная для системы клиента (размер и тип документа, дата и время отправки ответа и т.д.). Из всего этого пользователь видит только URL-адрес и итоговую XHTML-страницу.
    На приведенной ниже схеме отображается процесс передачи данных по протоколу HTTP. Прямоугольники со сплошной границей включают видимые для пользователей документы, а прямоугольники с границами из пунктирных линий содержат скрытую информацию.
    В конце предыдущего урока данные, введенные пользователем в форму, были переданы в файл test_form_processor.asp именно при формировании ответа сервером. Переменная firstName и ее значение были переданы в теле запроса после щелчка на кнопке регистрации Submit. Другими словами, наличие скрытых участков в запросах и ответах делают возможным обмен данными между клиентом и сервером, вследствие чего данные становятся доступными расположенным на сервере сценариям ASP, ColdFusion или PHP. Помимо этого, при отправке данных клиенту сервер может добавить в сообщение указание сохранить их в файле cookie.
    Прежде чем использовать полученные знания о HTTP при разработке динамических сайтов, следует упомянуть еще одну важную особенность протокола, о которой нужно знать, – отправив ответ клиенту, сервер не сохраняет информацию о совершенной операции обмена данными. Другими словами, если клиент отправит второй запрос серверу, сервер не будет знать о том, что этот клиент отправлял запрос несколько секунд назад. По этой причине HTTP называют протоколом без состояний (stateless protocol).
    Неспособность HTTP учитывать историю предыдущих запросов приводит к возникновению проблем при разработке веб-приложений. Если сервер не распознает клиента при загрузке новой страницы, то каким образом можно совершить покупку в интернет-магазине, когда требуется пройти череду из нескольких экранов? Как в опросе из нескольких этапов добавить информацию, указанную на разных страницах, в одну и ту же базу данных? Тем не менее, решение проблемы существует, иначе как объяснить бесчисленное количество интернет-магазинов и проводимых опросов.
    Невозможно разрабатывать динамичные сайты, не понимая принципов обмена данными между сервером и клиентом и неспособности протокола HTTP регистрировать проведенную операцию обмена. Разница между переменными запроса и переменными формы, методами POST и GET, установкой и считыванием файлов cookie становится значительно понятнее, если связать все это с протоколом HTTP.

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

    Установка и считывание файлов cookie

    В предыдущих упражнениях показаны способы работы с данными, которые вводятся посетителями (получение, отправка на другую страницу и дальнейшая обработка) при помощи форм и обычных ссылок. Несмотря на различия, переменные формы и строки запроса имеют важное сходство, – после отправки данных от одной страницы к другой они удаляются из памяти протокола HTTP.
    Нередко при создании веб-приложений требуется, чтобы определенные данные сохранялись и после операции обмена. Формы и строки запросов не дают такой возможности, тем не менее, существуют типы переменных, которые после операции обмена остаются в памяти. В обход ограничений, накладываемых протоколом HTTP, значения переменных сохраняются на жестком диске пользователя или на сервере, и после этого могут считываться оттуда, когда в них возникает необходимость.
    Один из таких типов переменной является файл cookie. Это небольшой текстовый файл, сохраненный на жестком диске посетителя. Значения, хранящиеся в этом файле, могут считываться любым количеством страниц. Таким образом, файлы cookie позволяют поддерживать работоспособного состояния страницы, тем самым, избегая главного недостатка "протокола без состояний" HTTP.
    Примечание. Многие пользователи озабочены вопросами безопасности использования файлов cookie. В большинстве случаев эта тревога безосновательна, поскольку заразить компьютер вирусом через текстовые файлы невозможно, к тому же, прочитать файл cookie можно только на веб-узле, с которого он был установлен. Однако файлы cookie остаются на жестком диске вне зависимости от того, кто именно помещает их на сайт. Таким образом, если на одном компьютере работает несколько человек, хранение данных кредитной карты в файле cookie становится опасным. Поэтому разработчикам не следует помещать в файл cookie никаких важных сведений (например, номер и пин-код кредитной карты), либо на сайте, как минимум, должна быть возможность выбора: сохранять информацию или нет.
    В этом упражнении показано, как устанавливать и считывать файлы cookie. Здесь снова используется приложение формы, но на этот раз, когда введенные данные подтверждены и посетитель перенаправляется на страницу test_form_processor.asp, а имя и фамилия сохраняются в файле cookie на его жестком диске. Затем будет создана третья страница, запрашивающая эти значения (без использования переменных форм или строк запроса), на примере которой показано, что переменные firstName и lastName действительно могут сохраняться и после операции обмена данными по протоколу HTTP.
  • Откройте файл test_form_processor.asp.

    Эта страница получает значения переменных firstName и lastName в строке запроса, после чего эти значения выводятся на страницу в составе предложения: "Thank you, {QueryString.firstName} {QueryString,lastName}, for filling out my form."

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

  • В режиме Code (Код), при использовании ASP или ColdFusion, следует поместить курсор в конец строки кода, предшествующей открывающему тегу (строка 2 в ASP и 1 в ColdFusion). Пользователям PHP необходимо поместить курсор в самое начало документа. Трижды нажмите (Enter)/(Return), чтобы добавить больше свободного места.

    Установка и считывание файлов cookie
    увеличить изображение

    Для кода потребуется свободное пространство, которое будет добавлено на следующем шаге. Интересно, что код добавляется вне документа перед элементом . Серверный код часто помещается за пределы HTML-документа, что облегчает его поиск и редактирование. Важно помнить, что при пересылке итоговой страницы от сервера клиенту серверный код удаляется, так что посетители его не увидят.

    Примечание. В PHP при попытке отправить содержимое обратно браузеру в составе заголовка (и установка файлов cookie является примером этого) вы должны добавить этот сценарий перед первой строкой XHTML-кода или отобразится ошибка с сообщением "cannot add header information" ("невозможно добавить информацию о заголовке"). Для решения этой проблемы следует просто поместить такое содержимое в самое начало файла.
  • Введите участок кода, соответствующий выбранной серверной модели.

    Для ASP:

    <% Response.Cookies("firstName") = Request.QueryString("firstName") Response.Cookies("firstName").Expires = Date+30 Response.Cookies("lastName") = Request.QueryString("lastName") Response.Cookies("lastName").Expires = Date+30 %>

    Для ColdFusion:




    Для PHP:



    Установка и считывание файлов cookie
    увеличить изображение

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

    Хотя синтаксис кода ASP, ColdFusion и PHP явно отличается, все три участка работают одинаково. Они создают две новые переменные firstName и lastName для файла cookie. Снова переменные, относящиеся к разным типам, названы одним и тем же именем (QueryString.firstName и Cookies.firstName и такая же пара для переменной lastName), но разные области видимости предотвращают конфликтные ситуации. В коде задан срок действия переменной (30 дней – для ASP, неограниченно – для ColdFusion и один день – для PHP). Наконец, во всех трех участках в качестве значений новых переменных файла cookie указываются текущие значения переменных строки запроса QueryString.firstName и QueryString.lastName.

    Другими словами, значения новых переменных файла cookie задаются динамически. Это позволяет не только присвоить переменным жесткие статические значения, например, Cat или Dog, но и создавать переменные, в которых будет храниться содержимое, полученное из других переменных. В данном случае переменным динамически присваивается содержимое переменных строки запроса.




  • Теперь создание динамических страниц должно стать привычным делом.

  • В режиме Design (Дизайн) введите приветствие "Hi, !".

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

    Примечание. Поскольку текст формируется из нескольких источников (статический XHTML и динамические данные), следует тщательно провести грамматический и синтаксический анализ, так как при выводе текста на страницу он не должен быть фрагментарным.
  • На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+"). При использовании ASP следует выбрать тип Request Variable (Переменная запроса), а затем указать тип Request. Cookies и имя firstName. В случае применения ColdFusion или PHP следует просто выбрать Cookie Variable (Переменная cookie) и ввести имя firstName.

    Прикрепление переменной файла cookie подобно прикреплению переменных формы или строки запроса.

  • Повторите шаг 7, чтобы добавить на панель Bindings (Привязки) переменную lastName.

    На панели Bindings отобразятся добавленные переменные.

    В случае применения ASP на панели Bindings (Привязки) отображаются только те переменные, которые определены на данной странице, а при использовании ColdFusion или PHP – переменные со всего сайта. Таким образом, в данном случае пользователи ASP видят на панели Bindings только две переменные, а пользователи ColdFusion и PHP — все переменные сайта.

    Установка и считывание файлов cookie

  • Поместите курсор перед восклицательным знаком. На панели Bindings (Привязки) выделите переменную Cookies.firstName (ASP) или выполните команды Cookie\firstName (ColdFusion и PHP), после чего нажмите Insert (Вставить). Таким же образом добавьте переменную lastName.

    К этому моменту процедура должна быть знакомой.

    Установка и считывание файлов cookie
    увеличить изображение

  • Сохраните страницу и загрузите ее на сервер. На панели Site (Сайт) выберите файл test_form.asp и нажмите клавишу (F12), чтобы протестировать его. Заполните форму, нажмите кнопку Submit, а затем щелкните на ссылке Check cookie (Проверить cookie).


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

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

    Установка и считывание файлов cookie

    Примечание. Поскольку протокол HTTP имеет ограничения в операциях по обмену данными, сервер не имеет прямого доступа к жесткому диску, – так что переменные файлов cookie попадают с жесткого диска на сервер через запрос. Однако исходное значение хранится на жестком диске.
  • Закройте браузер. На панели Site (Сайт) выберите файл test_form_ processor_cookies.asp и нажмите клавишу (F12).

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



  • СодержаниеНазадВперед

    Почтовый сервис SMTP

    Написание кода для отправки сообщения

    В этом упражнении будет создана страница, которая отправляет сообщение по указанному электронному адресу. Сначала содержимое сообщения будет жестко заданным. То есть при отправке 20 сообщений все они будут иметь одни и те же тему и текст. После проверки работы страницы будет создана форма для отправки сообщения, а строго заданные значения будут заменены на динамические переменные формы.
  • Откройте файл generic_template.asp, в меню File (Файл) выполните команду Save As (Сохранить как) и присвойте новому файлу имя messageSent.asp.
    Этот файл сгенерирует и отправит электронное сообщение, после чего сообщит пользователю, что сообщение отправлено.
  • Вместо заменителя заголовка введите текст Message Sent. Вместо заменителя обычного текста введите надпись "Your message has been sent. You should hear from us within two business days" ("Ваше сообщение отправлено. Ждите ответное письмо в течение двух дней"). После этого добавьте новый абзац с текстом "Return to Newland Home" ("Возврат на главную страницу Newland Tour") и присоедините к слову "Home" ссылку на страницу index.asp.
    Затраты времени на создание шаблона уже начинают окупаться. Благодаря шаблону, разработка и настройка новой страницы занимает несколько секунд.

  • Написание кода для отправки сообщения
    увеличить изображение

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

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

    Настройка ColdFusion для отправки электронной почты

    Этот раздел следует прочесть при локальном использовании ColdFusion. Настройка службы исходящих сообщений SMTP для ColdFusion легко производится при помощи приложения администрирования ColdFusion.
  • В меню Start (Пуск) выполните команды Programs\Macromedia\ Macromedia ColdFusion MX\Administrator (Программы\Macromedia\ Macromedia ColdFusion MX\Администратор).
    Указанный путь может и отличаться в зависимости от настроек операционной системы.
    На открывшейся странице требуется указать имя пользователя и пароль. После этого откроется приложение администрирования сервера ColdFusion. Оно применяется для настройки ColdFusion, а позже здесь будет создан источник данных, который позволит загружать на страницы сайта Newland Tours записи из базы данных.
    Настройка ColdFusion для отправки электронной почты
    увеличить изображение

  • На панели навигации в левой части страницы щелкните на ссылке Mail (Почта), относящейся к категории Server Settings (Настройки сервера).
    Откроется страница с несколькими настройками почтового сервера. Следует оставить их без изменений, за исключением адреса сервера исходящей почты (это может быть как обычный, так и IP-адрес). Адрес вводится в поле Mail Server (Почтовый сервер), и для удобства в качестве образца здесь указан пример адреса.
    Настройка ColdFusion для отправки электронной почты
    увеличить изображение

  • В поле Mail Server (Почтовый сервер) введите доменное имя или IP-адрес сервера исходящей почты.
    Если адрес сервера исходящей почты точно неизвестен, необходимо проверить данные учетной записи программы для получения почтовых сообщений. Они должны быть одинаковыми.
    В частности, в почтовой программе Outlook Express следует выполнить команды Tools\Accounts (Сервис\Учетные записи) Затем надо выбрать учетную запись, соответствующую нужному электронному адресу и нажать кнопку Properties (Свойства). Далее следует щелкнуть на вкладке Servers (Серверы) и скопировать адрес, расположенный в поле Outgoing mail (SMTP) (Исходящая почта [SMTP]). Меню и команды в других почтовых клиентах могут отличаться, но информация об адресе сервера исходящей почты обязательно присутствует где-то в интерфейсе.
  • Нажмите кнопку Submit вверху и внизу страницы.
    ColdFusion обновит настройки и, пока действует введенный пользователем адрес, сервер будет работать правильно.


  • СодержаниеНазадВперед

    Настройка IIS для отправки почты (разработчикам ASP)

    Этот раздел следует прочесть при использовании ASP на локальном сервере IIS (Windows 2000 или XP). Вполне возможно, что система уже настроена на работу с протоколом SMTP, тем не менее, надо в этом убедиться. Если по какой-то причине служба SMTP не установлена, нужно установить ее, следуя приведенным ниже шагам.
  • В папке Control Panel (Панель управления) (Windows) откройте диалоговое окно Add or Remove Programs (Установка и удаление программ). Щелкните на кнопке Add/Remove Windows Components (Добавление и удаление компонентов) (Windows) (см. рис. вверху следующей страницы).
    При щелчке на кнопке Add/Remove Windows Components (Добавление и удаление компонентов) (Windows) откроется второе диалоговое окно – Windows Components Wizard (Мастер компонентов) (Windows).
    Диалоговое окно Add/Remove Programs (Установка и удаление программ), помимо управления установленными программами, позволяет управлять установкой и настройками Windows. Поскольку IIS является частью Windows 2000 или XP, это диалоговое окно дает возможность добавить недостающие компоненты или удалить уже установленные.
    Настройка IIS для отправки почты (разработчикам ASP)
    увеличить изображение

  • В диалоговом окне Windows Components Wizard (Мастер компонентов Windows) выделите пункт Internet Information Services (IIS) и нажмите кнопку Details (Состав).
    Настройка IIS для отправки почты (разработчикам ASP)

    Откроется диалоговое окно Internet Information Services (IIS). Оно позволяет устанавливать и удалять компоненты IIS, в том числе, службу SMTP.
  • При необходимости прокрутите список вниз и убедитесь, что установлен флажок SMTP Service (Служба SMTP).
    Если флажок установлен, то это означает, что служба исходящей электронной почты SMTP уже установлена.
    Если флажок снят, значит, служба SMTP не установлена. Если установить флажок, тогда Windows инсталлирует и запустит ее.
    Настройка IIS для отправки почты (разработчикам ASP)

  • Нажмите OK, чтобы подтвердить изменения, выполненные в диалоговом окне Internet Information Services (IIS), а затем нажмите Next (Далее), чтобы завершить установку.
    Итак, служба исходящей почты SMTP установлена. Следует перейти к разделу "Написание кода для отправки сообщения".


  • СодержаниеНазадВперед

    Настройка системы для отправки сообщений по протоколу SMTP

    Прежде чем отправлять сообщения посредством веб-приложения, следует убедиться в том, что сервер, на котором работает приложение, способен отправлять электронную почту. Кто-то использует локальную версию IIS для создания ASP-страниц, кто-то — локальную версию ColdFusion, кто-то — локальную версию Apache, а некоторые пользователи подключаются к удаленным серверам, на которых установлены ASP, ColdFusion или Apache/PHP. В зависимости от способа подключения к серверу, в этом задании нужно следовать различным последовательностям шагов, как описано в приведенном ниже списке:
  • разработчикам ASP-приложений, использующим локальный сервер IIS (Windows 2000 или Windows XP), следует прочитать раздел "Настройка IIS для отправки электронной почты (пользователям ASP)";
  • разработчикам, применяющим ColdFusion на локальном компьютере, необходимо ознакомиться с разделом "Настройка ColdFusion для отправки электронной почты";
  • к сожалению, разработчики PHP, использующие локальный сервер Apache, не имеют возможности протестировать созданные страницы, поскольку Apache не поддерживает протокол SMTP. В любом случае, следует выполнять упражнения для этого урока, но отправить сообщения не удастся. Однако если в будущем появится возможность загрузить приложение на удаленный веб-сервер, страницы будут работать надлежащим образом. В этом случае следует прочитать раздел "Написание кода для отправки сообщения";
  • разработчикам ASP, ColdFusion и PHP-приложений, применяющим удаленные серверы (подключенный сетевой диск или FTP-протокол), нужно уточнить у администратора сервера, поддерживается ли на сервере возможность использования SMTP-протокола, а также убедиться, что для каталога сайта на сервере есть разрешение на отправку электронных сообщений по протоколу SMTP. После этого следует перейти к разделу "Написание кода для отправки сообщения".


  • СодержаниеНазадВперед

    Объекты, методы и свойства

    Языки программирования разрабатывались не на пустом месте. Каждый их них предназначался для решения конкретных задач или обеспечения конкретных функций. В частности, язык ActionScript для Flash был создан, чтобы разработчики могли воспользоваться большинством возможностей и особенностей Flash. По этой причине некоторые возможности ActionScript характерны только для Flash и отличают ActionScript от других похожих языков, таких как JavaScript.
    ASP, ColdFusion и PHP имеют одинаковую природу. Эти технологии разрабатывались для того, чтобы обеспечить работу динамичных веб-сайтов в рамках протокола HTTP. Разработчики этих программных продуктов знали, что потребуется выполнение определенных задач, – например, пересылка данных между страницами, подключение к базе данных и генерация электронных сообщений. Для ускоренного выполнения этих задач каждый язык содержит встроенные объекты. Объекты – это обобщенные элементы, предназначенные для более простого решения конкретных задач. Например, объект ASP Message облегчает создание и отправку новых электронных сообщений в рамках ASP.
    Совет. Строго говоря, объект Message относится не только к ASP, а к гораздо большему классу объектов, встроенных в операционные системы Windows 2000 и XP и используемых сервером IIS. В контексте книги это не имеет особого значения и приводится исключительно для полноты изложения.
    Чтобы использовать объект, следует создать его экземпляр (instance). Те, кто работал с диалоговым окном Library (Библиотека) в программах Macromedia Flash, Fireworks или Dreamweaver, знакомы с древовидной структурой построения объектов и их инициализацией. Объект, а, чаще всего, класс, существует чисто умозрительно – в виде некоего абстрактного элемента (в первом случае) или абстрактного типа данных (для класса), – так что класс использовать нельзя. При создании экземпляра генерируется уникальная копия (клон) класса, но при этом он настраивается согласно окружению. Для наглядности можно привести аналогию, в которой в качестве абстрактного класса представлен вид homo sapiens, а в качестве его конкретной реализации (экземпляра) – человек. У всех, кто относится к homo sapiens, есть, как известно, антропометрические данные, – в частности, рост, цвет волос, вес и т.д. Однако у каждого человека эти данные различны.
    Большинство классов имеют встроенные функции. Обычно они делятся на две категории: свойства (properties) и методы (methods). Некоторые объекты содержат дочерние объекты со своими свойствами и методами. Свойства применяются для описания объекта. К примеру, в случае с видом homo sapiens свойствами являются рост, цвет волос, дата рождения, местонахождение, вес и пр. К методам относятся действия, которые объект может выполнять. Так, люди могут ходить, танцевать, петь, спать и т. д., – все эти действия являются методами класса homo sapiens. При создании экземпляра объекта часто требуется определить его свойства. Когда нужно какое-то действие, следует вызвать один или несколько методов объекта.
    Наконец, при создании уникального экземпляра объекта ему обычно присваивается идентификатор (ID) или имя. Это имя позволяет обработчику сценария отслеживать экземпляр, поскольку нередко в одном и том же сценарии или документе могут использоваться несколько экземпляров одного и того же объекта. По той же причине каждый человек имеет свое имя, позволяющее его идентифицировать и упоминать о нем в разговоре.
    Итак, для вызова в сценариях определенных функций применяются встроенные объекты. Для использования объекта следует создать его экземпляр. Для того чтобы дать сценарию возможность идентифицировать экземпляр, нужно присвоить ему уникальное имя. Наконец, для того чтобы использовать экземпляр (и выполнить поставленную задачу), требуется задать его свойства и вызвать методы.
    В приведенных ниже шагах пользователи ASP создадут сценарий, в котором предусмотрено выполнение каждого из этапов. Пользователи ColdFusion и PHP обнаружат, что в этих языках большая часть кода, связанная с наиболее сложными моментами в программировании, скрыта, хотя ее следы все равно заметны.
    Процедура решения назначенной задачи поделена на шаги согласно нескольким этапам использования объектов.
    Примечание. Нумерация шагов продолжается с предыдущего задания "Написание кода для отправки сообщения".
  • В области кода поместите курсор в начало строки 2 (перед открывающим тегом ) и несколько раз нажмите (Enter)/(Return).

    На этом шаге на страницу добавляется место для нового сценария.

  • Только для ASP и ColdFusion. Чтобы создать новый экземпляр почтового объекта и присвоить ему идентификатор, введите следующий код:

    Для ASP:

    <% theSchema=http://schemas.microsoft.com/cdo/configuration/ Set cdoConfig=server.CreateObject("CDO.Configuration") cdoConfis.Fields.Item(theSchema & "sendusing") = 2 cdoConfid.Fields.Item(theSchema & "smtpserver") = "your.SMTP.server.com" cdoConfig.Fields.Update set cdoMessage=Server.CreateObject("CDO.Message") cdoMessage.Configuration=cdoConfig %>

    Для ColdFusion:



    Пользователям ASP следует заменить выделенный код "your.SMTP.server.com" именем или IP-адресом реального SMTP-сервера. Лучше всего, если это будет сервер исходящей почты, указанный в клиенте электронной почты, например, в Outlook Express.

    Код ColdFusion говорит сам за себя. Два приведенных тега служат указанием ColdFusion создать новый почтовый объект. Прежде чем он станет работать, требуется добавить еще немного кода, тем не менее, он хотя бы уже создан. Помимо прочего, ColdFusion автоматически присваивает почтовому объекту уникальный идентификатор. Таким образом, одним простым действием выполняется несколько задач.

    Код ASP несколько сложнее, что неудивительно. В первом разделе кода приводится информация, которая требуется для того, чтобы обработчик кода ASP действительно соединился с почтовым сервером. Во втором разделе, который будет введен на следующем шаге, создается экземпляр объекта Message.

    Объекты, методы и свойства
    увеличить изображение




  • После этого следует добавить еще две строки кода:

    Set cdoMessage=Nothing Set cdoConfig=Nothing

    При использовании ColdFusion в теге нужно добавить следующий код (yourname@yourserver.com следует заменить на действующий электронный адрес):



    После этого между открывающим и закрывающим тегами надо добавить следующий текст:

    This is the message body.

    Для PHP вводится код:



    ASP и ColdFusion требуют указывать, от кого и кому отправлено сообщение, а также тему сообщения и его текст (message body – тело сообщения).

    В ColdFusion используется легкий для чтения синтаксис вида атрибут="значение". Само сообщение располагается между тегами (остальные параметры указываются внутри открывающего тега ). Действие для сообщения, то есть отправка, в ColdFusion определяется автоматически.

    Примечание. В ASP для отправки сообщения вызывается метод Send. Перед этим требуется указать ряд параметров объекта Message, включая электронные адреса отправителя и получателя, а также тему сообщения и его текст. После вызова метода Send объекты cdoConfig и cdoMessage уничтожаются. Это позволяет впоследствии отправить другое сообщение при помощи тех же объектов.

    В итоге сценарий для ASP должен выглядеть таким образом:

    <% theSchema=http://schemas.microsoft.com/cdo/configuration/ Set cdoConfig=server.CreateObject("CDO.Configuration") cdoConfis.Fields.Item(theSchema & "sendusing") = 2 cdoConfid.Fields.Item(theSchema & "smtpserver") = "your.SMTP.server.com" cdoConfig.Fields.Update

    set cdoMessage=Server.CreateObject("CDO.Message") cdoMessage.Configuration=cdoConfig cdoMessage.From=yourname@yourserver.com cdoMessage.To=yourname@yourserver.com cdoMessage.Subject="This is the message subject" cdoMessage.TextBody="This is the message body" cdoMessage.Send


    Set cdoMessage=Nothing Set cdoConfig=Nothing %>

    Объекты, методы и свойства
    увеличить изображение

    Сценарий для ColdFusion должен выглядеть следующим образом:

    This is the message body. >

    Так же, как в ASP и ColdFusion, в PHP необходимо указывать адрес получателя, тему и текст сообщения. Однако адрес отправителя указывать не требуется. Более того, возможность указания адреса отправителя зависит от внешних факторов, основными из которых являются операционная система и почтовый сервер, с которыми взаимодействует сценарий PHP. В книге адрес отправителя указывать не требуется. Более подробная информация об указании отправителя в функции mail() языка PHP расположена по адресу: http://www.php.net/manual/en/function.mail.php.

  • Сохраните файл и загрузите его на удаленный сервер. Щелкните в любом месте документа и нажмите клавишу (F12), чтобы протестировать его.

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

    В случае применения автономного компьютера с IIS придется исправлять ошибки самостоятельно. Здесь исправление проблемы может обернуться еще большими проблемами. Суть в том, что следует понимать код и знать, что он будет действовать на рабочем сервере, и его настройки позволяют отправлять электронную почту. Но прилагать так много усилий, чтобы провести несколько часов в состоянии стресса для поиска ошибок на сервере – не самый эффективный способ обучения разработке динамических веб-приложений. Иногда лучше просто перейти к следующему шагу.

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


    Объекты, методы и свойства

    Если сообщение не получено, значит, произошла одна из возможных ошибок. Вероятнее всего, сервер неправильно настроен на отправку электронных сообщений по протоколу SMTP. Поэтому следует выполнить команды Control Panel\Administrative Tools\Services (Панель управления\Администрирование\Службы) и убедиться, что Simple Mail Transport Protocol помечен состоянием Started (Работает). Другой способ – это воспользоваться командами Control Panel\Administrative Tools\Internet Information Services (Панель управления\Администрирование\ Internet Information Services) (XP) или Internet Service Manager (Windows 2000), а потом выбрать компьютер с сервером и посмотреть свойства Default SMTP Virtual Server (Виртуальный сервер SMTP по умолчанию).

    Если используется ColdFusion, то, скорее всего, не было введено правильное доменное имя или IP-адрес сервера исходящей почты SMTP.

  • Закройте документ messageSent.asp.


  • После того, как механизм отправки сообщения налажен, требуется сделать его полезным, добавив в сообщение осмысленное содержимое. Для этого будет создана форма получения от посетителя данных для сообщения, после чего данные будут переданы почтовому объекту, который, в свою очередь, отправит их (как бы) сотрудникам Newland Tours.

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

    Пересылка динамических значений формы

    Знание действий, описанных в уроках 4 и 5, позволяет завершить упражнение, не следуя тем полезным сведениям, которые приведены в этом разделе. Рекомендую так и сделать, но если возникают проблемы или тупиковые ситуации, лучше подстраховаться и внимательно прочесть представленные здесь материалы. После этого можно перейти к последнему разделу "Проверка правильности заполнения формы".
    Вначале мне хотелось бы отметить всю сложность того, что предстоит сделать. В предыдущих уроках было рассказано о том, как получать и отправлять данные, используя различные способы –файлы cookie, формы, строки запроса и т.д. Говорилось и о том, как отображать динамический текст при помощи функций Response.Write() (ASP), (ColdFusion) и echo (PHP). В этом уроке говорилось об объектах и, частично, о том, как объекты применяются серверной моделью для отправки электронного сообщения по протоколу SMTP. Сами по себе, пересылка данных между страницами и почтовые объекты никак не взаимодействуют.>
    Но в последнем задании урока эти две несопоставимые вещи будут использованы вместе для создания особого механизма, не встроенного в ASP или ColdFusion. Создаваемое приложение является результатом сочетания различных инструментов и технологий (HTML, HTTP-запросов, а также объектов ASP, ColdFusion и PHP, отвечающих за передачу данных по каналу связи). В определенной степени, такой симбиоз является моделью всего процесса разработки динамичных веб-сайтов, – различные объекты и приемы употребляются совместно, чтобы пользователь мог свободно использовать инструменты для передачи информации и общения.
  • Откройте файл messageSent.asp в режиме Code (Код).
    Режим Design (Дизайн) здесь бесполезен, поскольку код, который следует модифицировать, никак не отражается на странице.
  • Найдите электронный адрес отправителя в коде сообщения и замените его соответствующей переменной формы, как показано ниже.
    При использовании ASP следует заменить электронный адрес на следующий код: Request.Form("emailAddress").

    В случае применения ColdFusion целесообразно заменить код from="yourname@yourserver.com" кодом from="#form.emailAddress#".

    Как упоминалось ранее, в PHP не существует простого и понятного способа указать отправителя. В любом случае для PHP указывать отправителя не обязательно, – так что этот шаг можно пропустить. Тем не менее, способы указать отправителя существуют и зависят от применяемого сервера. Чтобы узнать их, следует связаться с хостинг-провайдером.

    Теперь в строке From вместо одного и того же электронного адреса будет указываться значение, указанное посетителем в форме.

  • Замените содержимое строки с указанием темы – subject и текст в теле сообщения – body на значения соответствующих переменных формы.

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

    Для ASP:

    <% theSchema=http://schemas.microsoft.com/cdo/configuration/ Set cdoConfig=server.CreateObject("CDO.Configuration") cdoConfis.Fields.Item(theSchema & "sendusing") = 2 cdoConfid.Fields.Item(theSchema & "smtpserver") = "your.SMTP.server.com" cdoConfig.Fields.Update set cdoMessage=Server.CreateObject("CDO.Message") cdoMessage.Configuration=cdoConfig cdoMessage.From=Request.Form("emailAddress") cdoMessage.To=yourname@yourserver.com cdoMessage.Subject=Request.Form("subject") cdoMessage.TextBody=Request.Form("body") cdoMessage.Send Set cdoMessage=Nothing Set cdoConfig=Nothing %>

    Пересылка динамических значений формы
    увеличить изображение

    Для ColdFusion:

    #form.body#

    Для PHP:



  • Сохраните страницу, загрузите ее на сервер и протестируйте работу приложения. Для этого заполните форму, а затем нажмите кнопку Submit и проверьте электронную корреспонденцию.

    Пересылка динамических значений формы

    Если вместо указанной в форме темы сообщения отображается тема form.subject или вместо введенного текста отображается текст form.body, то это означает, что вокруг динамических переменных не удалены кавычки (ASP и PHP) или не добавлены знаки # # (ColdFusion).



  • Содержание Назад Вперед

    Почтовый сервис SMTP

    Повсюду в уроке применяется почтовый сервис SMTP. SMTP (Simple Mail Transfer Protocol – простой протокол пересылки электронной почты) является сетевым стандартом для пересылки электронных сообщений, которые затем принимаются и интерпретируются различными клиентами, в том числе, POP3 и IMAP.
    Возможно, ключевая особенность протокола SMTP состоит в том, что он употребляется только для отправки, а не для получения сообщений. Таким образом, настройка сервера для использования протокола SMTP дает возможность отправлять сообщения при помощи приложений (которые, однако, не будут завершенными почтовыми сервисами). Существуют возможности, позволяющие настроить локальный компьютер как на отправку, так и на получение сообщений, но в этой книге они не рассматриваются.
    Целью урока является создание веб-приложения, генерирующего сообщения и пересылающего их по сети. Как вскоре станет ясно, подобные приложения очень полезны.

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

    Проверка правильности заполнения формы

    Поскольку форма не проверяет правильность введенных данных, ошибки при ее заполнении могут вызвать проблемы. Например, если ввести в поле для электронного адреса что-то другое, то введенные данные не будут проверены на соответствие, в частности, такому формату, как username@domain.com. Но сотрудники Newland Tours не смогут ответить на сообщение посетителя, если он введет электронный адрес не полностью. В результате, компания может понести убытки.
    В этом задании применяется простая модель поведения, которая проверяет корректность введенной пользователем информации. Проверка правильности заполнения формы бывает двух видов: проверка на стороне клиента и на стороне сервера:
  • при тестировании на стороне клиента данные, введенные в форму, проверяются на соответствие странице непосредственно браузером – после нажатия кнопки Submit и до отправления HTTP-запроса;
  • проверка на стороне сервера проводится при выполнении сценария на сервере, после отправки HTTP-запроса. У каждой формы, предназначенной для тестирования, есть свои сильные стороны и ограничения.

  • В этом задании при помощи модели поведения Dreamweaver будет реализована проверка правильности заполнения формы, выполняемая на стороне клиента. Эта модель поведения создает сценарий JavaScript, который проверяет, ввел ли пользователь правильную информацию. Если нет, появляется окно с предупреждением, и отправка запроса отменяется. Если введена верная информация, сценарий позволяет странице отправить запрос.
  • Откройте файл contact.asp и в режиме Design (Дизайн) щелкните на кнопке Submit.
    Нужно, чтобы сценарий проверки формы запускался, как только посетитель нажмет кнопку Submit. Поэтому модель поведения будет привязана к кнопке Submit. При щелчке на этой кнопке происходит событие, запускающее указанный сценарий.
    Проверка правильности заполнения формы

  • На панели Behaviors (Модели поведения) (после выполнения команд Window\Behaviors (Окно\)Модели поведения) щелкните на кнопке Add Behavior (Добавить модель поведения) ("+") и выберите в списке пункт Validate Form (Проверка допустимости формы).

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

  • В диалоговом окне Validate Form (Проверка допустимости формы) выберите первый пункт списка, установите флажок Required (Обязательная), а после этого в разделе Accept (Принимаю) активируйте переключатель Email address (Адрес электронной почты).

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

    Проверка правильности заполнения формы

    Примечание. Модель поведения выполняет только проверку синтаксиса электронного адреса. Она не проверяет, существует ли на самом деле указанный пользователем электронный адрес и принадлежит ли он данному пользователю.
  • После этого поочередно выберите два оставшихся в списке пункта и для каждого установите флажок Required (Обязательный). В разделе Accept (Принимаю) выберите переключатель Anything (Все).

    Пользователь обязательно должен ввести тему сообщения и его текст, однако здесь он не обязан придерживаться какого-то формата.

    В итоге, в диалоговом окне в конце первой опции должна появиться надпись "RisEmail", а в конце двух других – буква "R".

    Проверка правильности заполнения формы

  • Нажмите OK.

    Теперь выбранная модель поведения будет присоединена к кнопке Submit.

  • Сохраните страницу, загрузите ее на сервер и протестируйте работу приложения. Для этого необходимо оставить поля незаполненными или ввести в поле Email address (Адрес электронной почты) обычный текст, а затем нажать кнопку Submit.

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

    Проверка правильности заполнения формы
    увеличить изображение



  • Содержание Назад Вперед

    Создание веб-формы

    В этом упражнении будет создана форма для получения данных от посетителя, которые затем пересылаются на страницу messageSent.asp. Прежде чем переходить к практическим шагам, предлагаю проверить полученные знания. Каким образом следует отправлять данные на страницу messageSent.asp? Какой метод следует использовать для этого: GET или POST? Из каких полей должна состоять форма?
  • Откройте страницу contact.asp. Измените таблицу с контактными данными так, чтобы она выглядела так же, как на рисунке. Помимо этого, измените текст в первом абзаце, чтобы он отражал новую структуру страницы.
    Одно из преимуществ включения электронного адреса внутрь кода, выполняемого на стороне сервера, заключается в том, что спамеры не получат к нему доступа. Если поместить электронный адрес на страницу, как в текущей версии сайта, автоматические программы для сбора электронных адресов легко получат к нему доступ и добавят его в соответствующие списки (спам-листы). Использование формы для отправки почты позволяет защитить электронный адрес.
    Создание веб-формы
    увеличить изображение

  • Поместите курсор ниже подписи к изображению и выполните команды Insert\Form\Form (Вставка\Форма\Форма), чтобы вставить новую форму. Не меняя положение курсора, воспользуйтесь командами Insert\Table (Вставка\Таблица) и заполните новую таблицу указанными ниже данными. Нажмите OK.
    Rows: 4 (Строк: 4) Columns: 2 (Столбцов: 2) Width: 95 Percent (Толщина: 95 процентов) Border thickness: 0 (Толщина границы: 0) Cell padding: 3 (Заполнение ячейки: 3) Cell spacing: 0 (Расстояние между ячейками: 0)
    Многие часто забывают, что таблицы могут содержать любые HTML-теги. Таблица позволяет представить форму в более структурированном виде.
    Создание веб-формы
    увеличить изображение

  • В правый столбец таблицы вставьте два текстовых поля (text field), одну текстовую область (text area) и кнопку Submit (button). В первые три ячейки левого столбца введите текст "Your Email Address, Subject, Message Body" ("Ваш электронный адрес, тема и текст сообщения").
    На этом шаге формируется внешний вид страницы. Работа с данными предполагает, в частности, присвоение имен полям или назначение определенных действий для заданных полей формы. Все это будет сделано в одном из следующих шагов.

    Совет. Иногда при добавлении в ячейки таблицы или при удалении из них большого количества данных возникают проблемы с отображением страницы в Dreamweaver. К примеру, во время выполнения этого шага пунктирная линия формы может перекрыть таблицу. Однако следует помнить, что проблема относится исключительно к отображению страницы на экране, а в соответствующем коде ошибок нет. Для того, чтобы увидеть, как страница будет выглядеть на самом деле, следует в селекторе тегов щелкнуть на крайнем левом теге
  • , после чего Dreamweaver перерисует таблицу.
  • В селекторе тегов щелкните на теге
  • , после чего на панели Property Inspector (Инспектор свойств) измените значение атрибута bgcolor (цвет фона) на #eeeeee (светло-серый).

    Создание веб-формы
    увеличить изображение

    Серый цвет фона отделяет форму от остального содержимого страницы, при этом привлекая внимание к текстовым полям, которые имеют более светлый оттенок.

  • Поместите над таблицей заголовок второго уровня (тег h2), содержащий текст "Send Us a Message" ("Пришлите нам сообщение").

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

    Результат предыдущих действий показан на приведенном рисунке.

    Создание веб-формы
    увеличить изображение

  • Поочередно выделите два первых текстовых поля и назовите их emailAddress и subject, соответственно. Выделите текстовую область, назовите ее body, а также присвойте параметру Char width значение 55, параметру Num Lines – значение 6, а параметру Wrap – значение Virtual.

    На этом шаге каждому полю присваивается осмысленный идентификатор, что облегчает задачу получения данных на странице messa-geSent.asp.

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

    Создание веб-формы
    увеличить изображение

  • В селекторе тегов выделите тег , после чего на панели Property Inspector (Инспектор свойств) присвойте выделенной форме имя frm_message. В поле Action (Действие) введите "messageSent.asp". В поле со списком Method (Метод) выберите вариант POST.

    В одном из предыдущих уроков при создании форм уже выполнялись настройки для полей Action (Действие) и Method (Метод). Выбранные настройки означают, что при нажатии кнопки Submit форма отправляет HTTP-запрос на страницу messageSent.asp, а введенные в форму данные помещаются в тело этого запроса.

    Создание веб-формы
    увеличить изображение

  • Сохраните и закройте файл contact.asp, а после этого загрузите его на сервер.



  • Итак, создание формы завершено. Теперь, чтобы она заработала, требуется передать полученные значения почтовому объекту.

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

    Создание страниц

    Получение, обработка и отображение данных

    Итак, подготовительный этап завершен успешно, и пришла пора реализовать расчет стоимости на основе данных, введенных пользователем в форму. Поскольку о получении и отображении на странице данных формы говорилось достаточно, в этом упражнении внимание будет уделено сценарию расчета.
  • Откройте файл tourprice_processor.asp. При необходимости переключитесь в комбинированный режим Split (Режим разделения) или режим Code (Код).
    Для проведения расчета требуются данные, доступные на странице, которая загружается после заполнения формы (атрибут Action [Действие[).
    Поскольку кодировать вручную в режиме Design (Дизайн) невозможно, необходимо использовать режим Code (Код).
  • Только для ASP. Поместите курсор в начале документа перед открывающим тегом , дважды нажмите (Enter)/(Return), вернитесь к строке 1 и введите:
    <%@LANGUAGE="VBSCRIPT"CODEPAGE="1252" %>.
    Эта строка нужна по двум причинам. Во-первых, она сообщает серверу, что в сценарии применяется язык VBScript. Как говорилось ранее, в ASP используется несколько языков. Чаще всего, это VBScript и JScript, а в случае с ASP.NET выбор еще богаче. При употреблении ColdFusion нет необходимости указывать язык, поскольку эта технология поддерживает только язык разметки ColdFusion Markup Language (CFML), и недоразумений возникнуть не может.
    Второй атрибут, CODEPAGE, определяет язык страницы. Значение 1252 указывает на применение английского языка.
  • Только для ASP. Поместите курсор в строку 2 и дважды нажмите (Enter)/(Return), чтобы добавить места. Начиная со строки 3, введите следующий код:
    <% Dim numAdult, numChild, basePrice, tourPrice %>
    Как известно из предыдущих уроков, <% используется для указания кода ASP, который должен обработать сервер. Перед завершающей частью тега %> следует оставить пустую строку для кода, который будет добавлен в следующем шаге.
    Вторая строка выглядит несколько непривычно. В ASP для создания новой переменной следует вначале ее объявить. Для объявления переменных применяется оператор Dim. Таким образом, вторая строка кода сообщает серверу, что нужно создать четыре новые переменные. Переменным еще не присвоено никаких значений, но в скором времени это будет исправлено.

    Примечание. В некоторых языках не требуется объявлять переменные перед тем, как присваивать им значения. Ни в ColdFusion, ни в PHP объявлять переменные не нужно, поэтому строка с оператором Dim свойственна только ASP.

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

    Получение, обработка и отображение данных
    увеличить изображение

  • Всем пользователям. Присвойте трем переменным numAdult, numChild иbasePrice значения, указанные в полях формы numAdults, numChildren и tourName.

    Для ASP, начиная с пустой строки, идущей после строки с оператором Dim, следует ввести следующий код:

    numAdult = Request.Form("numAdults") numChild = Request.Form("numChildren") basePrice = Request.Form("tourName")

    Для ColdFusion в начале документа перед открывающим тегом требуется ввести следующий код:



    Для PHP в начале документа перед строкой с открывающим тегом следует ввести указанный код:

    $numAdult = $_POST['numAdults']; $numChild = $_POST['numChildren']; $basePrice = $_POST['tourName'];

    Код Request.Form("имя_поля"), form.имя_поля и $_POST['имя_поля'] уже применялся в предыдущих уроках. На этот раз, вместо того, чтобы как можно скорее вывести значения на страницу, их нужно сохранить в новых переменных. Причина заключается в том, что на страницу должен выводиться результат расчетов. Сохранение этих значений в переменных с осмысленными названиями облегчает написание и чтение сценария для проведения расчетов.

    Следует обратить внимание, что в коде ColdFusion вокруг переменных формы отсутствуют знаки ##, как в предыдущем уроке. Эти знаки употребляются только при выведении динамических данных в исходный код итоговой страницы, например, в HTML. Без них на страницу будет выведено имя переменной, а не ее значение. Но в данном случае знаки ## не требуются, поскольку значения переменных используются во внутренних процессах ColdFusion и никуда не выводятся.


  • Установите значение четвертой переменной tourPrice, в которой сохраняется результат расчетов.

    Для ASP ниже строки с переменной basePrice необходимо ввести следующий код:

    tourPrice = (numAdult * basePrice) + (numChild * basePrice)

    Для ColdFusion ниже строки с переменной basePrice целесообразно ввести приведенный ниже код:



    Для PHP ниже строки с переменной basePrice следует ввести такой код:

    $tourPrice = ($numAdult * $basePrice) + ($numChild * $basePrice);

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

    После выполнения этого кода на сервере переменная tourPrice будет содержать итоговую стоимость. Остается поместить это значение в HTML-код вместо заменителя XXX, после чего посетители смогут увидеть нужную информацию.

    Получение, обработка и отображение данных
    увеличить изображение

  • Оставаясь в режиме Code (Код), переместитесь к заменителю XXX (приблизительно строка 34 в ASP, строка 30 в ColdFusion и строка 33 в PHP). Удалите заменитель XXX, а вместо него введите следующий код, выводящий на страницу значение переменной tourPrice.

    Для ASP:

    <% Response.Write(tourPrice) %>

    Для ColdFusion:

    #tourPrice#

    Для PHP:



    Основное различие между выводом значения переменной в данном случае и в уроке 5 состоит в том, что сейчас не требуется определять совместимую с протоколом HTTP область видимости переменной (строка запроса, форма, файл cookie и т.д.). Область видимости этой переменной ограничивается самой страницей во время обработки в ASP, ColdFusion или PHP. Таким образом, переменная будет использована и удалена до отправления кода браузеру по протоколу HTTP.

    Получение, обработка и отображение данных
    увеличить изображение

  • Сохраните документы tourprice.asp и tourprice_processor.asp, а после этого загрузите их на сервер. На панели Site (Сайт) выделите файл tourprice.asp и нажмите клавишу (F12), чтобы протестировать его.


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

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

    Получение, обработка и отображение данных
    увеличить изображение

    Если при вводе числовых значений страница работает без ошибок, следует указать неверные данные (к примеру, оставить одно из полей незаполненным или ввести букву, например, "D").

    Получение, обработка и отображение данных
    увеличить изображение

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

  • Откройте в Dreamweaver документ tourprice_processor.asp и добавьте функцию, отображающую выводимое значение в формате долларов США.

    Для ASP:

    <% Response.Write(FormatCurrency(tourPrice)) %>

    Для ColdFusion:

    #DollarFormat(tourPrice)#

    Для PHP:



    Примечание. В версиях PHP 4.3 и выше присутствует функция money_format(), но она недоступна в ранних версиях PHP, в том числе, в версиях, предустановленных в Mac OS X. В данном случае единственный недостаток применения функции number_format() состоит в том, что она не выводит знак доллара ($). Чтобы добавить его вручную, следует ввести знак доллара $ между тегом (или , если он не был изменен) и тегом .




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

    Обычно функции имеют следующий вид: Имя_функции(Параметр). В некоторых случаях функция не имеет параметров, но скобки остаются (в частности, функция ColdFusion Now(), возвращающая текущее время на сервере). В случае с функциями FormatCurrency() (ASP) и DollarFormat() (ColdFusion) в скобках указывается форматируемое число. Поскольку число содержится в переменной tourPrice, в качестве параметра в функцию помещается эта переменная.

    Функция number_format() (PHP) имеет четыре параметра: форматируемое число ($tourPrice), количество десятичных цифр после запятой (2), знак, отделяющий целые числа от десятичных (.) и знак, отделяющий тысячи (,). Поскольку точка и запятая в последних двух параметрах не являются частью синтаксической конструкции функции, а представляют собой текст, который выводится на страницу, они заключены в одинарные кавычки. Без одинарных кавычек интерпретатор PHP будет ошибочно пытаться использовать точку как символ конкатенации (объединения), а запятую – как разделитель между параметрами. Это может привести к ошибке.

    Получение, обработка и отображение данных
    увеличить изображение

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

    Создание формы

    В этом упражнении будет создана форма для ввода данных, необходимых для расчета стоимости тура с помощью сценария. При создании формы следует обратить внимание на два момента. Форма содержит вложенную таблицу, используемую для форматирования. Этот прием применялся в уроке 6 при создании формы для отправки сообщений. Второй момент – это использование раскрывающегося списка.
  • Откройте файл tourprice.asp. Поместите курсор в конец строки с текстом All fields required (Все обязательные поля) – сразу после точки. В разделе Forms (Формы) на панели Insert (Вставка) щелкните на кнопке Form (Форма). После этого на панели Property Inspector (Инспектор свойств) присвойте форме имя frm_tourprice, а затем в раскрывающемся списке Action (Действие) укажите файл tourprice_processor.asp, а в поле со списком Method (Метод) выберите POST.
    Поскольку форма не содержит полей и кнопки Submit, она совершенно бесполезна, – но это только начало.
    Создание формы
    увеличить изображение

    Пунктирной линией обозначены границы формы.
  • Поместите курсор внутри формы, а в категории Tables (Таблицы) на панели Insert (Вставка) щелкните на кнопке Table (Таблица). В открывшемся диалоговом окне укажите следующие параметры:
    Rows: 4 (Строк: 4) Columns: 4 (Столбцов: 4) Width: 60 Percent (Толщина: 60 процентов) Border: 0 (Толщина границы: 0) Cell Padding: 3 (Заполнение ячейки: 3) Cell Spacing: 0 (Расстояние между ячейками: 0)
    После этого форма растянется, чтобы вместить созданную таблицу.
    Создание формы
    увеличить изображение

  • В три верхние ячейки левого столбца введите следующие надписи: "Number of Adults" ("Количество взрослых"), "Number of Children" ("Количество детей"), "Tour Name" ("Название тура"). В ячейки правого столбца при помощи категории Forms (Формы) на панели Insert (Вставка) сверху вниз вставьте текстовое поле (text field), а затем другое текстовое поле. Кроме этого, добавьте раскрывающийся список или ниспадающее меню (list/menu), а после этого – кнопку Submit (button).

    Категория Forms (Формы) позволяет создавать формы в считанные секунды. Однако каждый элемент формы нужно еще настроить.

    Создание формы
    увеличить изображение

  • Выделите первое текстовое поле и на панели Property Inspector (Инспектор свойств) присвойте ему имя numAdults. Таким же образом следует назначить имя второму текстовому полю numChildren.

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

  • Выделите список и на панели Property Inspector (Инспектор свойств) присвойте ему имя tourName, а потом щелкните на кнопке List Values (Значения списка). В одноименном диалоговом окне List Values щелкните в строке под надписью Item Label (Надпись элемента) и введите текст "Highlights of Argentina" ("Достопримечательности Аргентины"). Нажмите клавишу (Tab) и введите "500". Нажимая (Tab) для перехода между полями, введите "Highlights of Western Canada", "700", "Egyptian Pyramids and More" и "900".

    Создание формы
    увеличить изображение

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

    Меню работают по несколько другому принципу. Как и в случае с текстовыми полями им присваиваются имена, в которых хранятся соответствующие данные. Так, на странице, обрабатывающей эту форму, данные меню будут извлечены кодом Request.Form("tourName") (ASP), #form.tourName# (ColdFusion) или $_POST['tourName'] (PHP).

    На этом сходство заканчивается. Ниспадающие меню не дают столько свободы, сколько текстовые поля. Здесь пользователь выбирает из ограниченного числа вариантов, определенного разработчиком. Варианты, из которых будет выбирать пользователь, задаются в столбце Item Label (Надпись элемента) диалогового окна List Values (Значения списка). В столбце Value (Значение) указываются соответствующие вариантам значения, которые пересылаются вместе с остальными данными формы. Таким образом, если посетитель выберет вариант Egyptian Pyramids and More (Египетские пирамиды и прочие достопримечательности), при использовании кода Request.Form("tourName") (ASP), #form.tourName# (ColdFusion) или $_POST['tourName'] (PHP) будет извлечено значение 900. Значения в списке будут использоваться при создании сценария расчетов.


    Надпись к элементу списка ( item label) не пересылается на следующую страницу вместе с данными формы. Она применяется в форме для того, чтобы посетитель мог сделать выбор. Надписи к элементам и сами значения отделены друг от друга, поскольку нередко требуется переслать в сценарий значение, отличное от надписи по типу. При проведении математических расчетов требуется не строковое, а числовое значение.

    На самом деле, Newland Tours проводит гораздо больше путешествий. Вводить каждое по отдельности было бы довольно утомительно. Помимо этого, каждый раз для добавления или удаления путешествия приходится открывать диалоговое окно List Values (Значения списка) и производить нужные изменения. Существует более приемлемый вариант – это динамическая загрузка надписей и их значений для автоматического формирования этого меню при загрузке страницы. О том, как это сделать, говорится в уроке 9. Но сейчас, при создании основного механизма приложения, эти значения останутся жестко заданными.

    Существует еще одна проблема. Если в этот момент посетитель выберет вариант Egyptian Pyramids and More, то на обработку будет отправлено только значение 900. Это значение можно умножить на число взрослых и детей, но нет возможности отправить отдельные значения для каждой группы. Вообще итоговая стоимость должна рассчитываться на основе цен отдельно для взрослых и для детей. Эта проблема также будет решена в уроке 9 путем извлечения соответствующих значений из базы данных.

  • Сохраните страницу tourprice.asp и нажмите клавишу (F12), чтобы протестировать ее в браузере.

    Форма готова к использованию. Однако прежде, чем переходить к созданию кода, выполняемого на стороне сервера, следует проверить в браузере ее внешний вид. Если нажать кнопку Submit, откроется страница tourprice_processor.asp, но она все еще статична.



  • По завершении закройте документ tourprice.asp.

    Создание формы
    увеличить изображение

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

    Создание и применение класса CSS

    Для того чтобы сделать сообщение об ошибке более приметным, следует поработать над стилем оформления страницы. В XHTML для управления внешним видом страницы уместно использовать CSS. Для тегов разметки XHTML, определяющих заголовки, обычный текст, списки и другие элементы, определены готовые стили. Тем не менее, в XHTML нет тега , при использовании которого можно было бы переопределить дизайн страницы при помощи CSS. К счастью, CSS позволяет создавать собственные стили, которые могут применяться к стандартным элементам XHTML, например, к тегу .
    В этом задании специально для сообщений об ошибках будет создан пользовательский стиль, также называемый классом.
  • На панели CSS Styles (CSS-стили) щелкните на кнопке New CSS Style (Создать CSS-стиль). В диалоговом окне выберите вариант Class (can apply to any tag) (Класс [можно применить к любому тегу]), а в качестве имени в поле Name (Имя) введите ".error". Для добавления нового стиля во внешнюю таблицу стилей, в поле Define in (Определить в) должно быть выбрано имя newland.css.
    Наличие точки перед словом "error" в названии стиля обязательно.
    В предыдущих уроках новые стили создавались не один раз, так что этот процесс должен быть знакомым. Следует помнить, что в данный момент происходит не переопределение существующего тега, а создание нового класса.
    Создание и применение класса CSS

  • В диалоговом окне CSS Style Definition (Определение CSS-стиля) в качестве значения атрибута Weight (Начертание) выберите вариант bold (полужирное), а для атрибута Color (Цвет) выберите цвет #990000 (темно-красный). По окончании нажмите OK.
    Одно из преимуществ стилей CSS заключается в том, что они наследуют атрибуты других стилей (в том случае, если эти атрибуты не конфликтуют). Созданный класс будет прикреплен к тегу , содержащему сообщение об ошибке. Стиль для тега уже определен, то есть ему соответствует определенный шрифт, определенный размер и т.д. Все это наследует и класс .error. Таким образом, при создании класса CSS достаточно определить только атрибуты, свойственные именно этому классу. В данном случае это выделение текста с помощью полужирного начертания и красного цвета.

    Создание и применение класса CSS

    Примечание. В зависимости от настроек ( диалоговое окно Preferences) при создании класса в Dreamweaver может открыться таблица стилей. В этом случае ее можно закрыть.

    После того, как стиль создан, следует применить его.

  • С помощью панели Site (Сайт) загрузите файл newland.css на удаленный сервер.

    Так как новый стиль .error был сохранен только на локальном компьютере, поэтому если не загрузить таблицу стилей, то при тестировании файла ничего не изменится.

    Создание и применение класса CSS

  • В режиме Code (Код) переместитесь к строке, содержащей код Response.Write, или .

    Для применения стиля CSS к тегу применяется атрибут class. Следует обратить внимание на то, что в имени класса точка опускается.

  • Только пользователям ASP и PHP. Перед каждой кавычкой около имени класса добавьте еще одну кавычку (ASP) или обратный слэш (PHP).

    В ASP тег должен выглядеть следующим образом:

    , а в PHP –

    .

    Второй набор кавычек (ASP) и обратный слэш (PHP) необходимы по той причине, что вся строка HTML-кода заключена в кавычки. При использовании обычных кавычек ASP и PHP неправильно обработают код. Дополнительные кавычки или обратный слэш сообщают интерпретатору кода, что указанные кавычки следует рассматривать как часть текстовой строки, а не как ее границы.

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

    Создание и применение класса CSS
    увеличить изображение

  • Сохраните файл, загрузите его на сервер и протестируйте.



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

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

    Создание серверного сценария для проверки формы

    Из предыдущего упражнения известно, что указанная форма работает правильно, когда числа введены в оба поля. Но если посетитель оставит одно из полей незаполненным или введет нечисловой символ, то при нажатии кнопки Submit появится неприятное сообщение об ошибке. Сообщения об ошибках, подобные указанным ранее, создавались, чтобы помочь разработчикам отлаживать работу приложений. В идеале, посетители совсем не должны их видеть.
    Для предотвращения ошибок вводится сценарий, проверяющий, все ли необходимые данные были введены в форму. В уроке 6 проводилась проверка электронного адреса, введенного в форму. Эта проверка выполнялась на стороне клиента – в виде встроенного в Dreamweaver сценария JavaScript, который запускался при нажатии пользователем кнопки Submit. Сценарий было довольно просто добавить, однако окно с предупреждением, появляющееся в том случае, если форма была заполнена некорректно, было не слишком информативным.
    В этом задании будет написан код для ASP, ColdFusion или PHP, проверяющий, введены ли в поля формы числа. Этот код выполняется на стороне сервера. Если поля не заполнены или введенные значения не являются числами, появится изначально скрытая часть HTML-страницы, содержащая сообщение об ошибке. Поскольку сообщение создается при помощи HTML-кода, в него можно ввести любую информацию и как угодно настроить его внешний вид.
    Весь процесс выглядит следующим образом. Пользователь заполняет форму и нажимает кнопку Submit. На сервер отправляется запрос на страницу tourprice_processor.asp. В верхней части этой страницы расположен небольшой сценарий ASP, ColdFusion или PHP, проверяющий правильность заполнения формы. Если в обоих полях формы введены числа, страница обрабатывается и отправляется клиенту в обычном порядке. Если хотя бы одно поле не содержит число, пользователь перенаправляется обратно на страницу tourprice.asp, на которой появляется скрытая ранее область с сообщением об ошибке.
    Для создания этого механизма требуется написать сценарий проверки правильности заполнения формы. О том, как это сделать, говорится в данном упражнении. В следующем упражнении показано, как создать и скрыть фрагмент HTML-кода с сообщением об ошибке. Наконец, введенный в область текст следует отформатировать при помощи CSS.
    Итак, общая картина ясна, пора прикинуть, как должен работать сценарий проверки формы. Во-первых, сценарий будет управлять передачей данных. То есть, в зависимости от того, правильные ли данные ввел посетитель, сценарий должен продолжить расчеты или вернуть посетителя на страницу tourprice.asp. Для реализации управления данными обычно применяются условные инструкции вида if…else. Приведенный ниже псевдокод демонстрирует схему работы сценария.

    if пользователь вводит в поле нечисловое значение или оставляет его незаполненным направить пользователя обратно на tourprice.asp else продолжать в обычном порядке end if

    Сценарий будет выполнен поэтапно – в два приема. На первом этапе для обработки страницы в обычном порядке инструкция else не потребуется. Нужна только первая часть сценария с инструкцией if.

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

    if пользователь вводит в поле нечисловое значение или оставляет его незаполненным направить пользователя обратно на tourprice.asp с помощью строки запроса end if

    План готов, пора написать код.

  • Откройте файл tourprice_processor.asp. В начале документа перед сценарием расчета стоимости оставьте немного места для нового сценария.

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

    Пользователям ASP следует поместить новый сценарий ниже кода <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>, который всегда должен оставаться в новой строке.

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

    Для ASP:

    <% If Not IsNumeric(Request.Form("numAdults")) or Not IsNumeric(Request.Form("numChildren")) Then End If %>

    Для ColdFusion:

    Not IsNumeric(form.numAdults) or Not IsNumeric(form.numChildren)>


    Для PHP:



    Пустая строка в каждом участке оставлена для кода, который будет добавлен на следующем шаге.

    Все три языка содержат функцию IsNumeric() или is_numeric(), которая проверяет, является ли параметр числом. Если да, функция возвращает значение true (истина). Если нет – значение false (ложь). Поскольку перенаправить посетителя требуется в том случае, если значение не является числовым, добавляется оператор Not (ASP, ColdFusion) или применятся операция сравнения == false (PHP), чтобы инвертировать значение, возвращаемое функцией IsNumeric() или is_numeric(). Поскольку в условии поверяются две переменные, для каждой вызывается своя функция. Соединяет их оператор or (или).

  • Добавьте внутреннее действие, которое выполняется, если в результате логической операции возвращается значение true.

    Для ASP (с отступом в пустой строке, после инструкции if):

    Response.Redirect("tourprice.asp?error=notnumeric")

    Для ColdFusion (с отступом в пустой строке между открывающим и закрывающим тегами ):



    Для PHP (с отступом в пустой строке после инструкции if):

    { header("Location: tourprice.php?error=notnumeric"); exit; }

    Функция ASP Response.Redirect() переводит пользователя по указанному адресу. Точно так же действуют тег (ColdFusion) и функция header("Location:…") (PHP). Помимо самого URL-адреса указана и переменная запроса. На страницу tourprice.asp будет добавлен сценарий, проверяющий наличие этой переменной при помощи условной конструкции if…else и управляющий отображением области с сообщением об ошибке.

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

  • Сохраните файл tourprice_processor.asp и загрузите его на сервер. Протестируйте страницу tourprice.asp.

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

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



  • Содержание Назад Вперед

    Создание страниц

    Для создания приложения необходимы две страницы, наполненные статическим содержимым. В дальнейшем вместо статического кода постепенно будет добавляться динамический. Однако в этом упражнении на страницу помещается обычный HTML-код.
  • Откройте файл generic_template.asp и сохраните его как tourprice_processor.asp, а затем сохраните его снова как tourprice.asp.
    В итоге, будут получены две страницы, выполненные на основе шаблона. Страница tourprice.asp остается открытой.
  • На панели инструментов измените заголовок страницы (текстовое поле Title [Заголовок]) на "Newland Tours:Tour Price Calculator" ("Newland Tours: Калькулятор для расчета стоимости тура"). На самой странице измените заменитель заголовка на "Tour Price Calculator". После этого на место заменителя текста страницы введите следующий текст:
    Enter the number of adults and children in your party as well as the tour name of the tour you want to calculate. (Введите количество взрослых и детей для тура, стоимость которого вы хотите рассчитать.)
    All fields required (enter 0 if necessary). (Все поля являются обязательными [при необходимости введите 0]).
    Ниже будет создана форма, но в данный момент все необходимые действия над страницей завершены.
    Создание страниц
    увеличить изображение

  • Сохраните и закройте tourprice.asp. Откройте tourprice_processor.asp.
    Изменения для второй страницы подобны изменениям для первой.
  • На панели инструментов измените заголовок страницы на "Newland Tours:Tour Price Calculator". На самой странице измените заменитель заголовка на "Tour Price Calculator". После этого на место заменителя текста поместите следующий текст:
    The estimated cost of your tour is XXX. (Стоимость вашего тура составляет XXX.)
    Prices include hotel, accommodation, and travel expenses during the tour. They do not include airfare to the starting destination. (В стоимость включены расходы на оплату отеля [включая питание и разные услуги], а также путевые расходы. В эту стоимость не входит стоимость авиабилетов.)

    Calculate another tour. (Рассчитайте стоимость другого тура.)

    Contact one of our qualified agents. (Свяжитесь со специалистами нашей компании.)

    Позже в этом уроке вместо замещающего текста в виде литеральной строки "XXX" будет помещена итоговая сумма, вычисленная с помощью сценария ASP, ColdFusion или PHP.

    Создание страниц
    увеличить изображение

  • Выделите замещающий текст "XXX" и нажмите кнопку B на панели Property Inspector (Инспектор свойств), чтобы выделить текст с помощью полужирного начертания.

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

    Как ни удивительно, вместо того, чтобы как обычно поместить текст между тегами , Dreamweaver поместит его между тегами . Для выделения текста посредством полужирного начертания Dreamweaver предлагает применить созданный до этого класс. Хотя в данном случае это изменение довольно безвредно, оно может запутать пользователей, использующих экранный диктор. Поскольку сайт не будет открыт для общего доступа, можно оставить все без изменений, а для того, чтобы исправить неточность, следует в области кода заменить и на и .

  • Выделите слово "Calculate" ("Вычислить"), а затем при помощи панели Property Inspector (Инспектор свойств) присоедините к нему ссылку на страницу tourprice.asp. Выделите слово "Contact" и прикрепите к нему ссылку на страницу contact.asp.

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

    Создание страниц
    увеличить изображение

  • Сохраните и закройте tourprice_processor.asp.


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

    Создание условной области

    Использование участка HTML-кода, который отображается в зависимости от ситуации, может показаться необычным, тем не менее, навыки, полученные в этом уроке, делают это возможным. Требуется просто поместить обычный HTML-код внутрь условной конструкции. При выполнении условия HTML-код будет добавлен на страницу. В противном случае, страница отобразится без него.
  • Откройте tourprice.asp. Поместите курсор перед открывающим тегом и несколько раз нажмите (Enter)/(Return), чтобы освободить место для нового кода.
    Открывающий тег находится внутри строки 38. Условная область, отображающаяся при перезагрузке страницы, в этом месте будет особенно заметна.
  • Как и в предыдущем упражнении, начните с написания условия.
    Для ASP:
    <% If Request.QueryString("error") = "notnumeric" Then End If %>
    Для ColdFusion:

    Для PHP:

    В условном выражении проверяется, присутствует ли в запросе переменная с именем error и если это так, содержит ли она значение notnumeric. При первой загрузке страницы такой переменной нет, так что в результате проверки условия будет возвращено значение false. Однако если страница tourprice.asp загружается в процессе проверки формы со страницы tourprice_processor.asp, в запрос добавляется переменная с нужным значением.
  • Между строками, открывающими и закрывающими условие, поместите код, выводящий на страницу HTML.
    Для ASP:
    Response.Write("*** Error! One or more fields was left blank or contained a non-numeric character.
    ")
    Для ColdFusion:
    *** Error! One or more fields was left blank or contained a non-numeric character.

    Для PHP:
    { echo "*** Error! One or more fields was left blank or contained a non-numeric character.
    "; }
    Функции Response.Write, и echo применяются для вывода статического или динамического кода. До этого на страницу выводился только динамический код, а
    Создание условной области
    увеличить изображение

  • Только пользователям ColdFusion. Поместите все условное выражение внутри другого условного выражения , чтобы первое выражение обрабатывалось только в том случае, если переменная запроса действительно существует.

    *** Error! One or more fields was left blank or contained a non-numeric character.


    Создание условной области
    увеличить изображение

    Функция isDefined работает по тому же принципу, что и isNumeric, только вместо того, чтобы проверять, является ли значение числовым, она проверяет наличие того или иного параметра.

    В данном случае добавление кода необходимо, поскольку ColdFusion подразумевает, что если в коде производится проверка переменной ( ), следовательно, эта переменная существует. Если переменной на самом деле нет, то при ее проверке ColdFusion выдаст сообщение об ошибке. Переменная error появляется только в том случае, если страница загружается в результате перевода пользователя со страницы tourprice_processor.cfm при проверке правильности заполнения формы. Таким образом, при первой загрузке страницы непременно появится безобразное сообщение об ошибке. Для решения этой проблемы вводится дополнительный код, проверяющий, действительно ли существует переменная url.error. Если нет, ColdFusion игнорирует остальной код, проверяющий, является ли значение числовым. Если переменная url.error существует, ColdFusion продолжает проверку.

    В этом плане ASP и PHP отличаются от ColdFusion. Если переменная querystring.error не определена, интерпретатор делает вывод, что ее значение не может быть notnumeric и просто продолжает обработку кода страницы.

  • Сохраните файл tourprice.asp, загрузите его на сервер и протестируйте в браузере.

    Теперь при попытке ввести в поля формы значения, отличные от числовых, на странице появляется сообщение об ошибке.



  • Осталась одна проблема – сообщение не слишком заметно.

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

    Ускоренный курс по базам данных

    Базы данных в сети

    После описания основных компонентов и функций баз данных пора рассказать о том, как они работают в сети.
    Существует множество вариантов для применения содержимого баз данных в сети. Самый простой способ, который будет реализован к концу урока – это отображение содержимого поля на веб-странице. Но, помимо отображения простой строки текста, существуют возможности выводить несколько полей сразу, динамически заполнять меню элементами и производить аутентификацию пользователей. Кроме отображения на странице полученная информация нередко помещается на хранение в таблицы базы данных. Благодаря этому реализованы средства для регистрация пользователей, заполнения опросников, тестов и систем управления контентом.
    Совет. Системы управления контентом дают пользователям возможность добавлять или изменять содержимое сайта. При этом пользователю не нужно знать HTML, применять дополнительные программы или беспокоиться о загрузке файлов на сайт. Пользователь вводит содержимое файла в веб-форму, после чего оно сохраняется в базу данных и выводится на нужную страницу.
    Если сравнить веб-страницы, управляемые базами данных, с объектами баз данных в Access, речь о которых шла выше, станет понятно, что веб-страницы и веб-формы могут служить эффективной заменой отчетов и форм базы данных. Веб-страницы точно так же, как и отчеты, выводят и отображают данные, а веб-формы выполняют ту же функцию, что и формы баз данных. Достоинство такой системы заключается в том, что для обновления ее содержимого пользователям не требуется Access или MySQL (или любая другая реляционная СУБД). К тому же, пользователи могут находиться в любой точке земного шара, но при этом иметь доступ к базе благодаря Интернету. Более того, поскольку пользователи не имеют прямого доступа к базе данных, снижается вероятность утечки данных (умышленной или случайной).
    С плюсами все ясно, осталось выяснить, как же все это работает. Владелец сайта имеет доступ к файлам, размещенным на жестком диске сервера. Посетители сайта не имеют прав на изменение файлов на сервере, так как это подорвало бы систему безопасности сервера. Но можно предоставить права доступа к определенным файлам на сервере конкретным приложениям.
    Один из способов – это использование интерфейса ODBC (Windows), позволяющего создать имя источника данных (DSN – Data Source Name), позволяющее ASP или ColdFusion обмениваться данными с базой данных Access. Эта взаимосвязь отображена на приведенной ниже схеме.
    Базы данных в сети
    увеличить изображение

    Эта схема дает наглядное представление о многих процессах при работе с базами данных. Следует обратить внимание на то, как много промежуточных ступеней отделяют пользователя от реальных данных. Эта сложная последовательность позволяет пользователю получить доступ к данным, но защищает данные от прямого доступа, тем самым обеспечивая определенный уровень безопасности.
    Схема состоит из четырех частей, характеризующих уровень клиента, уровень промежуточного ПО, уровень ODBC и уровень базы данных.
    К уровню клиента относится статический HTML-код, обрабатываемый браузером. Изначально код страницы может быть как статическим, так и динамическим, но, как известно, к моменту передачи страницы браузеру она состоит полностью из статического HTML-кода.
    В ODBC есть вся информация, необходимая для доступа к базе данных, включая сведения о драйвере базы данных и путь к базе. Эти два параметра хранятся в ODBC и вызываются при помощи DSN.
    Наконец, SQL-запрос достигает самой базы данных, ищет нужные таблицы и извлекает соответствующую информацию.
    Но это только первый этап. На обратном пути данные идут по тому же маршруту, что и запрос, пока не достигают уровня промежуточного ПО. В этот момент извлеченные из базы данные сохраняются в оперативной памяти сервера (RAM). Данные еще не достигли страницы, хотя уже почти у цели. Сохраненные в памяти данные, которые получены в результате запроса, называются набором записей (recordset). Для вывода набора записей (или любого его подмножества) в HTML-код применяется ASP или ColdFusion. Принцип здесь тот же, что и при выводе переменных формы. В итоге, пользователь может просмотреть извлеченные данные на странице.
    Связка PHP/MySQL работает по другой схеме, главное отличие которой заключается в том, что в ней отсутствует интерфейс ODBC. Вместо этого информация, необходимая для доступа к базе данных, помещается непосредственно в код. Подробнее об этом будет рассказано позже, но основной идеей является то, что PHP содержит специальную функцию (mysql_connect()), которая используется для подключения к базе данных MySQL. В случае применения этой функции указывается путь к серверу баз данных, а также имя пользователя и пароль для доступа. После этого вызывается другая функция (mysql_select_db()), позволяющая указать имя базы данных, к которой требуется получить доступ. В MySQL может содержаться несколько баз данных, в отличие от Access, где каждая база данных хранится в отдельном файле с расширением .mdb. Несмотря на то, что в PHP и MySQL употребляется несколько иной подход, в общих чертах процесс остается прежним.
    Примечание. Существуют драйверы ODBC для MySQL, но поскольку Dreamweaver не подключает PHP-страницы к MySQL через ODBC, устанавливать эти драйверы не нужно.

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

    Безопасность баз данных и сеть

    Безопасность является главной проблемой динамических приложений, подключающихся к источникам данных. Сохранность и конфиденциальность данных жизненно важны для любой компании. В новостях нередко сообщается о том, что злоумышленники взломали базу данных той или иной организации. Но ирония заключается в том, что угроза исходит вовсе не от злоумышленников, а от сотрудников, которые с самыми благими намерениями совершают ошибки во время работы.
    В книге вопросы безопасности не рассматриваются, однако ниже приведено несколько советов по обеспечению конфиденциальности информации, хранящейся в базах данных, ее защиты как от сотрудников компании, так и от конечных пользователей. Более подробные сведения приведены на бесплатном сайте Macromedia Security Development Center, содержащем десятки статей, технические руководства, советы, упражнения и многое другое. Сайт размещен по адресу: http://www.macromedia.com/devnet/security/.
    Для защиты данных следует:
  • проверять тип и формат всех вводимых посетителями данных. Например, если поле предназначено для ввода телефонного номера, следует убедиться, что данные, введенные в это поле, состоят из цифр и соответствуют формату представления телефонных номеров;
  • по возможности, оставлять управление данными за базой данных (использовать SQL-запросы), а не за приложением;
  • задавать необходимые ограничения в таблицах и полях для предотвращения ввода неправильных данных;
  • в формах, при малейшей возможности, вместо текстовых полей использовать списки с ограниченным набором вариантов.

  • Следование этим советам не гарантирует полную сохранность данных, однако это уже значительный шаг в правильном направлении. Так что при разработке любого проекта одной из основных задач является создание системы безопасности для защиты данных.

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

    Извлечение наборов записей и отображение информации из базы данных

    Последние изменения по усовершенствованию дизайна и структуры сайта производились довольно давно – в предыдущем уроке. После этого были представлены только материалы теоретического плана и упражнения по настройке. Но на страницы сайта никаких изменений пока не вносилось. В последнем упражнении этого урока колонка "Traveler’s Journal" будет динамически загружаться из базы данных. В браузере страница будет выглядеть так же, как раньше, но в Dreamweaver изменения будут заметны.
  • Откройте index.asp и в области Design (Дизайн) выделите текст, начиная с "Teens Discover…" и заканчивая "…putting together" в нижней части. Не следует удалять желтый значок рядом с буквой "T" в слове "Teens" (если он отображается). Нажмите Delete (Удалить).
    На освободившееся место будет помещен динамический текст.
    Извлечение наборов записей и отображение информации из базы данных
    увеличить изображение

  • Щелкните на изображении с надписью "Traveler’s Journal", чтобы выделить его. В селекторе тегов (в нижнем правом углу окна документа) щелкните правой кнопкой мыши на теге

    , слева от тега и выберите пункт Remove Tag (Удалить тег).
    Текст для колонки, содержащийся в базе данных, уже размечен HTML-тегами. Если не удалить тег

    , то теги разметки окажутся некорректно вложенными внутрь тега

    .

  • На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+") и выберите в списке пункт Recordset (Query) (Набор записей [Запрос]).
    Поскольку сайт подключен к источнику данных, Dreamweaver может генерировать код, извлекающий данные из базы. В этом и следующем шагах создается набор записей, который, как говорилось в начале урока, представляет собой набор данных, соответствующих определенному критерию отбора и извлеченных из базы данных при помощи SQL-запроса.
    Извлечение наборов записей и отображение информации из базы данных

    Цель упражнения – отобразить конкретную запись журнала, однако требуются не все записи, а только самая последняя. По этой причине каждой записи соответствует особый идентификатор (первичный ключ). При этом значение идентификатора для каждой новой записи увеличивается. Таким образом, запись с самым высоким значением поля journalID является самой последней. Для выполнения задачи требуется отсортировать данные и извлечь содержимое последней записи.
  • В поле Name (Имя) диалогового окна Recordset (Набор записей) введите имя rs_journal. В меню Connection (Соединение) выберите пункт conn_newland (или newland – в случае с ColdFusion). В меню Table (Таблица) выберите пункт tbl_journal. В разделе Columns (Столбцы) укажите вариант Selected (Выделенные) и, удерживая нажатой клавишу (Ctrl) (Windows) или (Command) (Macintosh), выделите пункты journalID и journal_entry.

    В этом диалоговом окне создается набор записей rs_journal. Данные для него извлекаются на основе критерия, заданного в SQL-запросе. Формирование SQL-запроса незаметно началось уже на этом шаге.

    Во-первых, указано, что источнику данных соответствует соединение conn_newland (задающее DSN newland). Во-вторых, указана таблица tbl_journal, расположенная внутри этого источника данных. В-третьих, указано, что из таблицы требуется извлечь только поля journalID и journal_entry.

    Извлечение наборов записей и отображение информации из базы данных

  • В списке Sort (Отсортировать) выберите пункт journalID, а в списке справа – пункт Descending (По убыванию). По окончании нажмите OK.

    Теперь в SQL-запрос будет добавлено инструкция для сортировки записей по убыванию – в зависимости от времени ввода данных. Итак, информация, необходимая для создания набора записей, введена.

    Извлечение наборов записей и отображение информации из базы данных

    После нажатия OK набор записей отобразится на панели Bindings (Привязки) (так же, как в предыдущих уроках отображались переменные формы и переменные запроса).

  • На панели Bindings раскройте пункт Recordset (rs_journal) (Набор записей [rs_journal]), перетащите journal_entry на страницу так, чтобы курсор находился справа от изображения, а затем отпустите кнопку мыши.

    Извлечение наборов записей и отображение информации из базы данных

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

    Извлечение наборов записей и отображение информации из базы данных

  • В главном меню в меню View (Вид) выполните команду Live Data (Оперативные данные).

    Как известно, для тестирования динамической страницы следует нажать клавишу (F12), после чего она загрузится в браузере. Но, помимо этого, существует удобная возможность наблюдать изменения на странице непосредственно из Dreamweaver. Речь идет о функции Live Data (Оперативные данные). Особенно она полезна при форматировании динамического содержимого, когда псевдокода Dreamweaver недостаточно для того, чтобы понять, как страница будет выглядеть в итоге.

    Извлечение наборов записей и отображение информации из базы данных
    увеличить изображение

    Если данные из базы отображаются в Dreamweaver, создание набора записей и использование функции Live Data прошло успешно. Текст должным образом отформатирован, поскольку в базу данных добавлялись и HTML-теги. При добавлении данных на страницу, браузер (или в данном случае Dreamweaver) правильно обработал и отобразил теги.

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

    Извлечение наборов записей и отображение информации из базы данных
    увеличить изображение

  • Снова в меню View (Вид) выполните команду Live Data (Оперативные данные), чтобы отключить эту функцию. Сохраните страницу index.asp и загрузите ее на сервер. Нажмите клавишу (F12), чтобы протестировать страницу в браузере.



  • Если на странице отображается то же, что и на рисунке, то система полностью настроена, и с этого момента речь пойдет исключительно о коде.

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

    Обзор базы данных Newland Tours

    DSN, SQL, ODBC, связи, таблицы, запросы, формы, отчеты, наборы записей – все это нужно знать, однако не следует волноваться, если поначалу такой объем информации не умещается в голове. До конца книги будет достаточно практики. Главное – понимать общую картину: данные хранятся в таблицах, сеть используется как интерфейс для чтения и записи данных в эти таблицы, а таблицы могут быть связаны друг с другом. А также надо учитывать, что связь между сетью и базой данных осуществляется посредством сочетания сценариев ASP, ColdFusion или PHP с SQL-кодом и информацией для подключения к базе данных (в случае с ASP и ColdFusion – применение ODBC, а в случае с PHP/MySQL – указание данных для подключения в самом коде).
    В этом упражнении приведен краткий обзор базы данных newland_tours, которая и будет управлять сайтом Newland Tours. Для начала более внимательно ознакомимся с возможностями программы Microsoft Access, поскольку с помощью ее интерфейса гораздо проще понять структуру и компоненты базы данных.
    Примечание. Хотя в MySQL отсутствует такой интерфейс, как в Access, структура базы и сами данные остаются такими же. Поэтому при использовании MySQL тоже следует прочитать этот раздел (но не выполнять шаги).
  • Только для пользователей ASP и ColdFusion. Полностью скопируйте папку Lesson08/Start/newland-asp/ в соответствующее место на сервере (подробнее см. ниже).
    Если ASP или ColdFusion применяются на локальном компьютере под управлением Windows XP, следует скопировать папку с базой данных в папку Shared Documents (Общие Документы), которая запускается через окно My Computer (Мой Компьютер). После размещения папки с базой данных в формате Access (newland_tours.mdb) в общие документы, ASP, ColdFusion и Dreamweaver получают доступ к базе данных.
    Если ASP или ColdFusion применяется на базе сервера IIS на локальном компьютере под управлением Windows 2000, необходимо скопировать папку с базой данных в каталог C:\Inetpub\wwwroot\newland. Как известно, все, что находится в папке wwwroot, находится на локальном веб-сервере и доступно по адресу localhost.

    Если ColdFusion используется в качестве автономного сервера на локальном компьютере под управлением Windows 2000, нужно поместить папку с базой данных в каталог C:\CFusionMX\wwwroot\newland.

    Если ASP и ColdFusion расположены на удаленном сервере в локальной сети или на сервере хостинг-провайдера, следует поместить файл newland_tours.mdb в место для баз данных, указанное администратором сервера. В данном случае все зависит от настроек сервера.

  • Если на компьютере установлена программа Access, откройте файл newland_tours.mdb, расположенный внутри скопированной на предыдущем шаге папки.

    Если приложение Access не установлено, достаточно просто прочесть текст и ознакомиться с представленными в этом уроке рисунками.

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

    Обзор базы данных Newland Tours

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

    В категории Tables (Таблицы) есть шесть таблиц и столько же форм в категории Forms (Формы). Остальные категории пусты.

    Обзор базы данных Newland Tours

  • Выберите категорию Tables (Таблицы) и дважды щелкните на каждой таблице, чтобы просмотреть содержимое.

    Некоторые таблицы включают гораздо больше данных, чем остальные. Самые объемные таблицы tbl_country и tbl_tours будут использованы для наполнения разделов "Country Profile" (содержащего данные по каждой стране) и "Find a Tour" (используемого для поиска нужных путешествий).

    Обзор базы данных Newland Tours
    увеличить изображение

    Таблица tbl_journal включает текст, используемый в разделе "Traveller’s Journal", расположенном на главной странице.

    Таблица tbl_agents имеет непривычный вид, поскольку в ней присутствуют только числа, а не имена, как можно было предположить. Причина заключается в том, что числа, в действительности, являются внешними ключами: пользователь – это userID из таблицы tbl_users, а область деятельности – regionID из таблицы tbl_region.


    Таблица tbl_user содержит информацию, используемую для аутентификации пользователей на сайте. После регистрации пользователя соответствующая ему информация помещается в таблицу. Следует обратить внимание, что в поле userGroup существует две категории: admin и visitor. Эти категории определяют, на какие страницы сайта имеет право заходить посетитель.

    Закройте окна таблиц, чтобы вернуться к основному экрану.

  • В категории Forms (Формы) поочередно откройте каждую форму и, перемещаясь между записями, просмотрите их содержимое.

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

    Обзор базы данных Newland Tours

  • Щелкните на кнопке Relationships (Схема данных), расположенной на панели инструментов.

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

    Обзор базы данных Newland Tours

  • Просмотрите связи между различными таблицами.

    В каждой таблице с помощью полужирного начертания выделен ее первичный ключ. Внешние и первичные ключи соединены линиями. При анализе связей становится понятно, почему в таблице tbl_agents содержались только числа. Таблица состоит из первичного ключа (agentID) и из двух внешних (user и specialty). Таблица tbl_journal не связана ни с одной таблицей. Наличие связей не является обязательным условием при формировании таблиц.

    Обзор базы данных Newland Tours
    увеличить изображение

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



  • На этом знакомство с действующей базой данных и краткий курс по Access будут закончены.

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

    Подключение к базе данных

    Итак, теории и созерцания достаточно, – пора заняться реальным делом и подключить базу данных к страницам сайта. Для этого пригодятся все полученные ранее знания и умения. Шаги будут отличаться в зависимости от способа подключения к серверу и применяемой серверной технологии (ASP, ColdFusion или PHP).
    Пользователи ASP и ColdFusion подключаются к базе данных в два этапа. Во-первых, требуется зарегистрировать на сервере имя источника данных (DSN), позволяющее использовать преимущества подключения к базе через ODBC. DSN служит указателем на базу данных. Во-вторых, необходимо настроить программу Dreamweaver, чтобы она видела DSN, и проверяла, могут ли сценарии на страницах получить с помощью DSN доступ к базе данных.
    В технологии PHP/MySQL не употребляются ODBC и DSN. Вместо этого информация, необходимая для подключения (расположение и имя базы данных, а также имя пользователя и пароль) указывается непосредственно в коде PHP. Dreamweaver предлагает указать эту информацию в диалоговом окне, а затем создает общий файл для подключения, к которому обращается каждый раз при создании страницы, ссылающейся на базу данных.
    Варианты настройки базы данных настолько отличаются, что вместо общего набора инструкций приводятся несколько разных.

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

    Пользователям ASP (локальное или удаленное использование IIS)

    Этот раздел предназначен для всех пользователей ASP вне зависимости от способа подключения к серверу.
    В представленных здесь материалах производится настройка Dreamweaver на подключение к существующему DSN. При работе с локальным сервером придется предварительно установить DSN (указания по установке также приводятся). Затем производится подключение к DSN.
    Пользователям ASP, подключающимся к удаленному серверу, системное имя DSN должен создать администратор сервера. За основу следует взять следующую информацию: в качестве DSN используем "newland". Кроме того, применим базу данных на основе Microsoft Access (с драйвером JET), которая расположена в папке newland/database. Поскольку папка с базой данных скопирована в этот каталог, администратор сервера имеет достаточно информации для создания DSN. К сожалению, до тех пор, пока DSN не будет создано, продолжить выполнение упражнения нельзя. После того, как все будет готово, следует подключить Dreamweaver к этому DNS, следуя шагам, описанным в разделе.
  • Откройте файл index.asp.
    При первом подключении не имеет значения, какая именно страница сайта открыта, так как Dreamweaver создает соединение для всего сайта. Выбор остановлен на странице index.asp, поскольку вскоре на нее будет добавлено динамическое содержимое.
  • Откройте панель Databases (Базы данных), расположенную в группе панелей Applications (Приложения). Щелкните на кнопке Connection (Подключение) ("+") и в раскрывшемся списке выберите пункт Data Source Name (DSN) (Имя источника данных [DSN]).
    Это действие откроет диалоговое окно Data Source Name (Имя источника данных), которое применяется для создания соединения сайта с базой данных.
    Пользователям ASP (локальное или удаленное использование IIS)

  • Пользователям, подключающимся к удаленному серверу, следует перейти к шагу 8. Только для пользователей, применяющих IIS на локальном компьютере: нажмите кнопку Define (Определить), чтобы начать процесс создания системного DSN.
    Откроется диалоговое окно ODBC Data Source Administrator (Администратор источника данных ODBC). Это диалоговое окно относится к Windows, а не к Dreamweaver, и оно доступно также в папке Control Panel (Панель управления).

    Пользователям ASP (локальное или удаленное использование IIS)

  • Щелкните на вкладке System DSN (Системный DSN).

    Для получения сетевого доступа к источнику данных следует добавить DSN, используя не вкладку User DSN (Пользовательский DSN), которая активирована по умолчанию, а вкладку System DSN.

    Пользователям ASP (локальное или удаленное использование IIS)

  • Нажмите кнопку Add (Добавить). В диалоговом окне Create New Data Source (Создать новый источник данных) выберите пункт Microsoft Access Drive (*.mdb) (Драйвер Microsoft Access [*.mdb]), после чего нажмите Finish (Готово).

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

    Пользователям ASP (локальное или удаленное использование IIS)

  • В диалоговом окне ODBC Microsoft Access Setup (Установка Microsoft Access) в поле Data Source Name (Имя источника данных) введите имя newland. Нажмите кнопку Select (Выбрать), а затем в диалоговом окне Select Database (Выбор базы данных) укажите файл newland_tours.mdb, который находится в папке C:\Documents and Settings\All Users\ Documents\database (Windows XP) или C:\Inetpub\wwwroot\newland\ database (Windows 2000).

    На этом шаге задается имя для DSN и указывается путь к базе данных.

    Пользователям ASP (локальное или удаленное использование IIS)

  • Трижды нажмите OK, чтобы закрыть окна и вернуться в диалоговое окно Data Source Name (Имя источника данных).

    После создания DSN следует вернуться в Dreamweaver и использовать DSN для подключения к источнику данных.

  • В группе выбора (внизу диалогового окна) выберите вариант Using DSN or testing server (Применение DSN или сервера тестирования), что приведет к удалению всего содержимого диалогового окна (но не повлияет на созданное DSN). В текстовое поле Connection name (Имя соединения) введите имя "conn_newland". В поле Data source name (DSN) (Имя источника данных [DSN]) введите имя "newland". Нажмите кнопку Test (Проверить), чтобы убедиться в том, что соединение работает, и нажмите OK.

    Заполнение этого диалогового окна предоставляет Dreamweaver достаточную информацию для подключения к базе данных посредством ODBC.

    Пользователям ASP (локальное или удаленное использование IIS)

    При закрытии диалогового окна Dreamweaver создаст на сайте папку Connections (Соединения), внутри которой будет помещен файл conn_newland.asp. Помимо этого, следует обратить внимание на панель Databases (Базы данных), в которой теперь отображается структура базы данных со всеми элементами.

    Пользователям ASP (локальное или удаленное использование IIS)

  • На панели Files (Файлы) выберите папку Connections (Соединения) и нажмите кнопку Put (Поместить), чтобы загрузить ее на сервер.

    Для создания набора записей и прикрепления данных на страницу следует перейти к упражнению "Извлечение наборов записей и отображение информации из базы данных".



  • Содержание Назад Вперед

    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)

    Этот раздел предназначен для всех пользователей ColdFusion вне зависимости от способа подключения к удаленному серверу.
    Пользователям ColdFusion, компьютеры которых подключены к удаленному серверу, потребуется, чтобы администратор сервера предоставил им пароль для доступа к службе RDS. Без RDS дальнейшее выполнение упражнений не представляется возможным.
  • Откройте файл index.cfm.
    При первом подключении не имеет значения, какая именно страница сайта открыта, так как Dreamweaver создает соединение для всего сайта. Выбор предоставлен на странице index.asp, поскольку в следующем упражнении на нее будет добавлено динамическое содержимое.
  • Откройте панель Databases (Базы данных), расположенную в группе панелей Applications (Приложения). Щелкните на ссылке Specify the RDS login for your ColdFusion server (Задать регистрационное имя RDS для сервера ColdFusion), введите пароль и нажмите OK.
    Пароль дает разработчикам права доступа к серверу ColdFusion, который необходим для определения и использования источников данных.
    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)

    Если на сервере ColdFusion уже существуют источники данных, к концу этого шага все они отобразятся на панели Databases (Базы данных).
    Единственная проблема заключается в том, что среди них нет базы данных Newland Tours.
  • Щелкните на ссылке Create a ColdFusion data source (Создать источник данных ColdFusion) (если она доступна) или нажмите кнопку Modify Data Sources (Изменить источники данных), расположенную в правой части панели Databases (Базы данных).
    Вне зависимости от того, использовалась кнопка или ссылка, в браузере на странице Data Sources (Источники базы данных), откроется приложение для администрирования ColdFusion. Теперь для доступа к приложению потребуется ввести пароль.
    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)
    увеличить изображение

  • В разделе Add New Data Source (Добавить новый источник данных) в качестве имени источника данных (поле Data Source Name [Имя источника данных] введите "newland". В раскрывающемся списке Driver (Драйвер) выберите пункт Microsoft Access. После этого нажмите Add (Добавить).

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

    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)

  • В появившемся окне Microsoft Access Data Source (Источник данных Microsoft Access) нажмите первую кнопку Browse Server (Сервер просмотра) и выберите файл newland_tours.mdb, расположенный на сайте. По окончании нажмите кнопку Submit.

    Пользователям Windows XP следует перейти в папку C:\Documents and Settings\All Users\Documents\database\. Это путь к папке, на которую ссылается ярлык Shared Documents (Общие документы).

    Пользователям Windows 2000, использующим автономную версию ColdFusion, следует перейти в папку C:\CFusionMX\wwwroot\newland\ database\.Пользователям Windows 2000, применяющим ColdFusion совместно с IIS, надо перейти в папку C:\Inetpub\wwwroot\newland\database\.

    На этом шаге ColdFusion получает информацию, необходимую для подключения к базе данных.

    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)

  • Закройте веб-страницу ColdFusion Data Sources (Источники данных ColdFusion), чтобы вернуться в Dreamweaver. На панели Databases (Базы данных) щелкните на кнопке Refresh (Обновить), расположенной рядом с кнопкой Modify Data Sources (Изменить источники данных), которая использовалась ранее. В списке появится имя newland. Щелкните на значке со знаком "+" рядом с именем, чтобы развернуть и просмотреть список с источниками данных.

    Пользователям ColdFusion (локальное или удаленное применение ColdFusion)

    Если на панели отображается содержимое базы данных newland_tours.mdb, это означает, что программа Dreamweaver успешно завершила соединение с базой данных. Пора создать набор записей и прикрепить к коду страницы данные из базы.

    Для этого следует перейти к разделу "Извлечение наборов записей и отображение информации из базы данных".



  • Содержание Назад Вперед

    Пользователям PHP (локальное или удаленное применение PHP/MySQL)

    Поскольку в PHP не используются ODBS и DSN, то вся информация для доступа к MySQL задается непосредственно в Dreamweaver.
  • Откройте файл index.php.
    Поскольку соединение будет доступно для всех страниц сайта, не имеет значения, какой файл открыт при его создании. Однако для создания соединения с MySQL должен быть открыт как минимум один файл.
  • На панели Databases (Базы данных) щелкните на кнопке "+" и выберите пункт MySQL Connection (Соединение MySQL), чтобы создать новое соединение с MySQL.
    Откроется диалоговое окно MySQL Connection.
  • Чтобы программа Dreamweaver реализовала доступ страниц сайта к источнику данных MySQL, задайте название для подключения.
    Connection name: conn_newland.
    MySQL server: localhost (в случае применения локального сервера) или имя, данное администратором сервера (в случае разработки на удаленном сервере).
    User name и Password – имя пользователя и пароль для доступа к учетной записи MySQL.
    Пользователям PHP (локальное или удаленное применение PHP/MySQL)

    Database: newland_tours.
    В случае разработки на удаленном сервере данные доступа к MySQL может сообщить только администратор сервера. При использовании локального сервера следует просто указать информацию, заданную при установке MySQL. Если MySQL установлена на локальном компьютере, а пароль от нее утерян, следует попробовать ввести в качестве имени пользователя root, а поле для пароля оставить незаполненным.
    Совет. Для того, чтобы убедиться в том, что Dreamweaver действительно подключается к базе данных, следует нажать кнопку Test (Проверить).
  • Нажмите OK.
    Dreamweaver создаст на сайте папку Connections, а внутри нее — файл conn_newland.php. В нем содержится информация, необходимая страницам для доступа к MySQL. При каждом обращении сценария PHP к базе данных Dreamweaver использует этот файл.
  • В списке на панели Databases (Базы данных) раскройте все данные для соединения conn_newland, чтобы в Dreamweaver просмотреть структуру базы данных newland_tours.
    Dreamweaver действительно получает доступ к базе данных, расположенной внутри MySQL, и предоставляет информацию о ней. Помимо этого, программа предоставляет ограниченные возможности для управления MySQL.
    Пользователям PHP (локальное или удаленное применение PHP/MySQL)

  • На панели Files (Файлы) щелкните на папке Connections, а затем нажмите кнопку Put (Поместить), чтобы загрузить ее на сервер.
    Соединение PHP/MySQL не будет работать до тех пор, пока папка не загрузится на сервер.


  • Содержание Назад Вперед

    Связи между таблицами

    В основе современных баз данных лежит понятие связей (relationships). Они позволяют разработчикам связывать несколько таблиц в базе посредством общих данных. При помощи взаимосвязей разработчики баз данных моделируют таблицы, отражающие взаимодействие объектов в реальности и позволяющие эффективно обновлять данные даже по прошествии длительного времени. На диске содержится готовый файл базы данных, который и будет использоваться в книге. Он тоже включает много связей между таблицами. При выполнении упражнений создавать дополнительные связи не потребуется, однако нередко придется извлекать и использовать данные сразу из нескольких таблиц. Без понимания роли связей в базах данных этого сделать невозможно.
    Связи не относятся к какой-то конкретной системе управления базами данных, это обязательный компонент не только для Access и MySQL, но и для любой базы данных и, в частности используются при веб-разработке, например, Microsoft SQL Server, Oracle или PostgreSQL.
    Понять принцип работы связей проще всего на примере. Для хранения информации о продажах компании применяется электронная таблица Excel. Каждая операция должна храниться в отдельной строке, поэтому электронная таблица содержит следующие столбцы:
    f_name l_name str_add city state/prov country postal cred_card subtotal tax total

    Со временем в таблице накапливаются сотни записей. Многие из них соответствуют покупкам, совершенным одними и теми же клиентами. Проблема состоит в том, что при совершении повторной покупки информация об адресе клиента снова сохраняется. Со временем некоторые клиенты переезжают. Их новые адреса вводятся в электронную таблицу, но во всех прошлых записях остается прежний адрес. Существует вероятность, что рано или поздно кто-то случайно использует для отправки товара неверный адрес. Обновление адресов становится довольно непростой задачей из-за их невероятного количества. К сожалению, в Excel нет средств, позволяющих устранить эту проблему.
    При формировании базы данных логичнее отделить все записи о клиентах от записей, относящихся к совершенным ими покупкам. В этом случае в одной таблице будут отслеживаться покупки, а в другой – храниться информация о клиентах. В таблице клиентов каждому будет соответствовать только одна запись. При переезде клиента потребуется обновить только одну соответствующую ему запись, а не все записи о его покупках. В таблице, содержащей записи о покупках, вместо перечисления всей информации о покупателе будет указан уникальный идентификатор, соответствующий определенной записи в таблице клиентов. Такой тип связи между таблицами позволяет создавать базы данных.
    Примечание. В электронных магазинах и компаниях, распространяющих товар по каталогам, используются идентификаторы для товара или покупателей. Эти идентификаторы являются уникальными номерами в базе данных компании, соответствующими конкретному покупателю или товару.

    На этот раз таблица клиентов будет выглядеть следующим образом:

    cust_ID F_name l_name str_addcitystate/provpostalcredit_card
    Таблица операций будет выглядеть так:

    transaction_IDcust_IDsubtotal tax total
    Обе таблицы содержат поле cust_ID. В таблице клиентов поле cust_ID включает уникальные идентификаторы, называемые также первичными ключами (primary key). У каждой записи в таблице всегда существует свой идентификатор, который не повторяется. В таблице могут оказаться два клиента с одним именем, например, Джон Смит, или два одинаковых почтовых индекса 90210. Но благодаря тому, что каждой строке присваивается первичный ключ cust_ID, в таблице обеспечен порядок, предполагающий корректное обновление, удаление и добавление данных.

    В таблице покупок одно и то же значение cust_ID, напротив, может повторяться больше одного раза — в зависимости от того, сколько покупок совершил тот или иной клиент. Когда первичный ключ одной таблицы применяется в качестве поля другой, он называется внешним ключом (foreign key). При использовании внешних ключей между таблицами образуются связи (relationships). Они позволяют избавиться от избыточной (дублирующей) информации и сохранить целостность данных.

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

    На приведенном ниже рисунке показана взаимосвязь между двумя таблицами, описанными в этом примере. Линия между таблицами обозначает существование между ними связи. Число 1, расположенное слева, означает, что в таблице tbl_customers параметр cust_ID является уникальным, а знак бесконечности, находящийся справа, указывает, что в таблице tbl_transactions одно и то же значение параметра cust_ID может повторяться сколько угодно. Это взаимосвязь относится к типу связи с отношением "один-ко-многим".

    Связи между таблицами

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

    Совет. Файл с приведенным примером базы данных можно найти на компакт-диске в папке Lesson08/Start/transaction.mdb. Файл сохранен в формате Microsoft Access.

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

    Ускоренный курс по базам данных

    При работе с книгой, целью которой является активное обучение на основе выполнения практических упражнений, требуется действовать достаточно оперативно, – поэтому длинных абстрактных рассуждений в уроке нет. Но без уверенного знания баз данных далеко в разработке динамических веб-сайтов продвинуться не получится (хотя и экспертом быть тоже не обязательно). В этом разделе описываются основные принципы и терминология баз данных. В качестве примера задействовано офисное приложение Microsoft Access. Компоновка данных в MySQL (включая и сами данные) не отличается от Access. Однако пользовательский интерфейс в Access несколько удобнее, – так что все примеры заимствованы из этой программы. Прежде чем приступить к разработке динамических веб-сайтов, настоятельно рекомендуется потратить время на приобретение ценного опыта работы с базами данных. Для начала будет достаточно этого раздела.
    Хотя внешний вид MySQL заметно отличается от Access, основные принципы остаются прежними. Некоторые из указанных ниже возможностей доступны только в Access и не имеют аналогов в MySQL. Об этом будет сказано отдельно.

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

    Установка базы данных Newland Tours на удаленный сервер

    К сожалению, для установки базы данных Newland Tours на удаленном сервере не существует универсального рецепта. Все зависит от особенностей сервера, поэтому за информацией о деталях установки следует обращаться к хостинг-провайдеру.
    На многих серверах под управлением Linux существует возможность работать с базами данных удаленно при помощи сетевого интерфейса phpMyAdmin. phpMyAdmin обеспечивает отображение все базы данных, к которым имеет доступ учетная запись. Интерфейс позволяет просматривать данные в базах, показывает SQL-код, использованный при генерации каждой таблицы, а также предоставляет набор функций облегчающих добавление новых таблиц, изменение существующих и даже удаление таблиц и целых баз данных. Ниже приведен пример интерфейса phpMyAdmin.
    Установка базы данных Newland Tours на удаленный сервер
    увеличить изображение

    Одно из преимуществ phpMyAdmin заключается в том, что он позволяет создавать таблицы с помощью SQL-кода, содержащегося в отдельном текстовом файле. Эта возможность полезна при установке базы данных newland_tours на удаленный сервер с интерфейсом phpMyAdmin. Перед тем, как это сделать потребуется скопировать на жесткий диск компьютера файл newland_tours.sql из папки Lesson08/Start на компакт-диске. После этого следует открыть файл и удалить следующие две строки кода:
    CREATE DATABASE newland_tours; USE newland_tours;
    Теперь первая строка должна начинаться с кода DROP TABLE IF EXISTS.
    Поскольку база данных создается напрямую в phpMyAdmin, эти две строки кода не нужны.
    После подготовки файла следует установить базу данных через phpMyAdmin. После ввода имени и пароля нужно задействовать интерфейс и создать новую базу данных newland_tours. При необходимости, следует открыть эту базу данных в phpMyAdmin, щелкнув на ссылке. Далее нужно щелкнуть на вкладке SQL, после чего внизу страницы нажать кнопку Choose File (Выбрать файл) и найти файл newland_tours.sql, расположенный в папке Lesson08/Start на компакт-диске. После подтверждения выбранного файла начнется наполнение базы данных.
    Примечание. При использовании MySQL на локальном компьютере phpMyAdmin можно бесплатно загрузить по адресу http://www.phpmyadmin.net.

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

    Установка и запуск MySQL для Mac OS X

    Процесс установки MySQL для машин с Mac OS X гораздо проще, поскольку программы для инсталляции уже доступны. Однако для запуска базы данных потребуется ввести немного кода в командную строку окна Terminal.
  • Перейдите на сайт http://www.mysql.com и загрузите установочный файл для Macintosh OS X.2.
    Файл будет сохранен на рабочем столе и автоматически распакован.
  • Дважды щелкните на значке mysql-standard-4.0.14.
    Версия может отличаться.
  • В окне Finder дважды щелкните на файле mysql-standard-[версия].pkg, чтобы начать установку.
    Файлы устанавливаются в папку /usr/local/mysql-[версия], но при этом создается символьная ссылка (или ярлык), позволяющая получить доступ к MySQL из папки /usr/local/mysql/. Файлы, используемые для запуска и поддержки MySQL, содержатся в подкаталоге bin.
    Установка и запуск MySQL для Mac OS X

  • Продолжайте перемещение между экранами в окне Мастера до тех пор, пока программа не будет установлена.
    Для перемещения достаточно подтверждать значения, заданные по умолчанию, а после установки следует запустить MySQL.
    Установка и запуск MySQL для Mac OS X

  • Для запуска MySQL откройте окно Terminal (Applications/Utilities/Terminal).
    До тех пор, пока для MySQL не будет установлен интерфейс, взаимодействовать с программой придется посредством командной строки.
  • Войдите в систему как привилегированный пользователь. Для этого введите "su", нажмите (Return), а затем введите пароль.
    Для запуска MySQL требуется иметь неограниченные права доступа привилегированного пользователя. Для этого шага необходимы навыки работы с реализацией системы Unix в Mac OS X.
  • Для перехода в каталог MySQL введите "cd /usr/local/mysql".
    Если ввести команду ls, на экране отобразится список всех файлов и папок, расположенных в текущем каталоге.
  • Для запуска MySQL введите bin/mysqld_safe &.
    Установка и запуск MySQL для Mac OS X

    Команда mysqld_safe & применяется для запуска процесса (демона) MySQL в фоновом режиме. Если она не сработает, следует ввести ./bin/mysqld_safe &. Если не сработает и этот вариант, следует ввести cd bin/, чтобы перейти в каталог bin, а после этого ввести mysqld_safe & or ./mysqld_safe &.

    Если описанные выше действия производились привилегированным пользователем, MySQL запустится. MySQL отключается при выходе из системы, а также выключении или перезапуске компьютера. Чтобы запустить ее, придется снова зайти в Terminal, войти в качестве привилегированного пользователя и перейти в папку usr/local/mysql, после чего из каталога bin выполнить команду mysqld_safe &.

    Примечание. Чтобы при каждом входе в систему команда выполнялась автоматически, нередко используются простые сценарии. При быстром поиске в сети будет найдено немалое количество примеров.
  • Скопируйте файл newland_tours.sql из папки Lesson08/Start на компакт-диске на рабочий стол.

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

  • В окне Terminal запустите командную строку mysql. Для этого перейдите в каталог mysql (/usr/local/mysql), введите приведенную ниже команду и нажмите (Return). После этого введите пароль и снова нажмите (Return).

    Установка и запуск MySQL для Mac OS X

    ./bin/mysql -p

    В результате, появится командная строка mysql>.

    Установка и запуск MySQL для Mac OS X

  • Введите в командную строку source /Users/[имя_пользователя]/Desktop/newland_tours.sql и нажмите (Enter).

    Установка и запуск MySQL для Mac OS X

    Параметр [имя пользователя] следует заменить конкретным именем. Также важно помнить, что система UNIX чувствительна к регистру.

    Команда source применяется для запуска одной или нескольких команд SQL, хранящихся в отдельном документе. Если открыть файл newland_ tours.sql в текстовом редакторе, отобразится весь код, необходимый для того, чтобы создать базу данных, начать использование базы, предоставить инструкции для создания всех шести таблиц и, наконец, заполнить каждую таблицу данными.

    После нажатия (Enter) MySQL начнет работу. На экране появятся десятки сообщений об успешном завершении операции, которые будет перемещаться до тех пор, пока программа не дойдет до конца.

    Установка и запуск MySQL для Mac OS X



  • База данных newland_tours установлена и запущена в MySQL. Пора переходить к разделу "Обзор базы данных Newland Tours".

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

    Установка и запуск MySQL для Windows

    Самый простой способ запустить MySQL для машин с Windows – это загрузить и запустить инсталлятор MySQL. После установки программы MySQL требуется просто запустить ее и начать пользоваться.
  • Зайдите на сайт http://www.mysql.com, перейдите на страницу downloads и загрузите инсталлятор для Windows на жесткий диск.
    В случае необходимости следует распаковать заархивированный файл в папку на жестком диске.
  • Дважды щелкните на файле setup.exe, чтобы запустить процесс установки. Для этого используйте путь, заданный по умолчанию, C:\mysql.
    Для установки можно указать и другую папку, однако при этом придется создать конфигурационный файл, указывающий на выбранную папку. Если выбрано значение, заданное по умолчанию, конфигурационный файл создавать не требуется.
    Установка и запуск MySQL для Windows

  • Продолжайте процесс установки, оставляя все параметры, заданные по умолчанию, без изменения.
    После инсталляции будет установлен интерфейс phpmyadmin. Однако он еще не запущен. Для машин с Windows MySQL запускается в качестве службы. Для активации службы применяется утилита WinMySqlAdmin.
  • В менеджере файлов перейдите по адресу c:\mysql\bin.
    В этой папке содержатся приложения, связанные с MySQL, в том числе и WinMySQLAdmin.
    Установка и запуск MySQL для Windows

  • Дважды щелкните на файле winmysqladmin.exe.
    Появится окно с запросом имени пользователя и пароля.
    После введения этой информации WinMySQLAdmin запустит MySQL как одну из служб Windows. На панель задач будет помещен значок с изображением светофора. Если горит зеленый свет, то это значит, что служба запущена.
    Установка и запуск MySQL для Windows
    увеличить изображение

    Если щелкнуть на значке правой кнопкой мыши и в контекстном меню выбрать пункт Show Me (Покажите мне), появится панель управления WinMySqlAdmin, в которой есть информация о MySQL, а также различные настройки.
    После установки и запуска MySQL следует создать и заполнить базу данных Newland Tours, после чего начать использовать ее для разработки сайта.
  • Скопируйте файл newland_tours.sql из папки Lesson08/Start в папку C:\mysql.
    Точное расположение файла не имеет особого значения, однако вскоре потребуется ввести путь к этому файлу, поэтому лучше скопировать его в доступную папку.
  • В менеджере файлов перейдите в папку C:\mysql\bin и дважды щелкните на файле mysql.exe.

    Появится командная строка mysql>.

  • Чтобы создать базу данных newland_tours введите в командной строке mysql> приведенный ниже код и нажмите (Enter).

    source C:\mysql\newland_tours.sql

    Установка и запуск MySQL для Windows
    увеличить изображение

    Команда source применяется для запуска одной или нескольких команд SQL, хранящихся в отдельном документе. Если открыть файл newland_ tours.sql в текстовом редакторе, отобразится весь код, необходимый для того, чтобы создать базу данных и использовать ее, а также предоставить инструкции для создания всех шести таблиц и, наконец, заполнить каждую таблицу данными.

    После нажатия (Enter) MySQL начнет работу. На экране появятся десятки сообщений об успешном завершении операции, которые будет перемещаться до тех пор, пока программа не завершит свою работу до конца.

    Установка и запуск MySQL для Windows
    увеличить изображение



  • База данных newland_tours установлена и запущена в MySQL. Теперь пора переходить к разделу "Обзор базы данных Newland Tours".

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

    Установка и запуск MySQL

    Этот раздел предназначен только для тех, кто применяет локальную версию PHP как для Windows, так и для Mac OS X. При использовании ASP или ColdFusion (как локально, так и удаленно) или при использовании PHP на удаленном сервере (например, через Intranet или FTP), нужно перейти к следующему разделу "Обзор базы данных Newland Tours".
    Процесс установки MySQL для компьютеров с Windows отличается от установки на машинах с Mac OS, поэтому для каждой операционной системы написан отдельный раздел.

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

    Введение в объекты баз данных

    Проще говоря, база данных – это система для хранения данных. Но сегодня под понятием "база данных", как правило, подразумевается гораздо больше, разумеется, если речь идет о Microsoft Access, MySQL или более мощных системах промышленного уровня, таких как Microsoft SQL Server или Oracle. Каждая из них является системой управления реляционными базами данных или реляционной СУБД (Relational Database Management System – RDBMS). Модель реляционной СУБД была разработана в 70-80 годы XX века, чтобы администраторы баз данных могли хранить данные с учетом взаимосвязи различных типов данных. О принципе взаимосвязи еще будет рассказано, но прежде следует изучить объекты, из которых состоят базы данных.
    Данные базы хранятся в таблицах (tables). На первый взгляд, эти таблицы подобны электронным таблицам Excel, поскольку они тоже состоят из строк и столбцов. Столбцы называются полями (fields) и содержат определенную категорию информации. Строки именуются записями (records). В одной строке хранится один набор информации, содержащий по одному элементу данных на каждое поле. Например, в таблице tbl_customers содержатся поля для имени, адреса, города, штата, почтового индекса, номера телефона и т.д. Для каждого клиента будет создана отдельная запись.
    На приведенном рисунке представлена таблица из базы данных Newland Tours, открытая в программе Access. В таблице содержится основная информация о странах. В поле countryName перечислены названия стран. В остальных полях приведены другие данные для каждой страны, при этом каждое поле включает определенный тип данных. Для редактирования таблиц достаточно щелкнуть на нужной ячейке и изменить ее содержимое нужным образом, однако удобнее использовать интерфейс, например, формы в программе Access или веб-формы.
    Введение в объекты баз данных
    увеличить изображение

    Таблицы –не единственный тип объектов, из которых состоят базы данных. Помимо таблиц, существуют формы, отчеты и запросы. Формы (forms) применяются для добавления новых данных и изменения уже существующих. Форма для создания таблицы с информацией о странах, показанной в предыдущем примере, приводится на следующем рисунке. Формы облегчают добавление и редактирование информации, а также позволяют изменять тип введенных данных, что помогает поддерживать их однородность. Внизу формы расположены кнопки навигации. Они используются для доступа к записи, в которую требуется внести изменения, или для создания новой записи с нуля.
    Примечание. В MySQL нет графического интерфейса, команды передаются в MySQL посредством командной строки. Существует возможность установить графический интерфейс для MySQL, например, phpmyadmin. Однако ни один из интерфейсов MySQL не сравнится по функциональности и сложности с интерфейсом Access. Скорее всего, с хранением данных и обеспечением доступа к ним MySQL справляется лучше, чем Microsoft Access, однако интерфейс MySQL в лучшем случае можно назвать минималистским.

    Точно так же, как формы связаны с вводом данных в таблицы, отчеты (reports) связаны с их выводом. Ознакомиться со всей информацией, хранящейся в таблице, невозможно по той причине, что текст не умещается в полях целиком. Для отображения данных в удобном для чтения виде используются отчеты. Существует возможность включать в отчет не все данные, а только некоторые, что значительно повышает удобство использования отчетов (см. рис. вверху следующей страницы).
    Введение в объекты баз данных

    Для вывода в отчеты определенных данных применяются запросы (queries). Использование запросов похоже на процесс поиска, – задаются конкретные критерии отбора, на основе которых база данных формирует и возвращает отчет. Например, если отправить в базу данных Newland Tours запрос на страны, начинающиеся на букву "T", будет возвращен отчет о Тайване и Таиланде –Taiwan и Thailand. Запросы записываются на языке SQL (Structured Query Language — язык структурированных запросов). Начиная с этого урока, в упражнениях, в значительно мере, будет использован язык SQL, поскольку для извлечения данных из базы и их дальнейшей передачи на веб-страницы (в том числе, для ASP, ColdFusion или PHP) применяется именно этот язык. SQL является основным средством для взаимодействия разработчиков с базами данных. Визуальный SQL-редактор содержится в Access, но в Dreamweaver его использовать нельзя. В Dreamweaver есть собственный SQL-редактор, который также позволяет кодировать SQL-запросы вручную.
    Введение в объекты баз данных
    увеличить изображение

    Знание SQL для разработчиков динамических веб-приложений является обязательным. О многом рассказывается в этой книге, но в качестве простого и исчерпывающего введения в SQL рекомендуется книга SQL: Visual Quick Start Guide (Peachpit Press) (SQL: визуальное руководство для быстрого старта).
    Фрагмент SQL-кода, приведенный на рисунке, извлекает все записи из полей countryName (Название_страны), population (Численность населения), country_currency (Денежная единица_страны) и description (описание), содержащихся в таблице tbl_country.
    Введение в объекты баз данных

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

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

    Добавление динамических данных в сценарий расчета

    До этого момента (дважды), данные из базы помещались напрямую в HTML-код. В первый раз на главную страницу index.asp выводилась запись "Traveler’s Journal", а во второй — в качестве элементов списка формы были указаны пары значений tourName-tourID. Стоимость туров для взрослых и для детей следует не отображать на странице, а вставлять в сценарий расчета. В код сценария данные добавляются тем же способом, что и в XHTML.
    Но вначале необходимо добавить на страницу еще код для вывода названия путешествия, для которого рассчитывалась стоимость – на случай, если посетитель забудет о сделанном выборе или, напротив, пожелает выбрать другой тур.
  • В документе tourprice_processor.asp переключитесь в режим Design (Дизайн). После слова "tour" в первом предложении введите следующие символы: ", XX,". На панели Property Inspector (Инспектор свойств) выделите знаки XX с помощью полужирного начертания.
    Снова символ "X" применяется для замены текста. Достоинство использования заменителя текста заключается в возможности форматировать его так, как должно выглядеть динамическое содержимое (в данном случае – выделение посредством полужирного начертания).
    Добавление динамических данных в сценарий расчета

  • Выделите знаки XX. В категории Application (Приложение) на панели Insert (Вставка) щелкните на кнопке Dynamic Data (Динамические данные) и в раскрывающемся списке выберите опцию Dynamic Text (Динамический текст).
    Вкладка Application (Приложение) применяется для добавления общих динамических элементов, например, динамического текста.
    Добавление динамических данных в сценарий расчета

  • В диалоговом окне Dynamic Text (Динамический текст) разверните список Recordset (rs_tourprices_filtered) и выберите пункт tourName. Нажмите OK.
    Добавление динамических данных в сценарий расчета

    Выполненное действие аналогично перетаскиванию переменной из панели Bindings (Привязки) на страницу. В область кода будет добавлен еще один фрагмент кода.
    При использовании ASP вместо символов XX будет добавлен следующий код:
    <%=(rs_tourprices_filtered.Fields.Item("tourName").Value)%>.
    Как известно из предыдущих уроков, <%= (в отличие от <%) означает <% Response.Write, – теперь код предназначен для вывода данных. Остальной код позволяет догадаться, что выводится значение поля tourName из набора отфильтрованных записей rs_tourprices_filtered.

    При использовании ColdFusion появится такой код:

    #rs_tourprices_filtered.tourName#

    Тег эквивалентен функции ASP Response.Write(), а выводит он определенное значение в поле tourName, хранящееся в отфильтрованном наборе записей rs_tourprices_filtered.

    При использовании PHP код будет следующим:



    Команда echo выполняет те же действия, что и Response.Write() (ASP) или (ColdFusion). Так же, как в случае ASP и ColdFusion, этот код выводит значение в поле tourName, хранящееся в наборе записей rs_tourprices_filtered.

    Важно просмотреть и понять этот код, поскольку на следующем шаге придется создать код вручную.

  • В режиме Code (Код) найдите сценарий расчета. Удалите строку, устанавливающую значение переменной basePrice равным значению переменной tourName.

    В ASP код, который следует удалить, выглядит следующим образом: basePrice=Request.Form("tourName"). Находится он в строке 34.

    В ColdFusion код выглядит так: . Он размещен в строке 14.

    В PHP код выглядит таким образом: $basePrice = $_POST['tourName']; и расположен в строке 12.

    Эта строка больше не нужна, поскольку теперь стоимость тура передается не из формы, а из базы данных. Вдобавок требуется использовать два вида цен: для взрослых и для детей.

    Добавление динамических данных в сценарий расчета
    увеличить изображение

  • Добавьте две новые строки кода, в которых задается значение двух новых переменных: basePriceAdult и basePriceChild.

    Добавление динамических данных в сценарий расчета

    Для ASP:

    basePriceAdult=rs_tourprices_filtered.Fields.Item("basePriceAdult").Value basePriceChild=rs_tourprices_filtered.Fields.Item("basePriceChild").Value

    Для ColdFusion:



    Для PHP:

    $basePriceAdult = $row_rs_tourprices_filtered['basePriceAdult']; $basePriceChild = $row_rs_tourprices_filtered['basePriceChild'];


    Все три участка кода создают две новые переменные и устанавливают их значения равными соответствующей стоимости тура (извлеченной из базы данных) для взрослых и для детей.

  • Только пользователям ASP. Удалите из строки с объявлением переменных (начинается с ключевого слова Dim) переменную basePrice и добавьте новые переменные basePriceAdult и basePriceChild.

    Поскольку в ASP требуется явно объявлять любую переменную, важно обновлять этот список при каждом создании или удалении переменных.

  • В строке, содержащей выражение для расчета стоимости тура, замените переменные basePrice на новые.

    Для ASP:

    tourPrice = (numAdult * basePriceAdult) + (numChild * basePriceChild)

    Для ColdFusion:



    Для PHP:

    $tourPrice = ($numAdult * $basePriceAdult) + ($numChild * $basePriceChild);

    Теперь выражение для расчета стоимости туров включает значения, извлекаемые из базы данных.

    Добавление динамических данных в сценарий расчета

  • Сохраните страницу tourprice_processor.asp и загрузите ее на сервер. На панели Site (Сайт) выберите файл tourprice.asp и нажмите клавишу (F12) для тестирования приложения.



  • Приложение работает как запланировано. На основе введенной пользователем информации выводится правильная стоимость. Самое лучшее, что для поддержки приложения достаточно обновлять данные в базе данных. Если будет повышена стоимость туров и в базу будет добавлено новое значение, то это немедленно будет учтено и в сценарии расчета. Точно так же приложение будет корректно работать и при удалении существующих или добавлении новых туров.

    Добавление динамических данных в сценарий расчета
    увеличить изображение

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

    Добавление к коду комментариев

    Чтобы приложения для расчета стоимости заработало должным образом, было добавлено совсем немного кода. Результаты проведенной работы отображаются на всех веб-страницах. Например, в моем варианте страницы tourprice_processor.asp содержимое XHTML-документа начинается только на строке 39, а остальное место занимают ASP-сценарии. При использовании ColdFusion XHTML-документ начинается в строке 18. По большей части в этом коде содержатся те же сценарии, выполняющие те же функции, – просто код ColdFusion занимает гораздо меньше места. PHP располагается где-то между ними, – контент XHTML-документа начинается со строки 28.
    Если просмотреть код страниц tourprice.asp и tourprice_processor.asp до верхней строки, можно объяснить все сценарии, расположенные в нем (в случае с ASP и PHP существует одно исключение, о котором позже будет рассказано). Сценарии будут понятными не только потому, что вы приобрели опыт их написания, но и потому, что упражнения выполнялись недавно, и в голове остались свежие воспоминания о сценариях. Но если вернуться к ним хотя бы через несколько месяцев или показать кому-нибудь в первый раз, то понять, для чего нужен тот или иной участок кода, будет не очень просто.
    Это довольно серьезная проблема, поскольку подобные документы нередко используются в течение нескольких лет, и разработчики успевают позабыть об их содержимом. Именно поэтому важно документировать код сценариев, чтобы он был понятен – как для вас, так и для тех, кто будет заниматься сайтом впоследствии.
    Код документируется при помощи комментария – поясняющего текста, который добавляется в код и позволяет понять его назначение. Интерпретаторами, обрабатывающими код, комментарии игнорируются. В этом упражнении в коде страниц tourprice.asp и tourprice_processor.asp будут добавлены комментарии.
  • Откройте документ tourprice.asp. Добавьте комментарий над кодом запроса.
    Для ASP следует добавить строку ниже открывающего тега <% в самом начале кода (до объявления переменной Dim rs_tourprices) и ввести в нее следующий комментарий, поясняющий, что создается набор записей на основе названий и идентификаторов туров из таблицы tbl_tours в базе данных. Кроме того, в этом комментарии объясняется, что данные используются в дальнейшем для заполнения раскрывающегося списка в форме:
    ' Creates a recordset of all the tour names and IDs from the tbl_tours table in the database/ the data is used later to populate the form drop-down menu.

    Для ColdFusion вверху документа следует ввести следующее:



    Для PHP перед строкой, расположенной строке 3 и начинающейся с кода my_sql_select_db, следует ввести комментарий:

    // Creates a recordset of all the tour names and IDs from the tbl_tours table in the database/ the data is used later to populate the form drop-down menu.

    Во всех трех языках комментарии обозначаются особым образом. В языке VBScript (ASP) применяется одинарная кавычка (‘). Все, что расположено между этой кавычкой и концом строки, считается комментарием и игнорируется интерпретатором. В ColdFusion комментарий заключается в специальные теги. Они подобны тегам комментариев в HTML, за исключением того, что в HTML используются два дефиса, а в ColdFusion – три. Комментарий ColdFusion может включать несколько строк. В PHP однострочные комментарии могут обозначаться двумя косыми чертами (//) или знаком # в начале строки. Для создания многострочных комментариев в PHP применяется следующая синтаксическая конструкция: /* комментарий */.

    Поскольку комментарии пишутся с учетом синтаксиса языка, используемого на сервере (VBScript, ColdFusion Markup Language или PHP), а не по правилам синтаксиса HTML, они удаляются из документа перед отправкой страницы клиенту. Это означает, что документировать код можно произвольным образом и при этом не волноваться, что комментарии увидят посетители.

    Добавление к коду комментариев
    увеличить изображение

  • Сохраните и закройте tourprice.asp, а потом откройте tourprice_ processor.asp.

    Большинство сценариев, используемых при работе приложения, содержатся в документе tourprice_processor.

  • Только пользователям ASP и PHP. К первому участку кода после объявления <%LANGUAGE (только ASP) и к участкам

    A small script generated by Dreamweaver to help with the dynamic query

    Комментарии ASP и PHP всегда должны находиться, соответственно внутри тегов <% %> и .

    Этот сценарий не упоминался в упражнениях, поскольку Dream-weaver автоматически добавил его при создании динамического запроса (а точнее, в момент создания критерия для фильтрации данных: tourID = form variable tourName). Этот комментарий поясняет, для чего предназначен участок кода и каким образом он попал на страницу.

    В ColdFusion этот сценарий отсутствует, поскольку он реализован несколько иным (и более простым) способом.

    Добавление к коду комментариев

  • Отыщите сценарий, создающий набор записей, и добавьте к нему следующий комментарий "Queries the database for the tour name, adult price, and child price; data is filtered so that the only record retrieved corresponds to what the user entered the form". (В этом комментарии поясняется, что в базу данных направлен запрос на поиск названия тура, а также его стоимости для взрослых и для детей. Данные фильтруются таким образом, чтобы только одна извлеченная запись соответствовала значению, указанному пользователем в форме.)

    В ASP сценарий запроса начинается с объявления используемых в нем переменных: Dim rs_tourprices_filtered.

    В ColdFusion сценарий запроса найти довольно легко, поскольку он размещен внутри тегов .

    В PHP сценарий начинается со строки mysql_select_db.

    Следует помнить о применении правильного синтаксиса при вставке комментариев.

    Добавление к коду комментариев
    увеличить изображение

  • Найдите сценарий для проверки правильности заполнения формы и добавьте следующий комментарий "Form validation script; redirects user back to tourprice.asp if form fields do not have numeric values". (В комментарии поясняется, что данный участок кода является сценарием, проверяющим правильность заполнения формы. Помимо этого указывается, что после выполнения сценария посетитель вернется обратно на страницу tourprice.asp, если поля формы не будут содержать числовых значений)


    В ASP этот сценарий начинается с кода If Not IsNumeric. В ColdFusion – с кода
    Добавление к коду комментариев
    увеличить изображение

  • Найдите сценарий для расчета стоимости путешествий и добавьте следующий комментарий "Collects data for number of adults and children, and the prices for both adults and children; multiplies data to calculate total". (В комментарии указывается, что после выполнения сценария будут получены данные о количестве взрослых и детей, а также стоимость выбранного тура для взрослых и детей. Помимо этого, уточняется, что для получения итоговой стоимости будут проведены соответствующие расчеты.)



  • После такой интенсивной работы над этим сценарием в предыдущих упражнениях найти его самостоятельно не составит особого труда.

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

    Добавление к коду комментариев
    увеличить изображение

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

    Фильтрация наборов записей

    В этом и предшествующем уроках уже дважды использовались наборы записей. В обоих случаях из базы данных извлекалась вся информация и выводилась на страницу. С этим связана одна проблема. Для правильной работы калькулятора требуется извлечь стоимость (для взрослых и детей) не на все путешествия и не на первое в списке, а на то, которое выбрал посетитель.
    Что для этого нужно? Пользователь выбирает в списке тур и подтверждает корректность заполнения формы. Значение tourID, соответствующее этому путешествию, добавляется на страницу tourprice_processor.asp в качестве переменной формы. Таким образом, при отправлении запроса в базу данных следует составить приблизительно такую конструкцию (псевдокод):
    Извлечь цену_для_взрослых (basePriceAdult) и цену_для_детей (basePriceChild) из tbl_tours, где tourID равно tourID, выбранному посетителем в форме.
    Прежде чем приступить к созданию кода на каком-либо языке, полезно четко сформулировать действия, даже если программирование (в данном случае – создание SQL-кода) скрыто за графическим интерфейсом и, в частности, за диалоговым окном Recordset (Набор записей).
  • Откройте страницу tourprice_processor.asp. С помощью панели Bindings (Привязки) откройте диалоговое окно Recordset.
    Набор записей, создаваемый в Dreamweaver, действует только в рамках одной страницы.
  • В поле Name (Имя) введите имя "rs_tourprices_filtered". В списке Connection (Соединение) выберите пункт conn_newland, а в списке Table (Таблица) – пункт tbl_tours. В разделе Columns (Столбцы) укажите вариант Selected (Выделенные) и подсветите следующие поля для идентификатора и названия тура, базовой стоимости тура для взрослых и детей: tourID, tourName, basePriceAdult и basePriceChild.
    Запрос возвращает значения четырех указанных полей из всех 19 записей таблицы tbl_tours (чтобы это проверить, следует нажать кнопку Test [Проверить]). Но от запроса требуется, чтобы он возвращал только данные путешествия, выбранного посетителем в форме.
    Фильтрация наборов записей

  • В разделе Filter (Фильтр) введите следующую формулу: tourID = From Variable tourName, выбрав соответствующие значения для каждого из четырех полей.

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

    Фильтрация наборов записей

  • Нажмите кнопку Test (Проверить). Введите число "9" в диалоговое окно Please Provide a Test Value (Пожалуйста, обеспечьте контрольное значение) и нажмите OK.

    Тест будет выполняться иначе, чем в предыдущий раз. На этот раз требуется указать контрольное значение для проверки. Причина состоит в том, что для выполнения запроса требуется значение, полученное из формы, но в среде разработки этого значения не существует. Поэтому и появляется диалоговое окно, в которое вводится значение.

    Фильтрация наборов записей

    Полученный в итоге список будет состоять из одного пункта – Machu Picchu (если указано число 9). Если вернуться и указать другие контрольные значения для проверки, то из базы данных будет извлечена информация о других турах.

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

    И снова внешний вид и функции страницы не изменились, поскольку набор записей только извлекает данные и сохраняет их в памяти сервера. Однако эти данные пока не используются.



  • Содержание Назад Вперед

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

    Как известно из урока 7, после заполнения формы на странице tourprice.asp серверу пересылаются три значения: число взрослых и детей, а также виртуальная стоимость турпоездки. После этого сценарий ASP, ColdFusion или PHP перемножает ее на количество взрослых и детей, а затем складывает полученные значения и помещает итоговую сумму в HTML-код.
    Для замены умозрительных значений реальными потребуется кое-что сделать. Для начала следует заполнить раскрывающийся список формы реальными данными. Как известно, раскрывающийся список может пересылать только одно значение, в то время как требуется два: стоимость турпоездки для взрослых и для детей. Таким образом, вместо стоимости будет отправляться уникальный идентификатор путешествия. На странице tourprice_processor.asp по этому идентификатору формируется запрос на получение стоимости тура для взрослых и для детей, после чего он направляется в базу данных. На основе полученных данных рассчитывается итоговая стоимость, которая и выводится на странице.
    Теперь следует более детально рассмотреть раскрывающийся список формы. Очевидно, что каждая опция в списке должна иметь два атрибута: надпись (label) (предназначена для просмотра посетителями и не пересылаемая после заполнения формы) и данные (data) (информация, которая пересылается в виде значения переменной формы). Несложно догадаться, что надпись должна включать название тура. Поскольку в базе данных названиям туров выделено отдельное поле, с их извлечением проблем не возникнет. В качестве пересылаемого значения, как говорилось ранее, должен выступать уникальный идентификатор путешествия. В данном случае это будет первичный ключ таблицы tbl_tours. Из предыдущего урока известно, что почти каждая таблица в базе данных содержит поле для первичного ключа, в каждой строке которого содержится уникальное значение (как правило, оно автоматически увеличивается на единицу при добавлении новой строки). Итак, в качестве названия для опции списка должно быть название тура, а в качестве данных – первич ный ключ tourID. Оба значения содержатся в таблице tbl_tours.
  • Откройте страницу tourprice.asp. На панели Bindings (Привязки) щелкните на кнопке New Binding (Создать привязку) ("+") и выберите в списке пункт Recordset (Query) (Набор записей [Запрос]).

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

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

  • В поле 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 — в качестве данных.

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

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

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

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

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

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

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




  • Создание динамически наполняемого списка
    увеличить изображение

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

    *** Error! One or more fields was left blank or contained a non-numeric character.
    "; } ?>

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

    *** Error! One or more fields was left blank or contained a non-numeric character.
    "; } } ?>

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

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

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

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

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

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



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

    Подготовка страницы ввода

    Блок ASP

    Для ASP был сгенерирован приведенный ниже код:
    <% While ((Repeat1_numRows <> 0) AND (NOT rs_countryNames.EOF)) %> "><%=rs_countrynames.Fields.Item ("countryName").Value)%> <% Repeat1_index=Repeat1_index+1 Repeat1_numRows=Repeat1_numRows-1 rs_countryNames.MoveNext() Wend %>
    Для тех, кто раньше не занимался программированием, многое может показаться не совсем понятным, но все же важно иметь хотя бы общее представление о том, что происходит в этом коде. Интересующий нас фрагмент содержит два блока ASP (расположенных между открывающим и закрывающим тегами <% %>). В верхнем блоке содержится оператор while, используемый для запуска цикла, а в скобках заключено условие, при выполнении которого цикл завершается. В языке VBScript метка EOF указывает на конец файла, так что цикл будет прерван, когда в наборе закончатся все записи. В нижнем блоке содержится код, в котором и осуществляется переход от одной записи к другой, а также завершение цикла (Wend).
    Между этими блоками содержится код ссылки, который повторно выводится на страницу. Следует обратить внимание, что после закрывающего тега отсутствует тег
    , добавляющий после ссылки разрыв строки. Для правильного отображения страницы следует самостоятельно добавить этот тег в конец строки (что и будет сделано в следующем шаге).

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

    Блок ColdFusion

    Как и ожидалось, код ColdFusion намного проще.
    #rs_countryNames.countryName#

    Первое, на что следует обратить внимание (подразумевается, что вы проанализировали код на ASP): в коде отсутствует явная конструкция цикла. На самом деле, цикл применяется и здесь, но ColdFusion скрывает его для упрощения синтаксиса. Каждый раз при использовании тега и указании запроса в качестве его атрибута (query), автоматически создается цикл. Условие завершения цикла (достижение конца набора записей) точно так же подразумевается.
    Особой проблемой является то, что цикл выполняется только в рамках тегов , но между ними нет тегов
    или , создающих разрыв строки. Вторая проблема заключается в том, что Dreamweaver сгенерировал два блока тегов , в то время как требуется только один.
    Через некоторое время обе проблемы будут решены.

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

    Блок PHP

    Код PHP в основном подобен коду ASP:


    В PHP для создания цикла применяется условная конструкция do…while. Участок кода, связанный с выполнением тела цикла, следующий за ключевым словом do, содержится в первой строке блока, а участок после ключевого слова while, включающий условие, – в последней. Между ними присутствует код, формирующий строку с именем и ссылкой, содержащей в качестве параметра URL-адреса значение поля countryID.
    Для определения необходимого количества повторений цикла в код добавляется ссылка на набор записей (функция mysql_fetch_assoc()). При отправке запроса в базу данных с помощью функции mysql_query() и оператора SELECT PHP получает возвращаемые данные, однако это происходит не сразу. Для получения данных требуется извлечь их при помощи одной из предназначенных для этой цели функции PHP. В данном случае это функция mysql_fetch_assoc(). За каждое прохождение цикла она возвращает одну запись (или строку) из массива данных, который в предшествующем блоке кода записан в переменную $row_rs_countryNames. Таким образом, для возвращения всех строк следует перебрать набор записей при помощи циклической структуры. Каждый раз значение переменной $row_rs_countryNames меняется и, соответственно, выводится в HTML-код.
    Примечание. При первом прохождении цикла используется значение, присвоенное переменной $row_rs_countryNamesпо умолчанию. Это значение задается в блоке формирования запроса, расположенном в верхней части документа (в моем случае, это строка 6).
    После того, как мы проанализировали действие ключевых блоков кода, стало понятным решение проблемы отображения списка на странице: при каждом прохождении цикла на страницу добавляется абзац, который помещается внутри тегов
    . Как известно, тег является блоковым элементом HTML, следом за которым всегда добавляются отступы. Следовательно, для уменьшения расстояния между названиями стран следует заменить теги на теги
    , применение которых приводит к принудительному переходу на следующую строку. Вскоре это изменение будет внесено.
    Таким образом, при обработке цикла все три серверные модели (ASP, ColdFusion и PHP) выводят не совсем то, что нужно, и в результате страница отображается не вполне корректно. В любом случае, требуется изменить код так, чтобы добавляемая ссылка не помещалась в отдельный абзац, и чтобы после каждой ссылки присутствовал тег разрыва строки. Это решение является простым и очевидным, но только в том случае, если потратить время на изучение кода.
    В зависимости от серверной модели решение будет разным.
  • Для всех пользователей. Найдите внутри цикла закрывающий тег и сразу после него добавьте тег
    .

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

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

  • Только пользователям PHP. Переместите открывающий тег таким образом, чтобы он находился перед , чтобы он находился после строки .

    В этом шаге решается проблема вложенности. Теперь все элементы, выводимые на страницу при выполнении цикла, будут расположены внутри одного абзаца и отделены друг от друга разрывами строки (
    ).

    В итоге, код PHP должен выглядеть следующим образом:



  • , а потом на панели Property Inspector (Инспектор свойств) установите значение CellPad (Заполнение ячейки) равным "3", значение CellSpacе (Расстояние между ячейками) равным "0", а значение Border (Обрамление) равным "1".

    Реализация постраничного вывода наборов записей
    увеличить изображение

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

  • Сохраните страницу, загрузите ее на сервер и нажмите клавишу (F12), чтобы протестировать. Используйте навигационную панель для перемещения между записями.

    Навигационная панель работает должным образом. Единственная проблема заключается в том, что на первой и последней страницах таблица навигационной панели выглядит не совсем правильно. Причиной такого некорректного отображения является правило HTML, по которому ячейки таблиц обязательно должны что-то содержать. Поскольку на первой и последней страницах отсутствуют соответственно ссылки First/Previous (Первая/Предыдущая) и Next/Last (Следующая/Последняя), то ячейки остаются пустыми. Для решения проблемы следует добавить в каждую пустую ячейку неразрывный пробел.


    Реализация постраничного вывода наборов записей
    увеличить изображение

  • Поочередно щелкните в конце каждой ссылки и выполните команды Insert\HTML\Special Characters\Non-Breaking Space (Вставка\ HTML\Специальные символы\Неразрывный пробел) (пользователям ASP и PHP). Пользователям ColdFusion следует в режиме Code (Код) добавить в любое место между открывающим и закрывающим тегами
  • , но за пределами блоков , расположенных там же, код   (в HTML это код символа неразрывного пробела).

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

    Неважно, расположен ли пробел до или после участка кода, содержащего условие. Самое главное, чтобы он находился за пределами этого участка. Если щелкнуть в конце ссылки при использовании ColdFusion, курсор будет помещен внутри области с условием. Именно поэтому пользователям ColdFusion требуется ввести символ неразрывного пробела вручную.

    Реализация постраничного вывода наборов записей

    Реализация постраничного вывода наборов записей
    увеличить изображение



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

    Создание наборов записей из объединенных таблиц

    В этом упражнении будет создана страница, на которой показаны путешествия. Поскольку это новая страница, то ее разработку следует начать с шаблона generic_template.asp. На странице используется довольно много SQL-запросов (не меньше трех), и самый простой из них будет создан в этом уроке. Этот запрос извлечет из базы всю информацию обо всех путешествиях, без применения фильтрации.
    После создания запроса будет использована инструкция SQL, которая называется объединением. Как известно, реляционная база данных разбита на несколько таблиц, связанных между собой. Иногда требуется использовать данные одновременно из двух связанных таблиц. Для получения этой информации применяется операция объединения. Как ни странно, объединение уже создавалось в предыдущем уроке, на странице с информацией о стране при изменении SQL-инструкции так, чтобы кроме идентификатора (кода) региона она извлекала из таблицы еще и его название (с помощью предложения WHERE).
    Cинтаксическая конструкция, использованная в уроке 10, была записана на основе предложения WHERE, на сегодняшний день это не самый удобный способ для создания объединений, однако он самый простой для понимания и будет поддерживаться в большинстве СУБД (например, Access и MySQL) в ближайшем будущем, так что ее использование вполне уместно. Но существует более эффективный способ объединения таблиц. Мы рассмотрим его в этом упражнении.
  • Откройте файл generic_template.asp. На панели инструментов присвойте странице заголовок "Newland Tours: Tour Descriptions" (поле Title [Заголовок]). На самой странице вместо заменителя заголовка поместите надпись "Tour Descriptions" ("Описания туров"). Сохраните файл как tours_detail.asp.
    Создание наборов записей из объединенных таблиц
    увеличить изображение

  • В первой строке области, предназначенной для отображения текста, введите "Find Tours: Tour Descriptions". Выделите слова "Find Tours", а затем на панели Property Inspector (Инспектор свойств) прикрепите к этим словам ссылку на страницу tours.asp. Поместите курсор в конец слова "Descriptions" и дважды нажмите (Enter)/(Return), чтобы добавить две новые строки. Скопируйте строку "Find Tours" и поместите ее в нижнюю строку.

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

    Создание наборов записей из объединенных таблиц
    увеличить изображение

  • Добавьте на страницу новый набор записей с указанными параметрами:

    Name: rs_tourDetail (Имя: rs_tourDetail) Connection: conn_newland (Соединение: conn_newland) Table: tbl_tours (Таблица: tbl_tours) Columns: All (Столбцы: все)

    Требуется создать запрос, который будет извлекать из таблицы tbl_tours всю информацию для создания разделов с описанием путешествий. Как и в случае с информацией о странах, одно из полей (country) содержит внешний ключ, что означает, что будет извлечено произвольное число (первичный ключ, соответствующий стране), а не название страны, которое действительно требуется. Для извлечения этой информации будет использоваться объединение таблиц, но средствами программы Dreamweaver сделать это не представляется возможным, – так что на этом шаге создается часть SQL-запроса, которая в дальнейшем послужит основой более сложного запроса.

    Создание наборов записей из объединенных таблиц

  • Нажмите кнопку Advanced (Расширенный), чтобы открыть расширенный вариант диалогового окна Recordset (Набор записей).

    Этот вариант диалогового окна содержит SQL-код, заданный на предыдущем шаге. Недостающий код будет введен в этом окне.

    Совет. Чтобы вернуться к простому варианту диалогового окна, следует нажать кнопку Simple (Простой).

    Создание наборов записей из объединенных таблиц
    увеличить изображение

  • В диалоговом окне измените SQL-инструкцию так, чтобы она выглядела следующим образом:

    SELECT * FROM tbl_tours INNER JOIN tbl_country ON tbl_country.countryID=tbl_tours.country ORDER BY tbl_country.countryName

    Многим синтаксис, используемый для объединения, покажется сложным. Однако этот код выполняет те же действия, что и приведенный ниже запрос (более легкий для чтения):

    SELECT * FROM tbl_tours, tbl_country WHERE tbl_country.countryID=tbl_tours.country ORDER BY tbl_country.countryName

    Этот код извлекает из обеих таблиц все записи и поля. При объединении двух таблиц проверяется соответствие значения поля country в таблице tbl_tours значению первичного ключа countryID в таблице tbl_countryName. Благодаря этому к каждому путешествию добавляется правильная информация о стране. Например, Аргентина и все соответствующие ей данные из таблицы tbl_country будут связаны с туром Highlights of Argentina (Достопримечательности Аргентины).


    После объединения двух таблиц по общему полю (или полям) country и/или countryID в качестве критерия для объединения, извлеченные записи сортируются по названиям стран.

    Совет. После ввода этого SQL-кода вернуться в режим Simple (Простой) для отображения диалогового окна с простым набором записей Recordset невозможно, поскольку такой способ не позволяет создать такую сложную SQL-инструкцию (см. рис. вверху следующей страницы).

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

    Создание наборов записей из объединенных таблиц
    увеличить изображение

    Создание наборов записей из объединенных таблиц
    увеличить изображение

    В диалоговом окне Test SQL-statement (Проверка SQL-инструкции) появится большое число записей. Для того, чтобы увидеть большинство данных, придется прокрутить окно вправо, поскольку изначально они находятся за пределами экрана (см. рис. внизу следующей страницы).

    Обратите внимание на два момента. Во-первых, в столбце country (четвертый слева) содержатся только числа. Если не выполнить объединение и попытаться вывести название страны на странице с описанием путешествия, то вместо названия появится соответствующее число из этого столбца. Справа, за пределами окна, расположен столбец countryName. В нем в алфавитном порядке перечислены все страны. Этот столбец был добавлен в набор записей благодаря объединению. Это позволяет выводить на страницу не числа, а названия стран.

    В результате проделанная операция ничем не отличается от манипуляций с названием региона, производимых в уроке 10. Единственное различие состоит в том, что для извлечения данных была использована более эффективная синтаксическая конструкция (INNER JOIN…ON…).

  • Дважды нажмите OK, чтобы закрыть сначала окно для проверки SQL-инструкции, а затем диалоговое окно Recordset (Набор записей).

    Новый набор записей отобразится на панели Bindings (Привязки). Как говорилось ранее, несмотря на то, что с помощью простого варианта диалогового окна Recordset (Набор записей) невозможно обработать этот SQL-запрос, в программе Dreamweaver эта проблема вполне разрешима. На панели Bindings (Привязки) данные отображаются правильно.

    Совет. Если на панели Bindings дважды щелкнуть на наборе записей, чтобы его отредактировать, то диалоговое окно Recordset (Набор записей) откроется в расширенном режиме (Advanced), поскольку упрощенный режим (Simple) не способен отобразить код.

    Данные доступны для использования на странице, – так что пора начинать разметку страницы для создания разделов с описанием путешествий.

    Создание наборов записей из объединенных таблиц



  • Содержание Назад Вперед

    Создание разделов с информацией о путешествиях

    В этом упражнении на странице будет подготовлено место для описаний путешествий. Как и в случае с информацией о странах, будет применена комбинация статических и динамических элементов.
  • В режиме Design (Дизайн) поместите курсор в строке, расположенной между двумя строками со ссылкой Find Tours (Поиск туров), а затем выполните команды Insert\HTML\Horizontal Rule (Вставка\HTML\ Горизонтальная линейка).
    Теперь в качестве разделителя фреймов с информацией о путешествиях будет использована горизонтальная линейка.
  • Введите на страницу следующий текст:
    XX Country Name: Tour Name XX (Название страны: название тура XX)
    Tour Description: (Информация о турах)
    Number of Nights: (Число ночей)
    Meals Per Day Included: (Питание)
    Exercise Required: (Обязательные экскурсии)
    Itinerary: (Маршрут)
    Learn More About XX Country Name XX (Дополнительные сведения о стране)
    Price This Tour With the Tour Price Calculator (Расчет стоимости поездки с помощью калькулятора)
    All Photographs У Photo Disc (Все фотографии)
    Как и прежде, сначала на страницу добавляется статическое содержимое, для того, чтобы наметить приблизительную структуру. В последующих шагах в соответствующие участки страницы добавляется динамическое содержимое.
    Для добавления знака авторского права У следует выполнить команды Insert\HTML\Special Characters\Copyright (Вставка\HTML\ Специальные символы\Авторское право).
    Создание разделов с информацией о путешествиях
    увеличить изображение

  • Один раз щелкните на строке "XX Country Name: Tour Name XX" и на панели Property Inspector (Инспектор свойств) в списке Format (Формат) выберите пункт Heading 2 (Заголовок 2). Поочередно в каждом из последующих пяти абзацев выделите текст до двоеточия (не выделяя двоеточие), и в категории Text (Проверить) на панели Insert (Вставка) нажмите кнопку Strong (Полужирный).
    В этом шаге производится форматирование статического каркаса страницы, созданного в предыдущем шаге.
    Поскольку при нажатии кнопки Bold (Полужирный) на панели Property Inspector (Инспектор свойств) вместо тегов Dreamweaver добавляет на страницу теги , следует добавить теги вручную (см. рис. вверху следующей страницы).
  • Выделите текст "XX Country Name" в заголовке и замените его динамическим значением countryName из панели Bindings (Привязки).

    Dreamweaver заменит введенный ранее текст собственным псевдокодом, указывающим на источник динамического текста (см. рис. внизу следующей страницы).

  • В той же строке выделите надпись "Tour Name XX" и замените ее значением tourName из панели Bindings (Привязки). Выполните команды View\Live Data (Вид\Оперативные данные), чтобы проверить правильность отображения названия страны и путешествия. После проверки отключите функцию Live Data (Оперативные данные).

    Создание разделов с информацией о путешествиях
    увеличить изображение

    Создание разделов с информацией о путешествиях
    увеличить изображение

    При разработке я нередко включаю и выключаю опцию Live Data, чтобы убедиться в том, что на странице нет никаких неожиданностей. В заголовке должна отобразиться надпись "Argentina: Highlights of Argentina" ("Аргентина: достопримечательности Аргентины"). Интересно отметить не только то, что для одного заголовка извлечены данные из двух разных полей, но и то, что эти поля, в свою очередь, получены из двух разных таблиц базы данных. Название страны извлечены из таблицы tbl_country, а название путешествия – из таблицы tbl_tours. То, что страна (Argentina) оказалась правильно связана с описанием тура (Highlights of Argentina) служит подтверждением успешного выполнения запроса.

    Создание разделов с информацией о путешествиях
    увеличить изображение

  • Прикрепите динамические данные к последующим пяти строкам (те самые строки, которые были выделены полужирным шрифтом на шаге 3 так, как показано ниже):

    Tour Description: description Number of Nights: numNights Meals Per Day Included: meals_per_day Exercise Required: exerciseReqd Itinerary: itinerary

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

  • Снова включите опцию Live Data (Оперативные данные).

    Теперь, в основном, все выглядит замечательно. Однако часть с расписанием маршрута (Itinerary) выглядит несколько неряшливо, поскольку данные содержатся в двух строках, а вторая строка не выровнена относительно первой. Чтобы это исправить, достаточно простой таблицы.


    Создание разделов с информацией о путешествиях
    увеличить изображение

  • Отключите опцию Live Data (Оперативные данные) и создайте таблицу, состоящую из одной строки и двух столбцов, чтобы отделить статический текст от динамического. При создании таблицы укажите параметры, приведенные на рисунке. После этого перетащите Itinerary в первую ячейку, а блок динамического текста – во вторую.

    Создание разделов с информацией о путешествиях

    Теперь, если при выводе полученное значение займет несколько строк, все они будут выровнены так, как требуется. Чтобы посмотреть на результат, следует снова включить опцию Live Data.

    Создание разделов с информацией о путешествиях
    увеличить изображение

  • В абзаце, расположенном под созданной таблицей, выделите текст "XX Country Name XX0" и замените его значением countryName из панели Bindings (Привязки).

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

    Создание разделов с информацией о путешествиях
    увеличить изображение



  • Содержание Назад Вперед

    Подготовка страницы поиска

    Обновление запроса и комментирование кода с целью тестирования и отладки

    Ссылки с названиями регионов пересылают на страницу tours_detail.asp переменные URL-адреса, однако эта страница не способна обработать полученные переменные. В этом упражнении на страницу будет добавлен необходимый сценарий. Но здесь есть одна загвоздка.
    Обычно, если страница должна получить переменную URL-адреса, но при загрузке страницы эта переменная не была передана, то появляется сообщение об ошибке. Но в данном случае, когда посетитель щелкает на ссылке View All (Просмотр всей информации), на страницу не передается никаких переменных. В будущем, после того, как на страницу будет добавлена форма, позволяющая выбрать страну из списка, появится другой способ для перехода на страницу tours_detail.asp без использования параметров URL-адреса. Таким образом, страница не должна зависеть от наличия переменных URL-адреса.
    При создании приложений (даже таких простых, как это) разработчику необходимо приложить максимум усилий, чтобы предотвратить появление сообщений об ошибках. Порой для этого требуется выработать определенную стратегию, поэтому, прежде, чем двигаться дальше, следует обдумать описанные ниже моменты. Цель веб-дизайнера состоит в том, чтобы страница отображала нужные результаты на основе полученного типа данных (или на основе их отсутствия).
    Если на страницу переданы данные (например, переменные формы или URL-адреса), они будут использоваться только в одном месте: в SQL-запросе для фильтрации записей. Больше ничего на странице не зависит от этих данных. Чтобы избежать ошибок, требуется предотвратить запуск кода, который зависит от несуществующих на странице переменных. Как известно, для управления запуском или блокирования возможности для выполнения тех или иных участков кода прекрасно подходят условные конструкции (if…else). Таким образом, одно из решений проблемы заключается в размещении нескольких SQL-инструкций внутри условной конструкции – по одному запросу на каждый тип поиска. На основе наличия или отсутствия указанных переменных, условная конструкция обеспечит корректное выполнение запроса.
    Условная конструкция будет записана к концу этого урока. Но в данный момент требуется создать SQL-инструкцию, которая будет выполняться в том случае, если на страницу передана переменная URL-адреса regionID. Эта инструкция отличается от существующей SQL-инструкции, которая извлекает из базы данных все записи. Запрос, созданный ранее, тоже нужен, поскольку он соответствует варианту, когда на страницу не передано ни одной переменной. Итак, следует скопировать существующую SQL-инструкцию и настроить ее на работу с переменными URL-адреса.
    Но это приведет к другой проблеме, когда в коде появятся два несовместимых запроса. Эта проблема будет решена позднее при помощи условной конструкции. Но как быть во время создания и отладки нового запроса? Для этого потребуется временно отключить существующий запрос. Запрос перестанет обрабатываться, однако код останется на странице, и впоследствии снова будет активирован. Чтобы воспользоваться этой возможностью, следует закомментировать код существующего запроса. Как говорилось ранее, интерпретаторы кода ASP, ColdFusion и PHP игнорируют комментарии, так что код останется на странице, но не повлияет на процесс тестирования. Этот прием, как уже упоминалось, называется комментированием кода и при разработке сложных приложений является исключительно полезным средством.
    Совет. При написании кода многие программисты используют следующую стратегию – на каждом из этапов решать по одной четко определенной задаче. Если попытаться одновременно создать и новый запрос, и условную конструкцию, то в случае возникновения проблем будет непонятно, какой участок кода включает ошибку. Поэтапное выполнение одной конкретной задачи одновременно облегчает отладку кода.

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

  • Откройте страницу tours_detail.asp. В режиме Code (Код) найдите код запроса, расположенный в верхней части документа.

    В моем случае в документах ASP и ColdFusion код запроса начинается со строки 4. В документе PHP он расположен немного ниже, в строке 12 [mysql_select_db()]. Цель данного шага заключается в том, чтобы изолировать код SQL-запроса (который начинается со строки SELECT * FROM tbl_tours) и в то же время в минимальной степени повредить код ASP, ColdFusion или PHP.

  • Веб-дизайнерам, программирующим на ASP, ColdFusion и PHP рекомендуется выполнить предлагаемые ниже действия:

  • Пользователям ASP. Полностью выделите строку, начинающуюся с кода rs_tourDetail.Source =. Скопируйте ее и вставьте в следующую строку, так, чтобы получилось две одинаковые копии. Поместите курсор в начало первой строки и добавьте одинарную кавычку (‘), чтобы закомментировать строку.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение

    Итак, исходный запрос скопирован и временно заблокирован. Теперь можно изменять и проверить копию.

  • Пользователям ColdFusion. Найдите SQL-инструкцию, расположенную между тегами . Если потребуется, удалите все разрывы строки так, чтобы инструкция помещалась в одной строке. Поместите курсор перед первой SQL-инструкцией и введите .

    Исходный запрос скопирован и временно заблокирован. Теперь можно изменить и проверить копию.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение

  • Пользователям PHP. Полностью выделите строку, начинающуюся с кода $query_rs_tourDetail = "SELECT. Скопируйте ее и вставьте в следующую строку так, чтобы получилось две одинаковые копии. Поместите курсор в начало первой строки и добавьте две косые черты (два слэша) (//), чтобы добавить комментарий к этой строке.

    Первоначальный запрос скопирован и временно заблокирован. Теперь можно изменить и тестировать копию.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение


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

  • Откройте страницу tours_detail.asp. В режиме Code (Код) найдите код запроса, расположенный в верхней части документа.

    В моем случае в документах ASP и ColdFusion код запроса начинается со строки 4. В документе PHP он расположен немного ниже, в строке 12 [mysql_select_db()]. Цель данного шага заключается в том, чтобы изолировать код SQL-запроса (который начинается со строки SELECT * FROM tbl_tours) и в то же время в минимальной степени повредить код ASP, ColdFusion или PHP.

  • Веб-дизайнерам, программирующим на ASP, ColdFusion и PHP рекомендуется выполнить предлагаемые ниже действия:

  • Пользователям ASP. Полностью выделите строку, начинающуюся с кода rs_tourDetail.Source =. Скопируйте ее и вставьте в следующую строку, так, чтобы получилось две одинаковые копии. Поместите курсор в начало первой строки и добавьте одинарную кавычку (‘), чтобы закомментировать строку.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение

    Итак, исходный запрос скопирован и временно заблокирован. Теперь можно изменять и проверить копию.

  • Пользователям ColdFusion. Найдите SQL-инструкцию, расположенную между тегами . Если потребуется, удалите все разрывы строки так, чтобы инструкция помещалась в одной строке. Поместите курсор перед первой SQL-инструкцией и введите .

    Исходный запрос скопирован и временно заблокирован. Теперь можно изменить и проверить копию.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение

  • Пользователям PHP. Полностью выделите строку, начинающуюся с кода $query_rs_tourDetail = "SELECT. Скопируйте ее и вставьте в следующую строку так, чтобы получилось две одинаковые копии. Поместите курсор в начало первой строки и добавьте две косые черты (два слэша) (//), чтобы добавить комментарий к этой строке.

    Первоначальный запрос скопирован и временно заблокирован. Теперь можно изменить и тестировать копию.

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение


  • Непосредственно перед предложением ORDER BY, расположенным ближе к концу SQL-инструкции, введите следующий код:

    Для ASP:

    WHERE tbl_country.region=" & Request.QueryString("regionID") & "

    Для ColdFusion:

    WHERE tbl_country.region = #url.regionID#

    Для PHP:

    WHERE tbl_country.region =". $_GET['regionID'] ."

    Обновление запроса и комментирование кода с целью тестирования и отладки
    увеличить изображение

    После закрывающих кавычек (") в ASP и PHP, а также после закрывающего знака # в ColdFusion должен стоять пробел. Другими словами, предложение ORDER BY не должно без пробела примыкать к кавычкам или знаку #.

    Совет. Как говорилось ранее, в ASP оператор & применяется для конкатенации (или объединения) текстовых строк. С той же целью используется точка (.) в PHP. Конкатенация необходима в обоих случаях, поскольку смешиваются литеральные строки (составляющие большую часть SQL-запросов), которые ASP или PHP должны передать без изменения, и специальный код ASP или PHP, который требуется оценить, например, Request.QueryString () (ASP) или $_GET() (PHP). Строки заключаются в кавычки, а выражения нет. Для их совместного употребления следует объединить участки кода при помощи оператора & или точки. При использовании ColdFusion такой проблемы не возникает, поскольку в этом случае выражения, которые требуется оценить, помещаются между знаками #…#.

    Итак, для чего предназначен добавленный в запрос код? Он создает дополнительный критерий для отбора, который значительно сужает первоначально заданную область поиска. При выполнении первого варианта поиска из базы данных извлекается вся информация, необходимая для отображения всей информации о турах. Новый запрос делает то же самое, но при этом извлекает только те путешествия, которым соответствует значение поля regionID, равное значению переданного на страницу параметра URL-адреса.

    Приведем конкретный пример. Каждому путешествию соответствует поле, в котором можно указать страну. Как известно из предшествующих уроков, в этом поле содержится внешний ключ, указывающий на таблицу tbl_country. Таким образом, двум турам, проводимым во Франции, соответствует одно и то же значение внешнего ключа countryID. Это общее поле связывает таблицу путешествий с таблицей стран (в данном случае все туры, проводимые во Франции, посредством этого поля связаны со значением France в таблице tbl_country).

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

    Переключение между SQL-запросами в зависимости от переменных среды

    После проверки запросов стало очевидно, что каждый из них работает, когда два других закомментированы. Такие условия вполне подходят для тестирования, когда существует возможность в любой момент открыть документ и закомментировать тот или иной участок кода. Но при открытии сайта, предназначенного для общего доступа, в код необходимо внести дополнительные изменения. Несложно понять, что требуется реализовать автоматическое переключение между запросами, осуществляемое в зависимости от выбранного посетителем типа поиска. Во-первых, следует определить, как страница tours_detail.asp определит способ поиска, который был выбран. Затем на основе этого следует перейти к соответствующему SQL-запросу. Для создания такого перехода идеально подходит условная конструкция if… else, – вопрос только в том, как с ее помощью выявить тип поиска, выбранный посетителем?
    В одном из предыдущих уроков был создан сценарий, проверяющий корректность заполнения формы. При выполнении сценария производилась проверка того, существуют ли переменные numadults и numchildren, а также являются ли их значения числовыми. Если хотя бы одно условие не выполнялось, посетитель переводился обратно на страницу с формой для устранения проблемы. Подобная стратегия позволяет определить, какой тип поиска выбрал посетитель. Проверка наличия или отсутствия конкретных переменных должна производиться в следующем порядке:
  • если не существует переменных формы или URL-адреса, то это означает, что посетитель перешел на страницу по ссылке View All (Просмотр всей информации);
  • если в памяти присутствует переменная URL-адреса, значит посетитель перешел на страницу по одной из ссылок с названиями регионов;
  • если в памяти существует переменная формы, следовательно, посетитель выбрал страну в списке формы.

  • Этой информации достаточно для определения логической структуры сценария, который требуется написать. Логика наглядно продемонстрирована в приведенном ниже псевдокоде. Фразы, отделенные косыми чертами (слэшами), поясняют причину возникновения того или иного условия. В итоговый сценарий они добавлены не будут.

    Если переменной формы не существует // посетитель щелкнул либо на ссылке View All Tours (Просмотр всех туров), либо на ссылке с названием региона Если не существует переменных URL-адреса // посетитель щелкнет на ссылке View All Tours. Запустить первый запрос Иначе переменная URL-адреса существует // пользователь щелкнул на ссылке с названием региона Запустить второй запрос Иначе переменная формы существует // пользователь выбрал страну из списка формы Запустить третий запрос

    При анализе этого псевдокода становится понятно, что для его реализации требуются две условные конструкции if…else, вложенные одна в другую. Это необходимо, так как одно из условий (отсутствие переменной формы) может выполняться по двум разным причинам: поскольку посетитель щелкнул на ссылке View All (Просмотр всей информации), и на странице нет переменных URL-адреса. Помимо этого, возможен вариант, при котором посетитель щелкнул на ссылке с названием региона, вследствие чего на страницу передана переменная URL-адреса.

  • Откройте страницу tours_detail.asp. В режиме Code (Код) найдите три строки SQL-кода и удалите символы комментариев, в которые заключена часть из них. Выше и ниже этих строк добавьте несколько разрывов строки, чтобы отделить запросы от остального кода.

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

    Переключение между SQL-запросами в зависимости от переменных среды
    увеличить изображение

  • Над верхней строкой запроса введите строку кода, проверяющую существование переменной формы.

    Для ASP:

    If IsEmpty(Request.Form("tourCountry")) Then

    Для ColdFusion:



    Для PHP:

    if (!isset($_POST['tourCountry'])) {

    Результатом обработки этого условия (как и любого другого) будет значение true (истина) или false (ложь). Если возвращается значение true (то есть переменной формы не существует), сценарий должен определить, существует ли переменная URL-адреса. Если возвращается значение false, становится ясно, что посетитель выбрал страну из списка формы, а, следовательно, нужно выполнять третий запрос.


  • С помощью клавиши (Tab) установите отступ от края для всех трех SQL-запросов. Над строкой с третьим запросом создайте новую строку и введите в ней код, благодаря которому будет запускаться третий запрос.

    Для ASP:

    Else

    Для ColdFusion:



    Для PHP:

    } else {

    Если после проверки условия возвращается значение false, обработчик будет проводить в коде поиск операторов else if или else. Когда он их находит, они выполняются. Добавление этого кода обеспечивает запуск запроса, производящего фильтрацию на основе переменной формы, в том случае, если она существует.

  • Добавьте приведенный ниже код после строки третьего запроса, чтобы закрыть блок if…else.

    Для ASP:

    End If

    Для ColdFusion:



    Для PHP:

    }

    Переключение между SQL-запросами в зависимости от переменных среды
    увеличить изображение

    Итак, половина задачи решена. Если сейчас загрузить страницу на сервер и запустить ее через форму, выбрав страну из списка и нажав кнопку Submit, она будет работать надлежащим образом. Но если попытаться перейти на страницу другими способами, то появится сообщение об ошибке, поскольку обработчик будет пытаться одновременно выполнить два остальных запроса.

  • Еще раз установите отступ для двух верхних строк с SQL-запросами. Над строкой с первым запросом добавьте условие, которое проверяет наличие переменной URL-адреса.

    Для ASP:

    If IsEmpty(Request.QueryString("regionID")) Then

    Для ColdFusion:



    Для PHP:

    if (!isset($_GET['regionID'])) {

    Если при проверке этого условия тоже будет возвращено значение true (истина), значит, не существует ни переменных формы, ни переменных URL-адреса, и должен выполняться первый SQL-запрос – наименее строгий. Этот запрос расположен под строкой с условием, так что если условие выполняется, будет запущен запрос.

    Если возвращается значение false (ложь), то это означает, что переменная URL-адреса существует, и должен выполняться второй запрос.

  • В строке между двумя верхними запросами введите код, необходимый для запуска второго запроса.

    Для ASP:

    Else


    Для ColdFusion:



    Для PHP:

    } else {

    Этот запрос может быть запущен только в том случае, если не существует переменной формы, но имеется переменная URL-адреса.

  • После второго SQL-запроса добавьте новую строку, чтобы закрыть блок с вложенным условием.

    Для ASP:

    End If

    Для ColdFusion:



    Для PHP:

    }

    Этот код завершает блок с вложенным условием, урок и приложение для поиска и отображения путешествий.

    Переключение между SQL-запросами в зависимости от переменных среды
    увеличить изображение

  • Сохраните файл и загрузите его на сервер. Откройте страницу tours.asp в браузере и опробуйте все доступные виды поиска.

    Завершенное приложение работает в любых критических ситуациях. Отображаются все (и только те) путешествия, которые соответствуют критериям поиска. Навигационная панель для перемещения между записями будет скрыта или видима в зависимости от количества записей, извлеченных из базы во время поиска. При щелчке на названии страны загрузится страница с информацией о ней. Если щелкнуть на ссылке Tour Price Calculator (Калькулятор для расчета стоимости тура), загрузится приложение для расчета стоимости, а в списке будет выбрано название соответствующего тура. Итак, посетители получают возможность работать с удобным и функциональным интерфейсом, позволяющим подробнее узнать о том, что предлагает компания Newland Tours.



  • Содержание Назад Вперед

    Подготовка страницы поиска и создание ссылки для поиска без фильтрации

    В этом упражнении приступаем к реализации подготовительного этапа по созданию страницы поиска. Для этого следует удалить устаревший контент со страницы tours.asp. На данный момент на странице tours.asp содержится статический список всех путешествий. После создания динамического списка туров (tours_details.asp) содержимое страницы tours.asp теряет свою актуальность. Однако, поскольку навигационные панели по всему сайту содержат ссылку Find Tours (Поиск туров), которая указывает на tours.asp, эта страница идеально подходит для размещения на ней поискового интерфейса.
    Неудивительно, что в первую очередь требуется удалить весь статический список путешествий. В дальнейшем будет намечена основная структура страницы. Наконец, будет создан первый из трех поисковых интерфейсов, хотя в данном случае термин "поисковый интерфейс", несомненно, является преувеличением – это простая гиперссылка, при переходе по которой на странице tours_detail.asp отображаются все путешествия.
  • Откройте страницу tours.asp и измените заголовок "Choose Tour" ("Выберите тур") на Find Tour. Выделите все содержимое ниже заголовка (включая и таблицу). После этого нажмите клавишу (Del). Под заголовком "Find Tours" ("Поиск туров") введите следующий текст:
    Use this page to find the tour of your dreams. Once you’ve made a selection, check out the Tour Price Calculator. (На этой странице можно найти тур Вашей мечты. После выбора тура проверьте калькулятор для расчета стоимости путешествия.)
    Newland Tours offers many tours to different parts of the world. To find a tour to your desired destination, use the table below to browse by world region, by country, or view them all. (Компания Newland Tours предлагает много туров по разным странам. Для поиска нужной информации по туру, Воспользуйтесь таблицей (внизу страницы, чтобы просмотреть интересующие Вас сведения по регионам и по странам.)
    Несмотря на то, что к концу этого шага страница заметно изменилась, сделано было немного: вместо устаревшего статического HTML на страницу добавлен модернизированный статический HTML.

    Подготовка страницы поиска и создание ссылки для поиска без фильтрации
    увеличить изображение

  • К словам "Tourprice Calculator" ("Калькулятор для расчета стоимости тура") прикрепите ссылку на страницу tourprice.asp.

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

  • Под вторым абзацем создайте новую строку и вставьте в нее таблицу со следующими параметрами:

    Rows: 3 (Строк: 3) Columns: 2 (Столбцов: 2) Width: 95 Percent (Толщина: 95 процентов) Border thickness: 1 (Толщина границы: 1) Cell padding: 3 (Заполнение ячейки: 3) Cell spacing: 0 (Расстояние между ячейками:0)

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

    Подготовка страницы поиска и создание ссылки для поиска без фильтрации
    увеличить изображение

  • В три ячейки, находящиеся в левом столбце, снизу вверх введите следующий текст: "By World Region" ("По регионам"), "By Country" ("По странам") и "View All Tours" ("Просмотр всех туров"). Перетащите разделитель между столбцами влево так, чтобы правый столбец был шире левого.

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

    Подготовка страницы поиска и создание ссылки для поиска без фильтрации
    увеличить изображение

  • Выделите слова "View All" в ячейке View All Tours (Просмотр всех туров), и прикрепите к нему ссылку на страницу tours_detail.asp.

    При переходе по этой ссылке загрузится страница tours_detail.asp в своем первоначальном виде, – именно такой она была в конце урока 11.

  • Сохраните файл, загрузите его на сервер и протестируйте в браузере.



  • При щелчке на ссылке View All (Просмотр всей информации) загрузится страница tours_detail.asp, которая будет работать точно так же, как прежде. На будущее важно запомнить, что когда пользователи переходят по этой ссылке, на страницу не передается никаких дополнительных переменных.

    Подготовка страницы поиска и создание ссылки для поиска без фильтрации
    увеличить изображение

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

    Поиск по регионам: создание интерфейсов

    Пора реализовать первый из двух оставшихся вариантов поиска: поиск путешествий по регионам. После завершения работы на странице появится список, состоящий из восьми регионов, к каждому из которых прикреплена ссылка на страницу tours_detail.asp, к которой прикреплена строка запроса, содержащая уникальное значение переменной regionID. На страницу tours_detail.asp будут переданы только те записи, которые были извлечены после выполнения SQL-запроса, фильтрующего данные с заданным значением для поля regionID. После этого тот же процесс будет повторен на странице index.asp, чтобы пользователи могли перейти к выбранным турам непосредственно с главной страницы. При выполнении упражнения на странице index.asp рекомендуется, не пользуясь книгой, по памяти воспроизвести указанные шаги, что позволит лучше усвоить описанные выше операции.
  • На странице tours.asp создайте новый набор записей со следующими параметрами:
    Name: rs_worldregions (Название: rs_worldregions) Connection: conn_newland (Соединение: conn_newland) Table: tbl_region (Таблица: tbl_region) Columns: All (Столбцы: Все) Filter: None (Фильтр: отсутствует) Sort: regionName, Ascending (Сортировка: regionName, по возрастанию)
    этот набор записей извлекает из базы все названия регионов и соответствующие им идентификаторы. Названия регионов будут использованы для создания списка регионов, а идентификаторы – передаваться в качестве значений параметров URL-адреса. Похожая стратегия применялась при работе с профилями стран.
    Поиск по регионам: создание интерфейсов

  • Поместите курсор в пустой ячейке, расположенной справа от надписи "By World Region" ("По регионам"). В категории Application (Приложение) на панели Insert (Вставка) щелкните на кнопке Dynamic Text (Динамический текст). В одноименном диалоговом окне Dynamic Text выберите поле regionName (НазваниеРегиона) и нажмите OK.
    Если протестировать страницу сейчас, на ней отобразится первое в наборе записей название региона или страны (Africa). Остальные названия не будут выведены, поскольку к динамическому тексту не применялась модель поведения Repeat Region (Повторяющаяся область). Однако до этого требуется прикрепить к динамическому тексту гиперссылку.

    Поиск по регионам: создание интерфейсов

  • Выделите динамический текст (в псевдокоде Dreamweaver – {rs_worldregions.regionName}) . На панели Property Inspector ( Инспектор свойств) щелкните на значке папки, расположенном справа от поля Link (Ссылка), чтобы открыть диалоговое окно Select File (Выбор файла). Выберите файл tours_detail.asp.

    На этом шаге создается ссылка на страницу tours_detail.asp. Безусловно, проще указать файл tours_detail.asp при помощи инструмента Point to File (Указать файл). Однако поиск файла в диалоговом окне имеет полезную особенность, – в этом случае Dreamweaver упрощает создание ссылки, к которой прикрепляются переменные запроса/URL-адреса.

    Поиск по регионам: создание интерфейсов

  • Не закрывая диалоговое окно Select File (Выбор файла), нажмите кнопку Parameters (Параметры) в правом нижнем углу. В столбце Name (Название) диалогового окна Parameters (Параметры) введите regionID.

    Поиск по регионам: создание интерфейсов

    Итак, на этом шаге задается переменная regionID. Теперь Dreamweaver имеет достаточно информации, чтобы сгенерировать следующий код: . Разумеется, этого недостаточно. Переменная regionID должна иметь какое-то значение, в данном случае – текущее значение поля regionID.

  • Щелкните на значке с изображением молнии в столбце Value (Значение). Выберите в списке поле regionID и нажмите OK, чтобы вернуться в диалоговое окно Parameters (Параметры). Нажмите OK еще два раза, чтобы вернуться в документ.

    Поиск по регионам: создание интерфейсов

    На данном шаге указывается значение переменной запроса/URL-адреса regionID.

    В поле Link (Ссылка) на панели Property Inspector (Инспектор свойств) появится динамический адрес tours_detail.asp?regionID=<%=(rs_worldregions.Fields. Item("regionID").Value)%>, либо аналогичный код для ColdFusion или PHP.

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




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

  • Не снимая выделение с динамического текста, переключитесь в комбинированный режим Split (Режим разделения) (если необходимо). Пользователям ASP и PHP рекомендуется найти закрывающий тег , расположенный после выделенного кода. Сразу после него введите тег разрыва строки
    . Пользователям ColdFusion следует удалить весь код между тегами
  • (не удаляя эти теги) и вместо него ввести новый код:

    #rs_worldregions.regionName#


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

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

    После добавления разрыва строки в нужное место, записи будут выводиться на странице в виде списка.

  • Сохраните файл, загрузите его на сервер и протестируйте в браузере.

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

    Записи не фильтруются, поскольку на странице не был изменен запрос, который в данный момент извлекает из базы все путешествия.

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

  • Повторите шаги с 1 по 7, чтобы создать динамический список на главной странице, – вместо существующего списка регионов. Обратите внимание на дополнения и изменения, приведенные ниже.

    Рекомендуется выполнить все перечисленные действия по памяти, просматривая этот раздел книги только в случае, если воспроизвести какие-либо шаги будет затруднительно. Это позволить проверить степень усвоения полученных знаний. Вот некоторые моменты, которые следует учитывать.


  • Следует создать на странице набор записей и присвоить ему имя rs_worldregions. На странице может присутствовать несколько наборов записей, если у них разные имена.
  • При добавлении модели поведения Repeat Region (Повторяющаяся область), следует убедиться, что в диалоговом окне Repeat Region был указан правильный набор записей (rs_worldregions). По умолчанию, скорее всего, будет выбран неправильный набор записей. Если выбран неверный набор записей, то при тестировании файла в браузере появится сообщение об ошибке.
  • Помимо добавления тега
    , внутри цикла после закрывающего тега (при необходимости нужно исправить код ColdFusion) следует также вставить два неразрывных пробела (для этого в режиме Code (Код) надо дважды ввести  ) перед открывающим тегом , чтобы список регионов слегка отступал от левого края.
  • Во время выполнения данного шага навигационная панель страницы в Dreamweaver будет выглядеть не слишком привлекательно, поскольку для оформления страницы будут добавлены псевдокод и блок повторяющейся области. При загрузке страницы в браузере эти элементы отображаться не будут.


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



  • После завершения указанных действий следует сохранить страницу, загрузить ее на сервер и протестировать в браузере добавленные ссылки. Важно убедиться, что при щелчке на ссылке загружается страница tours_detail.asp, и что каждая ссылка передает на страницу свой параметр URL-адреса.



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

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

    Поиск по стране: фильтрация по переменной формы

    Сценарий для поиска путешествий по регионам готов. Поиск по странам аналогичен поиску туров, но с некоторыми отличиями. Вместо ссылок и параметров URL-адреса будут применяться формы и переменные формы. Как и прежде, для реализации поиска используется SQL-инструкция.
  • Откройте страницу tours.asp. В режиме Design (Дизайн) поместите курсор во второй строке правого столбца и добавьте здесь форму, состоящую из одного раскрывающегося списка и кнопки Submit.
    К этому моменту добавление элементов на страницу не должно вызывать затруднений.
    Поиск по стране: фильтрация по переменной формы
    увеличить изображение

  • В селекторе тегов выберите тег , а затем на панели Property Inspector (Инспектор свойств) присвойте форме имя frm_bycountry. В качестве значения атрибута в поле со списком Action (Действие) укажите страницу tours_detail.asp. В качестве метода в поле со списком выберите POST.
    Эти настройки относятся к форме в целом. Теперь она готова к использованию. Конечно, требуется еще настроить ее элементы, в первую очередь, список.
    Поиск по стране: фильтрация по переменной формы
    увеличить изображение

  • На панели Bindings (Привязки) создайте новый набор записей, используя следующие параметры:
    Name: rs_countries (Название: rs_countries) Connection: conn_newland (Соединение: conn_newland) Table: tbl_country (Таблица: tbl_country) Columns: Selected, countryName (Столбцы: выделенные, countryName) Filter: None (Фильтр: отсутствует) Sort: countryName, Ascending (Сортировка: countryName, по возрастанию)
    Если нажать кнопку Test (Проверить), станет видно, что набор записей включает список всех стран из таблицы tbl_country, упорядоченных по алфавиту в порядке возрастания. Этот список будет использован для заполнения раскрывающегося списка формы.
    Поиск по стране: фильтрация по переменной формы

  • Щелкните на поле со списком, чтобы выделить его, и на панели Property Inspector (Инспектор свойств) присвойте ему имя tourCountry. Нажмите кнопку Dynamic (Динамический), чтобы открыть диалоговое окно Dynamic List/Menu (Динамический список/меню). В меню Options from recordset (Параметры из набора записей) выберите пункт rs_countries. В списках Values (Значения) и Labels (Надписи) оставьте одинаковое значение по умолчанию (countryName), а после этого нажмите OK.

    Это диалоговое окно использовалось и раньше, так что последствия выполненных действий являются предсказуемыми. При отображении страницы в браузере список окажется заполнен названиями стран, отсортированных по алфавиту в порядке возрастания. При нажатии кнопки Submit загрузится страница tour_detail.asp (которая была указана в качестве значения атрибута Action (Действие) при настройке формы). Теперь атрибут и выбранное значение (например, tourCountry=Argentina или другая выбранная страна) будут переданы форме в качестве ее переменной (см. рис. вверху следующей страницы).

    Рекомендуется сохранить страницу и протестировать ее в браузере, просто чтобы убедиться в том, что названия стран действительно добавляются в список. Если при проверке нажать кнопку Submit, появится сообщение об ошибке, поскольку страница tours_detail.asp настроена не на получение переменной формы countryName, а на получение переменной URL-адреса regionID.

    Поиск по стране: фильтрация по переменной формы

  • Откройте страницу tours_detail.asp. Найдите два запроса (один из которых закомментирован). Скопируйте второй запрос и вставьте его в следующую строку. Закомментируйте и второй запрос.

    Это снова дает возможность внести изменения в копию и протестировать новый SQL-инструкцию, которая будет обрабатывать данные, переданные формой.

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

  • В запросе измените только условие, задаваемое предложением WHERE, так, чтобы код выглядел следующим образом:

    Для ASP:

    WHERE tbl_country.countryName=' "& Request.Form("tourCountry") & " '

    Для ColdFusion:

    WHERE tbl_country.countryName = '#form.tourCountry#'

    Для PHP:

    WHERE tbl_country.countryName =' ". $_POST['tourCountry'] ." '

    Как и в прошлый раз, следует убедиться, что между закрывающей одинарной кавычкой (') и следующим предложением ORDER BY установлен пробел.

    В значительной степени, смысл этого выражения должен быть понятен. Здесь указано, что из базы данных должны извлекаться только те туры, которым соответствует название страны, равное значению, переданному из формы (хотя для доступа к этому названию вновь требуется задействовать связь между таблицами tbl_tours и tbl_country).

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

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




  • Это диалоговое окно использовалось и раньше, так что последствия выполненных действий являются предсказуемыми. При отображении страницы в браузере список окажется заполнен названиями стран, отсортированных по алфавиту в порядке возрастания. При нажатии кнопки Submit загрузится страница tour_detail.asp (которая была указана в качестве значения атрибута Action (Действие) при настройке формы). Теперь атрибут и выбранное значение (например, tourCountry=Argentina или другая выбранная страна) будут переданы форме в качестве ее переменной (см. рис. вверху следующей страницы).

    Рекомендуется сохранить страницу и протестировать ее в браузере, просто чтобы убедиться в том, что названия стран действительно добавляются в список. Если при проверке нажать кнопку Submit, появится сообщение об ошибке, поскольку страница tours_detail.asp настроена не на получение переменной формы countryName, а на получение переменной URL-адреса regionID.

    Поиск по стране: фильтрация по переменной формы

  • Откройте страницу tours_detail.asp. Найдите два запроса (один из которых закомментирован). Скопируйте второй запрос и вставьте его в следующую строку. Закомментируйте и второй запрос.

    Это снова дает возможность внести изменения в копию и протестировать новый SQL-инструкцию, которая будет обрабатывать данные, переданные формой.

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

  • В запросе измените только условие, задаваемое предложением WHERE, так, чтобы код выглядел следующим образом:

    Для ASP:

    WHERE tbl_country.countryName=' "& Request.Form("tourCountry") & " '

    Для ColdFusion:

    WHERE tbl_country.countryName = '#form.tourCountry#'

    Для PHP:

    WHERE tbl_country.countryName =' ". $_POST['tourCountry'] ." '

    Как и в прошлый раз, следует убедиться, что между закрывающей одинарной кавычкой (') и следующим предложением ORDER BY установлен пробел.

    В значительной степени, смысл этого выражения должен быть понятен. Здесь указано, что из базы данных должны извлекаться только те туры, которым соответствует название страны, равное значению, переданному из формы (хотя для доступа к этому названию вновь требуется задействовать связь между таблицами tbl_tours и tbl_country).


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

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

  • Сохраните файл и загрузите его на сервер. На панели Site (Сайт) выберите страницу tours.asp и нажмите клавишу (F12), чтобы протестировать ее. Выберите в списке любую страну и нажмите кнопку Submit.

    В большинстве стран есть только один тур, который и отобразится после выбора страны. Если выбрать страну, в которой проводится несколько путешествий (France, Japan, United Kingdom и United States), все они будут выведены на странице (см. рис. вверху следующей страницы).

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

    Если выбрать Тайвань (Taiwan), то загрузится пустая страница, поскольку, несмотря на то, что эта страна содержится в таблице tbl_country, в ней не проводится ни одного путешествия. Чисто гипотетически такое несоответствие вряд ли бы имело место. Однако в реальности путешествие по Тайваню может оказаться в стадии разработки. Менеджер, ответственный за добавление информации о странах, уже занес данные по Тайваню в базу данных, но полностью ввод всей информации о туре еще не завершен. Во многих базах данных, в том числе, в Microsoft Access (но не в MySQL), для учета этой ситуации в запрос добавляется условие для отбора только тех стран, в которых проводится как минимум одно путешествие.

  • Только пользователям ASP и ColdFusion. Откройте файл tours.asp. На панели Bindings (Привязки) дважды щелкните на наборе записей Recordset (rs_countries), чтобы отредактировать его. В диалоговом окне Recordset (Набор записей) нажмите кнопку Advanced (Расширенный). Между строками FROM tbl_country и ORDER BY countryName ASC введите приведенный ниже код. Пользователям PHP выполнять этот шаг не нужно, однако рекомендуется прочитать последующий текст.

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

    Скрытие навигационной панели

    Как обычно, прежде чем приступить к созданию кода, требуется четко понять, что именно следует делать. Навигационная панель для перемещения между записями, размещенная внутри таблицы, должна отображаться, если количество извлеченных из базы данных записей больше пяти (то есть шесть, семь и т.д.). Как известно, на странице одновременно выводится по пять записей. Однако если из базы данных извлечено не более пяти записей, навигационная панель не будет работать, следовательно, в этом случае она появиться не должна.
    Как всегда, код ASP, ColdFusion и PHP отличается внешне, но он построен по одним и тем же принципам.
  • На странице tours_detail.asp в комбинированном режиме Split (Режим разделения) при помощи селектора тегов выделите таблицу, в которой содержится навигационная панель для перемещения между записями.
    Таблица окажется выделенной как в режиме Code (Код), так и в режиме Design (Дизайн). Режим кода будет применяться на следующем шаге, а в данный момент требуется определить границы таблицы, поскольку выше и ниже таблицы необходимо добавить код, управляющий ее отображением. Это один из тех случаев, когда комбинированный режим облегчает поиск элемента, скрытого в коде.
    Чтобы выделить таблицу от остального кода, достаточно добавить несколько пустых строк выше и ниже таблицы (см. рис. вверху следующей страницы).
  • В режиме Code (Код), непосредственно перед открывающим тегом таблицы, введите первую часть сценария, управляющего отображением таблицы в зависимости от количества записей.
    Для ASP:
    <% If (MM_atTotal = false Or Not IsEmpty(Request.QueryString("offset"))) Then %>
    Для ColdFusion:

    Для PHP:

    При создании набора записей в памяти сервера сохраняются не только сами данные, извлеченные из базы, но и некоторая необходимая информация об этих данных. К такой информации (доступной на ASP, ColdFusion и PHP) относится количество записей, извлеченных при помощи запроса. В ASP и ColdFusion переменная, в которой хранится общее число записей, называется RecordCount. Для доступа к ней применяется код rs_myQuery.recordcount. В PHP для получения этой информации применяется функция mysql_num_rows(). Используют ее в следующем виде:mysql_num_rows($rs_myQuery). В обоих примерах название rs_myQuery является вымышленным, и в реальном коде вместо него следует подставлять название используемого набора записей.

    Скрытие навигационной панели
    увеличить изображение

    Во время работы с циклами или при разбиении набора записей на страницы переменная RecordCount (ASP и ColdFusion) или функция mysql_num_rows() (PHP) может оказать неоценимую помощь. Но в данной ситуации возникает одна проблема. В сценариях, сгенерированных с помощью примененных серверных моделей поведения, эти переменные уже используются. Если применить их вновь, между сценариями могут возникнуть непредсказуемые конфликты. В сценариях ASP и PHP, во избежание таких проблем, применяются переменные, уже созданные серверными моделями поведения.

    Теперь обратим внимание на сами сценарии. В версии сценария для ColdFusion (кстати, самой простой из всех) сервер получает указание, что если количество записей больше пяти (количество записей, которые одновременно могут отображаться на экране), следует выполнять весь код, идущий после этой строки. Этим кодом является таблица, в которой содержится навигационная панель для перемещения между записями. Если количество записей меньше пяти (так что условие возвращает значение false [ложь]), сценарий переходит к коду, закрывающему конструкцию (он еще не написан), после чего продолжается дальнейшая обработка страницы. Другими словами, если количество записей меньше пяти, таблица, содержащая навигационную панель для перемещения между записями, не отображается. Эта гибкая структура довольно удобна, поскольку вне зависимости от того, что происходит в базе данных (имеется в виду удаление или добавление туров), навигационная панель для перемещения между записями окажется доступной только в случае, если в ней возникнет необходимость.

    версии кода для ASP вызывается пара переменных, сгенерированных объектом Recordset Navigation Bar (Навигационная панель для перемещения между записями), добавленным на страницу в предыдущем уроке. Для полного понимания назначения этой строки требуется понимать код VBScript, выводимый на страницу объектом Recordset Navigation Bar, а также около 300 строк кода, благодаря которым работает сама модель поведения. Все это не является целью этой книги. Короче говоря, сценарий определяет, умещаются ли возвращенные записи на одной странице. В первом случае таблица с навигационной панелью отображается, и, напротив, если записи не помещаются на странице, таблица будет скрыта.


    Скрытие навигационной панели

    Версия сценария для PHP несколько проще. Добавленная ранее серверная модель поведения создала переменную $totalPages_rs_tourDetail, которая используется сценарием, чтобы отследить общее количество страниц с записями. Это количество рассчитывается на основе общего количества записей и количества записей, выводимых на страницу. Переменная проверяется на равенство нулю. Если существует только одна страница с записями, то значение переменной равно нулю, а если три страницы, – значение равно 2 (это может показаться странным). Таким образом, известно, что если значение переменной не равно нулю (оператор != означает "не равно"), следовательно, записи распределены по двум страницам или более, и требуется навигационная панель для перемещения между ними. Если же значение равно 0, весь код в теле условия пропускается, и навигационная панель не отображается.

    Скрытие навигационной панели
    увеличить изображение

  • После закрывающего тега
  • и и
    , относящегося к таблице, выделенной в шаге 6, поместите код, закрывающий условный блок, созданный на предыдущем шаге.

    Для ASP:

    <% End If %>

    Для ColdFusion:



    Для PHP:



    Это внешняя граница условной конструкции. Если при обработке условия, расположенного в открывающей строке, возвращается значение false (ложь), обработчик ASP, ColdFusion или PHP сразу переходит в конец блока.

    Скрытие навигационной панели

    Если теперь протестировать страницу (как говорилось ранее, проверять ее следует при переходе по ссылке региона со страниц tours.asp или index.asp), то навигационная панель для перемещения между записями отображаться не будет. Для полной уверенности в правильности работы страницы нужно закомментировать второй участок SQL-кода и удалить символы комментариев, добавленных вокруг первого, снова потом вновь проверить страницу, на этот раз без фильтрации. При этом будут показаны все путешествия, а для перемещения между ними загрузится навигационная панель. В этом случае после завершении тестирования нужно снова закомментировать первый запрос и активировать второй.

  • Сохраните и закройте страницу tours_detail.asp.


  • Содержание Назад Вперед

    Аутентификация пользователя в веб-приложении

    Активация управления сессиями (только пользователям PHP с Windows)

    Когда PHP устанавливается с настройками по умолчанию, управление сессиями включено. Когда код PHP действительно начинает использовать сессии, он сохраняет информацию о производимых посетителем операциях в текстовом файле. Этот текстовый файл устанавливается во время установки PHP или, по крайней мере, должен. К сожалению, в некоторых версиях PHP для Windows по умолчанию присутствует неправильный путь к этому файлу. В результате появляются неприятные сообщения об ошибках (см. рис. вверху следующей страницы).
    Если при тестировании страницы login.php сообщение об ошибке не появляется, значит, все в порядке и следует перейти к разделу "Ограничение доступа на страницы".
    Если присмотреться к сообщению об ошибке более внимательно, станет очевидно, что страница пытается открыть файл с неправильным путем, – что-то вроде /tmp\sess_sess_6002c7a1f3cba0838a25d6e86e596b15, 0_RDWR). Путь необычен тем, что начинается с косой черты (/), в то время как для записи пути для Windows применяется символ обратной косой черты (\). Скорее всего, эта ошибка происходит из PHP для Unix, поскольку все пути в Unix-системах (в том числе, и в Mac OS X) обозначаются косыми чертами. Но хуже всего то, что папки, поиск которой проводит сценарий (tmp), не существует.
    Активация управления сессиями (только пользователям PHP с Windows)
    увеличить изображение

    Исправить эту проблему относительно просто. Для этого требуется выполнить два шага:
  • изменить .ini-файл, в котором указан путь, используемый PHP для подключения к каталогу сессии;
  • создать каталог, на который будет указывать .ini-файл.
  • Найдите файл, расположенный по адресу C:\windows\php.ini . Дважды щелкните на нем, чтобы открыть его в программе NotePad (Блокнот).
    В файле содержится множество указаний по настройке PHP. Как известно, в Unix наиболее распространенным интерфейсом является не диалоговое окно или Мастер, а текстовый файл.
  • При помощи функции поиска (при выполнении команд Edit\Find [Правка\Найти]) найдите надпись session.save_path. В той же строке найдите путь, определяющий расположение каталога для сохранения данных.

    Активация управления сессиями (только пользователям PHP с Windows)

    Все строки, в начале которых присутствует точка с запятой, закомментированы. В большинстве таких строк содержатся инструкции и описания. Таким образом, скорее всего, первый найденный экземпляр session.save_path будет содержаться в составе комментария, а не в самом коде.

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

    Активация управления сессиями (только пользователям PHP с Windows)
    увеличить изображение

  • Измените путь так, чтобы он соответствовал указанной записи:

    C:\php-[номер_версии]-Win32\temp\

    Этот адрес следует ввести без изменений, но вместо [номер_версии] нужно задать номер используемой версии PHP.

    Если версия PHP неизвестна, следует перейти в каталог C:\ и посмотреть имя папки, в которой хранятся файлы PHP. Как правило, в имени папки содержится и номер версии.

    Активация управления сессиями (только пользователям PHP с Windows)

  • Сохраните и закройте файл php.ini.

    Информация о месте хранения данных сессии будет обновлена.

  • При помощи значка Apache, расположенного на панели задач, остановите и снова запустите Apache.

    При этом информация из файла php.ini. будет перезагружена, и новые данные вступят в силу.

    Активация управления сессиями (только пользователям PHP с Windows)

  • Откройте окно Windows Explorer (Проводник) (или другой менеджер файлов), перейдите в папку C:\php-[номер_версии]-Win32\ и убедитесь, что внутри нее содержится папка под названием temp.

    Если такой папки не существует, следует ее создать.

    Активация управления сессиями (только пользователям PHP с Windows)
    увеличить изображение



  • Содержание Назад Вперед

    Аутентификация пользователя в веб-приложении

    Как обычно, прежде чем начинать работу с серверными моделями поведения, на основе которых можно разработать программные средства для аутентификации, важно понять принципы их работы. Пользователь может зайти на страницу с ограниченным доступом только в том случае, если он ввел правильные данные доступа. Обычно подобные данные состоят из имени пользователя и пароля. После их ввода в базу отправляется запрос ASP, ColdFusion или PHP, проверяющий, содержатся ли в какой-нибудь записи введенные имя пользователя и пароль. Если ответ положительный, проверка завершается успешно, и пользователь регистрируется как вошедший в систему (как правило, незамедлительно). Если в базе данных нет записей, в которых бы одновременно присутствовали введенные имя пользователя и пароль, вход в систему завершается, и посетитель переводится на страницу, содержащую сообщение о том, что вход в систему завершен неудачно.
    В начале кода любой страницы с ограниченным доступом содержится сценарий, проверяющий, вошел ли пользователь в систему. Если результат проверки оказывается положительным, страница обрабатывается дальше и отображается в браузере. Если же пользователь не вошел в систему, он, как правило, переводится на страницу, позволяющую ввести данные пользователя, но страница с ограниченным доступом не загружается.
    За одним исключением, полученных в книге знаний достаточно, чтобы понять, как процедура регистрации реализуется в ASP, ColdFusion или PHP. Этим исключением является понятие о маркировке пользователя как вошедшего в систему и проверка при переходе с одной страницы на другую. Поскольку сервер забывает посетителя при загрузке каждой новой страницы, установка отметки в виде флажкового индикатора (флага) и проверка ее существования являются проблематичными. "Забывчивость" сервера преодолевалась в предыдущих уроках путем пересылки переменных URL-адреса (или запроса) и переменных формы между страницами. Но эти решения являются временными, и для их реализации необходимо вручную пересылать данные на каждую страницу, которой они требуются. Поэтому целесообразно отыскать более предпочтительное и эффективное средство, которое бы устраняло указанный недостаток.
    В книге уже появлялся один вид продолжительно существующих переменных – переменные файла cookie. Как известно, переменная файла cookie – это имя и соответствующее ему значение, которые хранятся в файле на жестком диске компьютера у посетителя и пересылаются на сервер вместе с HTTP-запросом. Употребление этого приема позволяет серверу "помнить" пользователя при переходе между страницами. Это выражается в том, что страницы используют данные, хранящиеся в файле cookie, и реагируют на них.
    Чтобы облегчить создание приложений, в которых требуется постоянно отслеживать перемещение посетителей и данных, ASP, ColdFusion и PHP содержат встроенные возможности, которые выполняют значительную часть рутинной работы за разработчика. Среди этих возможностей существуют два типа переменных, каждый со своей областью видимости: переменные приложения (application variables) и переменные сессии (session variables).
  • Переменные, существующие в рамках приложения, содержат любую изменчивую информацию, которая должна использоваться всеми страницами приложения, вне зависимости от пользователя. К примеру, чтобы добавить на каждую страницу сайта информацию о респонденте, с которым следует связаться по тем или иным вопросам, достаточно присвоить значения имени и контактных данных переменной приложения и прикрепить эту переменную на каждую страницу. Это значительно проще, чем указывать одну и ту же информацию на всех страницах самостоятельно. Если впоследствии сведения о респонденте изменятся, достаточно внести коррективы в значения переменной приложения, после чего информация будет обновлена по всему сайту. Область видимости приложения реализована только в ASP и ColdFusion, однако ее легко сымитировать и в PHP.
  • Переменные, существующие в рамках сессии, включают информацию для отдельного пользователя в специально создаваемой сессии. Если посетитель покидает сайт или закрывает браузер, то через определенное время (обычно 20 мин) сессия завершается и информация удаляется из памяти.
  • Примечание. ColdFusion содержит также встроенную область видимости Client, позволяющую хранить данные одного клиента в течение нескольких сессий. В этой книге она не рассматривается.

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

    Ключевым понятием здесь является продолжительность существования переменной. При помощи более эффективных средств для создания приложений ASP, ColdFusion и PHP позволяют разработчикам создавать сайты, на которых данные сохраняются в течение определенного времени, что позволяет преодолеть ограничения, характерные для протокола HTTP, не использующего информацию о состоянии. Эта возможность долговременного хранения является решающим фактором не только в приложении для аутентификации пользователей, но и в работе многих других программ. Сложно представить Интернет-магазин, который забыл о своем покупателе при переключении со страницы, в которую был введен адрес доставки, на страницу для ввода данных кредитной карты. Если в такой ситуации оплатить покупку, ее могут доставить кому-нибудь другому.

    Чтобы данные продолжали существовать в течение определенного времени, они должны где-то храниться. Место хранения зависит от области видимости переменной. Переменные приложения, как правило, хранятся в памяти сервера. По этой причине переменные приложений должны занимать как можно меньше места.

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

    Для реализации этого механизма ASP, ColdFusion и (в определенной степени) PHP распознают набор страниц, из которых состоит сайт в качестве единого объекта – приложения. Разные страницы являются частью приложения, когда у них есть доступ к одним и тем же данным сессии и приложения. Несмотря на то, что увидеть приложение целиком невозможно – это не физический объект, – оно все же существует. Веб-приложения состоят из наборов файлов, которыми ASP, ColdFusion или PHP управляет как одной группой.

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

    В PHP отсутствует прямой аналог страниц global.asa и application.cfm. Однако реализовать в PHP их действие довольно просто. Например, одной из самых важных особенностей страницы application.cfm является то, что она позволяет создавать сессии, переменные сессии, а так же управлять сессиями. Разработчик активирует управление сессиями в файл application.cfm, после чего ColdFusion автоматически приставляет этот файл к каждой странице, запрошенной в рамках приложения. Другими словами, управление сессиями в ColdFusion работает таким образом, что на завершающем этапе анализа, после того, как ColdFusion добавит к каждому файлу содержимое application.cfm, вверху каждой страницы будет вставлен код, разрешающий проведение сессии. В PHP (версии 4.1 и выше), чтобы разрешить использование сессий вверху страницы, вставляется метод session_start(). Другой способ – создать файл, содержащий только вызов этого метода, после чего включить файл в верхнюю часть каждой страницы. Таким образом, несмотря на то, что PHP значительно отличается от ASP и ColdFusion, сходные черты являются более весомыми, чем различия.

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

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

    Ограничение доступа на страницы

    К этому моменту страницы регистрации и доступа при тестировании должны работать как нужно. Но поскольку доступ к страницам не ограничен, приложение для регистрации и получения доступа остается бесполезным. В этом упражнении в приложение будут добавлены модели поведения, запрещающие доступ на страницы до тех пор, пока посетитель не введет данные доступа.
  • Откройте файл profiles.asp.
    Это одна из страниц, для доступа на которую посетитель должен ввести имя пользователя и пароль.
  • Щелкните в любом месте страницы и вставьте серверную модель поведения Restrict Access to Page (Ограничить доступ на страницу), расположенную в категории User Authentication (Аутентификации пользователя) на панели Server Behaviors (Модели поведения серверов). В группе Restrict based on (Ограничить на основе) включите переключатель Username, password, and access level (Имя пользователя, пароль и уровень доступа).
    Диалоговое окно дает возможность не просто ограничить доступ на страницу. Оно позволяет вводить ограничения в зависимости от уровня доступа пользователя.
    В области Select level(s) (Выбрать уровень) не указано ни одного уровня, так что их следует указать самостоятельно.
    Ограничение доступа на страницы

  • Нажмите кнопку Define (Определить). В диалоговом окне Define Access Levels (Определение уровней доступа) поместите курсор в поле Name (Имя), введите имя "visitor" и нажмите кнопку со знаком плюс ("+"). Повторите операцию, чтобы добавить имя admin. Нажмите OK.
    Dreamweaver не проверяет, существуют ли указанные группы на самом деле, так что следует внимательно проверить правильность написания их имен. Эти имена соответствуют доступным значениям в поле userGroup таблицы tbl_users. Зная имена групп, Dreamweaver обеспечивает доступ на страницы пользователям, находящимся в обеих группах, и запрещает доступ пользователям, не состоящим ни в одной.
    Ограничение доступа на страницы

  • В диалоговом окне Restrict Access to Page (Ограничение доступа на страницу), удерживая клавишу (Ctrl) (Windows) или (Command) (Macin-tosh), выделите имена "visitor" и "admin", добавленные в область Select level(s) (Выбрать уровень [уровни]). В поле If access denied, go to (Если права доступа определены, перейдите к) укажите страницу login.asp. Нажмите OK.

    На этом шаге решены еще две задачи. Во-первых, обеспечен доступ на страницы пользователям, которые относятся к группе visitor или admin. Если бы возникла необходимость обеспечить доступ на страницы только пользователям из одной группы, нужно было бы выбрать в диалоговом окне только одну группу. После создания раздела для администрирования права доступа к нему будут переданы только пользователям из группы admin – при помощи этого же диалогового окна.

    Другая решенная задача – это перенаправление посетителя на страницу login.asp в случае, если доступ будет отклонен. Это похоже на загрузку страницы доступа при попытке посетителя, который не ввел данные доступа, попасть на закрытую страницу. После того, как данные доступа введены, загружается закрытая страница, на которую посетитель пытался попасть.

    Ограничение доступа на страницы

  • Повторите шаги с 1 по 4 для каждого из приведенных ниже файлов:

    profiles_detail.asp

    tourprice.asp

    tourprice_processor.asp

    tours.asp

    tours_detail.asp

    Для доступа на каждую из этих страниц требуется аутентификация.

  • Сохраните и загрузите на сервер все страницы, над которыми проводилась работа в этом уроке, и, открыв в браузере главную страницу index.asp, попытайтесь получить доступ на страницы с описаниями путешествий и информацией о странах.

    Теперь приложение для аутентификации полностью функционирует. При попытке попасть на закрытую страницу появляется окно доступа. Если при тестировании приложения ранее была зарегистрирована учетная запись, сейчас самое время ей воспользоваться. Для тестирования также подходят адрес электронный почты osiris@allectomedia.com и пароль "osiris". После получения прав доступа автоматически загрузится страница, которая была запрошена изначально.

    Ограничение доступа на страницы
    увеличить изображение

    Примечание. При использовании PHP версии 4.2 и выше окажется, что после ввода данных доступа вместо запрошенной изначально страницы загружается главная страница. Причина заключается в том, что для работы серверной модели поведения, которая переводит посетителя на запрошенную ранее страницу, требуется включенная настройка register_globals. В PHP 4.2 настройка register_globals отключена. Следует изменить значение настройки в файле php.ini (с off на on), после чего сайт будет работать надлежащим образом. Однако настройка отключена не зря, поскольку она создает потенциальную брешь в безопасности PHP. Таким образом, прежде чем заходить в php.ini и включать настройку, рекомендуется выйти в сеть и поискать решение проблемы.
  • Откройте страницу index.asp и в нижнюю часть навигационной панели добавьте ссылки на страницы регистрации и доступа: Register (Free!) и Log In.

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

    Ограничение доступа на страницы
    увеличить изображение



  • Содержание Назад Вперед

    Создание файла application.cfm (только пользователям ColdFusion)

    Одной из функций серверной модели поведения Log In User (Регистрация пользователя) в случае успешного доступа является создание переменной сессии. Проблема заключается в том, что по умолчанию область видимости сессии отключена, а, следовательно, страница доступа не будет работать. Для активации управления сессиями в приложении ColdFusion требуется просто создать новый файл (application.cfm) и ввести в него единственную строку кода.
  • Создайте новую страницу. В режиме Code (Код) удалите со страницы весь код, в том числе теги HTML, XML и прочие.
    Файл application.cfm не является простой веб-страницей, но при создании он должен быть пустым.
  • В первой строке введите следующий код:

    Тег эффективно создает приложение и обеспечивает его работу. В нем содержится несколько атрибутов, многие из которых не-обязательны. Единственным обязательным атрибутом является name, значением которого может быть любое имя, присвоенное приложению. Остальные атрибуты, присутствующие в приведенном коде, активируют управление сессиями, позволяют создавать файлы cookie и задают время окончания сессии.
    Как можно понять из кода, атрибут sessiontimeout, задающий период времени, содержит функцию CreateTimeSpan(). Эта функция имеет четыре параметра, соответствующих количеству дней, часов, минут и секунд. Таким образом, в данном случае значение sessiontimeout равно 20 мин. Другими словами, если пользователь не проявляет активности на сайте в течение 20 мин или покидает сайт и не возвращается в тот же промежуток времени, все переменные сессии, связанные с этим пользователем, удаляются. На практике это означает, что посетителю придется снова вводить данные доступа.
    Создание файла application.cfm (только пользователям ColdFusion)
    увеличить изображение

  • Сохраните файл application.cfm, закройте и загрузите на сервер.
    После этого можно тестировать созданное приложение. Как говорилось выше, рекомендуется проверить реакции приложения на различные ошибки в заполнении формы.


  • Содержание Назад Вперед

    Создание страниц для регистрации

    Необходимость ввода данных доступа предполагает наличие в базе данных правильных имен пользователя и паролей. Лучшим способом записи этих сведений в базу данных является форма регистрации, которая и будет фиксировать их. Подобная задача не типична для тех манипуляций с базами данных, с помощью которых велась работа на протяжении нескольких последних уроков. В этих уроках данные извлекались из базы данных, фильтровались, обрабатывались и передавались пользователю. Теперь пользователь получает возможность записать информацию в базу данных самостоятельно. К счастью, Dreamweaver содержит модель поведения, которая позволяет с легкостью реализовать эту задачу.
    Но простого добавления информации недостаточно. Также следует убедиться в том, что, по крайней мере, два человека не использовали одно и то же имя пользователя. Для предотвращения этой ситуации будет использована одна модель из целого набора серверных моделей поведения для проведения аутентификации – Check New Username (Проверить имя нового пользователя). Если в базе данных отсутствует пользователь с тем же самым именем, пользователь будет зарегистрирован и переведен на соответствующую страницу доступа. Если такое имя уже существует, пользователь переводится на страницу с сообщением о неудачной регистрации.
  • Откройте страницу generic_template.asp. Сохраните ее как register.asp. На панели инструментов присвойте ей заголовок "Newland Tours: Register" (поле Title). Вместо заменителя добавьте заголовок "Please Register to Use the Site" ("Пожалуйста, зарегистрируйтесь на сайте").
    Страница готова к дальнейшей обработке.
  • Удалите строку, заменяющую текст и вставьте на страницу форму. На панели Property Inspector (Инспектор свойств) присвойте форме имя frm_register (опции в списках Action [Действие] и Method [Метод] на этот раз оставьте без изменений). Поместите курсор внутри формы и вставьте таблицу со следующими параметрами:
    Создание страниц для регистрации
    увеличить изображение

    Rows: 10 (Строк: 10) Columns: 2 (Столбцов: 2) Width: 95% (Ширина: 95%) Border thickness: 0 (Толщина границы: 0) Cell padding: 3 (Заполнение ячейки: 3) Cell spacing: 0 (Расстояние между ячейками: 0)

    Таблица предназначена для упорядочения элементов формы.

    Создание страниц для регистрации
    увеличить изображение

  • Вставьте в таблицу текстовые поля и кнопку Submit, как показано на рисунке. На панели Property Inspector (Инспектор свойств) присвойте полям следующие имена:

    firstName (имя) lastName (фамилия) username (имя пользователя) pwd (пароль) address1 (адрес1) city (город) state_province (штат/область) zip_postal (почтовый индекс) country (страна)

    Очень важно ввести все имена. Если оставить имена без изменений (textfield1, textfield2 и т.д.), очень скоро придется об этом пожалеть. Следует всегда присваивать текстовым полям осмысленные имена, в противном случае становится почти невозможным создавать сценарии, использующие данные из этих полей. Вдобавок, имена полей, приведенные выше, соответствуют именам полей в базе данных, куда будет записана вводимая в форму информация, – так что задача добавления серверной модели поведения, вставляющей записи в форму, значительно облегчается.

    Для увеличения или уменьшения длины текстовых полей применяется настройка Char Width (Размер поля), расположенная на панели Property Inspector (Инспектор свойств). Например, чтобы добавить какой-либо адрес в поле address1, следует установить значение этого параметра равным 55.

    Рекомендуется перетащить границу между столбцами влево, чтобы увеличить ширину правого столбца.

    Создание страниц для регистрации
    увеличить изображение

  • Поместите курсор в пустой ячейке слева от кнопки Submit. Нажмите кнопку Hidden Field (Скрытое поле), расположенную в категории Forms (Формы) на панели Insert (Вставка), чтобы вставить в ячейку скрытое поле. Присвойте ему имя userGroup, а в качестве значения укажите visitor.

    Смысл этого шага прояснится после того, как станет понятно, что за этим последует.

    Скрытые поля применяются в формах для того, чтобы пересылать заранее определенные данные. В данном случае, после подтверждения заполнения формы наряду с переменными, взятыми из полей (например, firstName=Lyra и lastName=Bellaqua), форма перешлет и переменную userGroup=visitor. В отличие от переменных firstName и lastName, переменная userGroup предназначена только для чтения, то есть пользователи не смогут изменить ее значение.


    Создание страниц для регистрации
    увеличить изображение

    Для чего же предназначена переменная userGroup? Как говорилось ранее, сайт будет предназначен для трех групп посетителей – незарегистрированных посетителей, зарегистрированных посетителей и сотрудников компании Newland Tours. У двух групп пользователей – зарегистрированных посетителей и сотрудников компании будут разные права. Сотрудники будут иметь доступ ко всем функциям управления сайтом, в отличие от зарегистрированных посетителей. Сложность заключается в том, что обе группы пользователей будут вводить данные доступа в одну и ту же форму. Таким образом, сценарий доступа должен как-то различать разные типы пользователей. Для этого в базе данных он проверяет, к какой группе пользователей относится тот или иной посетитель. Нужный параметр расположен в записях пользователей, которые хранятся в таблице tbl_users. Понятно, что пользователи не должны иметь возможности самостоятельно изменять свою группу, поэтому сначала каждый, кто заполняет форму доступа, относится к группе посетителей (значение visitor).

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

  • Нажмите кнопку Submit, а затем на панели Server Behaviors (Модели поведения серверов) щелкните на кнопке Add Server Behavior (Добавить модель поведения сервера) ("+"), чтобы добавить модель поведения Insert Record (Вставить запись).

    Модель поведения Insert Record сверяет данные, введенные в форму посетителем, с полями в базе данных, после чего создает в базе новую запись и наполняет введенными данными.

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




  • Создание страниц для регистрации

    В отдельных разделах этой книги было создано достаточно много запросов, так что большая часть диалогового окна не представляет собой ничего нового (особенно настройки Connection [Соединение] и Insert into table [Вставить в таблицу]). Так же, как в случае с диалоговым окном Recordset (Набор записей), в диалоговом окне Insert Record создается SQL-запрос. Но в отличие от запросов, создаваемых ранее в диалоговом окне Recordset, запросы, которые создаются в этом окне, не извлекают данные из базы, а наоборот – вставляют их.

    Примечание. В случае с ColdFusion и PHP диалоговое окно Insert Record (Вставка записи) несколько отличается от того, которое показано на примере и предназначено для ASP. Однако в значительной мере все различия носят поверхностный характер. Обо всех значимых отличиях в тексте говорится особо.

    Создание страниц для регистрации
    увеличить изображение

    Как уже говорилось, добавление данных здесь необходимо для проведения операции сравнения. Один элемент данных из формы сравнивается с отдельным полем базы данных. Нижняя половина диалогового окна предназначена именно для сравнения соответствующих данных. Каждый элемент должен соответствовать следующему синтаксису: (для ASP) item_x inserts into column "item_x" (Text) или (для ColdFusion и PHP) item_x Gets Value From 'FORM.item_x' as 'Text'. Одним экземпляром элемента item_x является значение поля из формы (оно расположено слева в ASP и справа в ColdFusion и PHP). Другим является имя столбца в таблице (справа в ASP и слева в ColdFusion и PHP). Слово Text означает тип переменной (например, text (текстовый), date (дата), integer (число целого типа) и т.д.).

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


    Если есть поля, не имеющие соответствующего столбца (кроме userID и address2, у которых не должно быть соответствующего столбца или значения, они будут использованы в ColdFusion и PHP), следует выделить их и выбрать правильное значение в раскрывающемся списке Column (ASP) или Value (ColdFusion и PHP), расположенном внизу диалогового окна. Если точно следовать всем шагам в этом упражнении, лишних полей оказаться не должно, за исключением случая если во время присвоения имен полям формы не была допущена опечатка.

  • Нажмите OK.

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

  • Снова выделите кнопку Submit и на этот раз добавьте серверную модель поведения Check New Username (Проверить имя нового пользователя), которая содержится в подменю раздела User Authentification (Аутентификация пользователя) нового меню Server Behavior (Модель поведения сервера).

    Эта серверная модель поведения будет проверять, окажется ли введенное имя пользователя единственным в базе данных.

  • В диалоговом окне Check New Username (Проверить имя нового пользователя) в списке Username (Имя пользователя) выберите пункт username (в случае с ColdFusion – FORM.username). В поле If already exists, go to (если уже существует, перейти к) укажите страницу registration_failed.asp. Нажмите OK.

    Это позволяет проверить, были ли данные, введенные в поле username, прежде добавлены в базу. Поскольку в качестве имени пользователя используется адрес электронной почты, для большинства посетителей это не будет проблемой.

    Создание страниц для регистрации

  • В окне документа снова выберите кнопку Submit и с помощью панели Behaviors (Модели поведения) (не Server Behaviors [Модели поведения серверов]) добавьте модель поведения Validate Form (Форма для оценки достоверности данных). Сделайте заполнение каждого поля обязательным, установив для всех полей флажок Required (Обязательный). Поле username должно принимать только адрес электронной почты (в группе Accept [Принимаю] следует включить переключатель Email address [Адрес электронной почты]).


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

    Создание страниц для регистрации

  • Сохраните страницу register.asp и загрузите ее на сервер.

    Тестировать страницу пока не нужно, поскольку вне зависимости от того, как пройдет регистрация, посетитель переводится на страницу, которой еще не существует.

  • Используя страницу generic_template.asp в качестве основы, создайте новую страницу registration_failed.asp. В поле Title (Заголовок), расположенном на панели инструментов, присвойте странице заголовок "Newland Tours: Registration Failed" ("Newland Tours: регистрация прошла неудачно"). Измените ее таким образом, чтобы она выглядела так же, как на приведенном ниже рисунке. Ссылка должна указывать на страницу register.asp.

    Посетители будут направлены на эту страницу, если серверная модель поведения Check New Username (Проверить имя нового пользователя) обнаружит, что указанное имя пользователя уже имеется в базе данных.



  • Создание страниц для регистрации
    увеличить изображение

    Создание страницы доступа

    После успешной регистрации пора создать страницу доступа. Ее задача заключается в том, чтобы посредством формы получить от посетителя имя пользователя и пароль. После этого полученные значения сравниваются с записями в таблице tbl_users. При нахождении соответствия сценарий доступа устанавливает переменную сессии, которая указывает, что посетитель получил доступ. Если соответствия не найдено, посетитель переводится на страницу с сообщением о том, что доступ отклонен.
  • Используя в качестве основы страницу generic_template.asp, создайте новый файл login.asp. На панели инструментов присвойте ему заголовок "Newland Tours: Log In". Вместо заменителя заголовка на странице введите текст "Please Log In" ("Зарегистрируйтесь, пожалуйста").
    Основная часть страницы готова.
    Создание страницы доступа
    увеличить изображение

  • На место первой строки текста вставьте форму. Присвойте форме имя frm_login. Добавьте к ней таблицу со следующими параметрами:
    Rows: 3 (Строк: 3) Columns: 2 (Столбцов: 2) Width: 95% (Ширина: 95%) Border thickness: 0 (Толщина границы: 0) Cell padding: 3 (Заполнение ячейки: 3) Cell spacing: 0 (Расстояние между ячейками: 0)
    Добавленная таблица снова предназначена для упорядочения элементов формы. Как и в случае с предыдущей формой, менять опции в списках Action (действие) и Method (Метод) не требуется. Обе опции необходимы для работы формы, однако они настраиваются автоматически при добавлении серверной модели поведения.
    Создание страницы доступа
    увеличить изображение

  • Вставьте два текстовых поля и кнопку Submit. Текстовому полю рядом с надписью Email Address (Адрес электронной почты) присвойте имя username, а текстовому полю рядом с надписью Password (Пароль) – pwd. На панели Property Inspector (Инспектор свойств) для текстового поля pwd выберите тип Password.
    Форма готова, но пока не работает.
  • Щелкните на кнопке Submit, затем в панели Server Behaviors (Модели поведения серверов) выполните команды User Authentication\Log In User (Аутентификацию пользователя\Регистрация пользователя).

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

  • В верхней четверти диалогового окна Log In User (Регистрация пользователя) выберите форму frm_login, в поле со списком Username field (Поле для имени пользователя) выберите вариант username, а в поле со списком Password field (Поле для пароля) — вариант pwd. Во второй четверти диалогового окна в качестве соединения укажите conn_newland, задайте таблицу tbl_users. В поле со списком Username column (Столбец для имен пользователей) укажите username, а в поле со списком Password column (Столбец для паролей) –pwd.

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

  • В третьей четверти диалогового окна Log In User (Регистрация пользователя) в качестве страницы, на которую посетитель переводится в случае успешного доступа, укажите страницу index.asp, а в качестве страницы, загружаемой после неудачного доступа – страницу login_failed.asp. Флажок Go to previous URL (Перейти к предыдущему URL) должен быть установлен. В четвертой четверти диалогового окна выберите вариант Username, password and access level (Имя пользователя, пароль и уровень доступа), а в списке Get level from (Получить уровень от) выберите пункт userGroup. Нажмите OK.

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

    Настройка Go to previous URL требует некоторого объяснения. Посетители попадают на страницу доступа двумя способами. Первый способ – это прямой переход по ссылке Log In, расположенной на главной странице. Но та же самая страница доступа загрузится и в том случае, если посетитель, который не ввел данные доступа, пытается зайти на закрытую страницу. Таким образом, страница доступа может задерживать перемещение посетителей по сайту. При вводе данных доступа посетитель не обязательно хочет попасть на главную страницу, например, если ранее он щелкнул на ссылке для просмотра информации о странах или путешествиях. Эта настройка добавляет в сценарий специальный код: после того, как посетитель введет данные доступа, он переводится на страницу, которую до этого пытался загрузить.Во-вторых, другая задача, которая решается на этом шаге, – это разделение пользователей, о котором говорилось ранее на группы. Это позволит различить зарегистрированных пользователей и сотрудников компании. Поскольку уровни доступа хранятся в поле userGroup таблицы tbl_users, эта информация задается в меню Get level from (Получить уровень от).


    Создание страницы доступа

  • Щелкните на кнопке Submit и добавьте модель поведения Form Validation (Форма для оценки достоверности данных), которая делает обязательным заполнение обоих полей.

    К каждой форме рекомендуется прикреплять сценарий для проверки заполнения.

    Создание страницы доступа

  • Ниже формы добавьте абзац со следующим текстом: "If you don’t already have an account, please register for a free account" ("Если у вас еще нет учетной записи, введите ее"). К слову "register" прикрепите ссылку на страницу register.asp. Сохраните страницу и загрузите ее на сервер.

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

    Создание страницы доступа
    увеличить изображение

  • На основе шаблона generic_template.asp создайте страницу login_failed.asp. На панели инструментов присвойте ей заголовок "Newland Tours: Login failed" ("Newland Tours: Неудачная попытка регистрации"). Вместо заменителя заголовка, расположенного на странице, введите текст "Login Failed". Ниже введите следующий текст: "Your username and password combination was not recognized. Try again" ("Веденные Вами имя пользователя и пароль не опознаны. Повторите ввод еще раз"). Прикрепите к словам "Try again" ссылку на страницу login.asp.

    Создание страницы доступа
    увеличить изображение

    Конечно, статические страницы устарели, но частично применяются и сегодня.

    Пользователи ASP уже могут протестировать приложение. Для этого следует открыть страницу register.asp и заполнить форму. Для проверки реакции приложения на ошибки рекомендуется вводить в форму неправильные данные, например, дважды зарегистрировать одно и то же имя пользователя или указать неправильный пароль, либо вместо адреса электронной почты ввести номер телефона и т.д.

    Пользователям ColdFusion прежде чем проверить работу приложения, потребуется выполнить еще одну небольшую процедуру: создать файл application.cfm, управляющий работой веб-приложения. Пользователям ASP о создании файла global.asa волноваться не следует, поскольку ASP прекрасно управляет сессиями и без него.

    У пользователей PHP также может возникнуть необходимость совершить дополнительные действия. В зависимости от настроек управление сессиями может не функционировать. Эта проблема обычно касается пользователей PHP, у которых на машинах установлена операционная система Windows, а не Mac OS. Подробное описание проблемы приведено в разделе "Активация управления сессиями (только для пользователей PHP под Windows)".



  • Содержание Назад Вперед

    Создание административного раздела

    Два подхода к форматированию записей, хранящихся в базе данных

    После создания основы для административного раздела следует переходить к реализации его функций. В этом упражнении будет создана форма, позволяющая добавлять в раздел "Traveler’s Journal" новые записи, которые немедленно будут выводиться на страницу. Данные, вводимые в форму, сохраняются в таблице tbl_journal. Именно отсюда при загрузке страницы index.asp извлекается содержимое раздела "Tra-veler’s Journal".
    Два подхода к форматированию записей, хранящихся в базе данных

    Все элементы в колонке "Traveler’s Journal" соответствующим образом отформатированы. Заголовок заключен в теги

    , строка с именем автора заключена в тег , к которому применен класс author. Кроме того, каждый абзац текста заключен в наборы тегов . Чтобы вводимый в форму текст выводился на страницу размеченным и отформатированным, применяются два подхода.
  • Отделить каждый элемент. В этом случае в форме и в базе данных для заголовка создается отдельное поле. Затем элемент

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

  • Вместе с текстом сохранить в таблице базы данных и теги разметки. Таким образом, разметка хранится в базе вместе с текстом и извлекается при его извлечении. После того, как этот текст будет динамически добавлен сервером на страницу и передан клиенту, браузер не отличит его от статического кода и отобразит как обычный HTML-код.

  • Каждый подход имеет свои преимущества и недостатки, при этом один подход не исключает другого, – так что в случае необходимости они могут сочетаться. Преимущество разделения элементов заключается в том, что HTML-теги остаются жестко прикрепленными к странице и не добавляются в базу данных. Недостатком подхода является необходимость использовать только элементы блокового уровня. То есть, сохранить весь заголовок и поместить его внутрь тега

    не представляется сложным, но затруднительно выделить курсивом одно слово в заголовке. Другой недостаток заключается в том, что для реализации подхода требуется большее количество полей, как в форме, так и в базе данных. Если запись для раздела "Traveler’s Journal" сделана в текстовом процессоре, то для того, чтобы перенести ее в форму, требуется вставлять каждый участок по отдельности.
    Подход с HTML-тегами, внедренными в текст, имеет свои сильные стороны и ограничения. Основное преимущество заключается в возможности использовать при форматировании любые приемы, например, выделять слова курсивом или жирным шрифтом, изменять их цвет и размер. Слабость подхода состоит в том, что пользователь должен добавлять HTML-теги вручную. Одна из основных целей создания CMS – это возможность управлять содержимым без специальной подготовки, так что необходимость кодирования вручную сводит на нет ключевое предназначение CMS.
    Во многих коммерческих CMS содержится простой графический интерфейс для форматирования, позволяющий добавлять HTML-теги, совершенно не зная о них. Например, когда пользователь щелкает на кнопке B, текст будет выделен с помощью полужирного начертания. Создание подобных функций не описывается в этой книге, но в этом нет ничего невозможного.
    Примечание. Для обновления раздела "Traveler’s Journal" прекрасно подходит программа Macromedia Contribute: пользователи смогут добавлять новый текст легко и быстро, при этом совершая необходимое форматирование. Тем не менее, останавливаться на этом не стоит. В последующих упражнениях для раздела будет создана CMS, поскольку это продемонстрирует принципы и приемы, которые полезно использовать в будущем.
    В этом упражнении будет реализован подход, при котором пользователи видят HTML-разметку, но при этом сами не должны создавать код. Вместо заменителей, расположенных по умолчанию между HTML-тегами, достаточно добавить необходимый текст.

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

    Использование переменных сессии и скрытых полей для отслеживания пользователей

    При использовании системы управления содержимым существует вероятность злоупотребления правами администратора. Если кто-то, скажем, использует доступ к форме для обновления раздела "Traveler’s Journal" с плохими намерениями, потребуется узнать, кто это сделал. А точнее, нужно будет узнать, какая учетная запись использовалась для этого. Это позволит выявить сотрудника, который несет ответственность (если это был сотрудник) или просто удалить учетную запись (если действия совершены кем-то другим). В этом упражнении будет вычислена учетная запись, использованная для получения доступа к административным страницам, после чего ее имя будет сохранено в поле, соответствующем полю journal_entry.
    Суть приема заключается в том, чтобы захватить данные, идентифицирующие пользователя, которые хранятся в переменной сессии, и скопировать это значение в форму при помощи скрытого поля. Данные в скрытом поле будут отослано вместе с содержимым текстового поля и сохранено в базе данных.
  • В документ admin_update_tj.asp слева от кнопки Submit вставьте скрытое поле. Назовите его author.
    В этом скрытом поле будет содержаться имя учетной записи, использованной для доступа на страницу. На данном шаге поле не имеет никакого значения, поскольку к нему не прикреплены никакие данные.
    Использование переменных сессии и скрытых полей для отслеживания пользователей

    Вопрос заключается в том, как выяснить, кому принадлежит использованная учетная запись. Чтобы найти ответ, следует подумать, какие данные доступны на странице. К странице прикреплена модель поведения Restrict Access to Page (Ограничить доступ к странице). Эта модель поведения проверяет наличие переменной сессии, которая создается после того, как пользователь получает доступ. Если переменная существует, модель поведения проверяет, относится ли пользователь к группе admin. Другими словами, чтобы пользователь оказался на странице, ему требуется ввести администраторские данные доступа. При этом страница может отследить, какие именно данные были введены. Поскольку информация уже содержится на странице в составе переменной формы, все что нужно – это прикрепить это значение к скрытому полю, после чего оно будет записано в базу данных вместе с остальными данными при подтверждении заполнения формы.
  • С помощью панели Bindings (Привязки) прикрепите на страницу новую переменную сессии (session variable). В диалоговом окне Session Variable (Переменная сессии) введите имя "MM_Username" и нажмите OK.

    MM_Username – это переменная сессии, которая создается после того, как пользователь получает доступ. Она создается автоматически при запуске серверной модели поведения Log In User (регистрация пользователя).

    При работе с панелью Bindings (Привязки) следует помнить одну важную вещь: на панели содержатся только те переменные, которые указывались вручную. Другими словами, несмотря на то, что переменная MM_Username используется в качестве переменной сессии, как часть серверной модели поведения Restrict Access to Page (Ограничить доступ к странице), она не появится в списке панели Bindings, пока не поместить ее туда специально.

    Использование переменных сессии и скрытых полей для отслеживания пользователей

  • Выделите скрытое поле, если необходимо, а затем на панели Bindings (Привязки) выполните команды Session\MM_Username и нажмите Bind (Прикрепить).

    Это действие прикрепляет значение переменной MM_Username (имя учетной записи, использованное для получения доступа на страницу) к скрытому полю. Данные автора теперь будут передаваться в базу данных вместе с введенным в форму текстом.

    Использование переменных сессии и скрытых полей для отслеживания пользователей



  • Содержание Назад Вперед

    Создание административного раздела

    После завершения работы над сайтом сотрудники Newland Tours смогут выполнять ряд административных задач, в том числе, добавление новых статей в раздел "Traveler’s Journal", управление профилями стран и описаниями путешествий. Права на выполнение этих действий будут предоставлены пользователям, состоящим в группе admin. Для облегчения работы сотрудников необходима главная административная страница, на которой содержатся ссылки на все задачи, выполняемые администраторами сайта.
    Помимо этого, для каждой функции CMS потребуется несколько новых страниц. Чтобы на них могли попасть только пользователи из группы администраторов, на каждую страницу требуется добавить серверную модель поведения Restrict Access to Page (Ограничить доступ к странице). Чтобы избежать повторения рутинных действий, следует создать шаблон административной страницы admin_template.asp, который отличается от шаблона generic_template.asp только тем, что на него уже добавлена модель поведения Restrict Access to Page.
  • Откройте файл generic_template.asp. На панели инструментов (поле Title [Заголовок]) измените заголовок страницы на "Newland Tours: Admin", и сохраните файл как admin_template.asp.
    Шаблон позволяет создавать не только новые страницы, но и другие шаблоны.
    Создание административного раздела
    увеличить изображение

  • При помощи панели Server Behaviors (Модели поведения серверов) добавьте на страницу серверную модель поведения Restrict Access to Page (Ограничить доступ к странице). В открывшемся диалоговом окне в разделе Restrict based on (Ограничить на основе) выберите вариант Username, password and access level (Имя пользователя, пароль и уровень доступа). В области Select level(s) (Выбрать уровень (уровни)) должен быть выбран только пункт admin. В поле If access denied, go to (Если права доступа определены, перейдите к) укажите файл login.asp и нажмите OK.
    Каждая страница в административном разделе должна проверять принадлежность пользователя к группе admin, так что модель поведения Restrict Access to Page следует прикрепить непосредственно к шаблону.

    Создание административного раздела

  • В меню File (Файл) выполнить команду Save (Сохранить).

    Теперь шаблон изменен, и его следует сохранить.

  • Выполните команды File\Save As (Файл\Сохранить как) и сохраните файл как admin_index.asp. На панели инструментов (поле Title [Заголовок]) измените заголовок документа на "Newland Tours: Admin Home", а вместо заменителя заголовка на самой странице введите "Admin Home".

    Эта страница будет использоваться сотрудниками в качестве отправной точки для выполнения задач администрирования. При вводе данных доступа администраторы будут переводиться сразу на эту страницу.

    Создание административного раздела
    увеличить изображение

  • Ниже заголовка введите следующий текст:

    Choose an administrative task from the list below. If you have any questions or problems, please contact the webmaster(Из указанного ниже списка выберите административное задании. Если у Вас есть какие-либо вопросы или проблемы, просьба обратиться к веб-мастеру):

  • Update the Traveler’s Journal (Обновите рубрику "Traveler’s Journal");
  • Add or remove a registered user to/from the Admin group (Добавьте или удалите зарегистрированного пользователя из группы Admin);
  • Add a new tour description (Добавьте описание нового тура);
  • Modify or remove an existing tour description (Измените или удалите описание существующего тура);
  • Add a new country profile (Добавьте профиль новой страны);
  • Modify or remove an existing country profile (Измените или удалите профиль существующей страны).


  • Это главное меню страницы. Ссылки будут добавлены впоследствии, а на этом шаге создается основа.

    Создание административного раздела
    увеличить изображение

  • Прикрепите к слову "webmaster" ссылку на свой электронный адрес (обязательно с приставкой mailto:). Сохраните и закройте страницу admin_index.asp.

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

    Совет. Разработчики часто помещают все файлы для администрирования в отдельную папку с особыми правами доступа. В данном случае, для простоты все файлы расположены в одном месте, а имена административных страниц начинаются с приставки admin_. Вопросы безопасности веб-приложений в этой книге не рассматриваются, но это не значит, что им не следует уделять внимание при разработке динамических приложений в будущем.
  • Откройте index.asp и под ссылкой Log In (Регистрация) добавьте ссылку Admin, ведущую на страницу admin_index.asp.


    Теперь все пользователи – как посетители, так и сотрудники – могут попасть в нужное место сразу с главной страницы сайта.

    Создание административного раздела
    увеличить изображение

  • Не закрывая файл index.asp, нажмите клавишу (F12), и попытайтесь перейти по новой ссылке на страницу admin_index.asp, чтобы протестировать созданный механизм. На странице доступа для идентификации пользователя укажите zfrome@starknet.com, а в качестве пароля — "hypochondriac".

    Несмотря на то, что в уроке 13 было создано несколько учетных записей, следует помнить, что они принадлежат пользователям из группы visitor. Для доступа на страницу admin_index.asp. эти записи пока не подходят. Указанные выше данные доступа уже содержатся в базе данных (в таблице tbl_users). В столбце userGroup им соответствует значение admin.



  • Чтобы убедиться в бесполезности попыток доступа, достаточно указать имя пользователя и пароль, созданные в уроке 13. Если при тестировании приложения в уроке 13 данные доступа не создавались, следует использовать адрес электронной почты пользователя osiris@allectomedia.com и пароль "osiris". Эта учетная запись также имеет статус visitor.

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

    Создание интерфейса формы

    Поскольку большинство CMS основано на формах, при их написании создается множество форм. При этом, в первую очередь, требуется проанализировать структуру базы данных, после чего соответствующим образом настроить формы. В данном случае в таблицу будет добавляться одна запись, состоящая из трех полей, одно из которых содержит первичный ключ. Таким образом, форма будет состоять всего из двух элементов и кнопки Submit. В этом упражнении будет создана видимая часть формы.
  • Откройте файл admin_template.asp, присвойте документу заголовок "Newland Tours: Admin Update Traveler’s Journal", а вместо заменителя заголовка на странице введите "Update Traveler’s Journal" и сохраните файл как admin_update_tj.asp.
    Как обычно, создание страницы следует начинать с основных элементов.
  • Вместо заменителя обычного текста добавьте на страницу следующие два абзаца:
    Use the form below to update the Traveler’s Journal. Be sure not to overwrite any of the HTML, only rewriting the content in between the HTML tags. Используйте форму, расположенную ниже для обновления раздела Traveler’s Journal. При этом следует изменять только содержимое, расположенное между HTML-тегами, но не сами теги.
    To add a new paragraph on a new line, type New Paragraph. To remove a paragraph, remove not only the text, but also the and
    tags, that precede and follow it. Для добавления нового абзаца, наберите в новой строке Текст абзаца
    . Чтобы удалить абзац, следует удалить не только сам текст, но и теги и
    , между которыми он заключен.
    Как уже говорилось, при создании CMS настоятельно рекомендуется сопровождать эту систему инструкциями по применению. Простые указания могут оказаться очень кстати, если пользователь будет испытывать затруднения.
    Создание интерфейса формы
    увеличить изображение



  • Совет. При использовании базы данных Access в качестве типа поля, в которое сохраняется текст из текстовой области, следует указать Memo. Размер обычного поля типа Text в Access ограничен 255 символами, а по умолчанию равен 50. Тип Memo позволяет сохранять до 65535 символов.

    Создание интерфейса формы
    увеличить изображение

  • Выделите текстовую область, а потом на панели Property Inspector (Инспектор свойств) назовите ее journal_entry, и присвойте значения следующим параметрам:

    Char Width: 55 (Размер поля: 55) Num Lines: 9 (Число строк: 9) Wrap: Virtual (Перенос: автоматический)

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

    Создание интерфейса формы
    увеличить изображение

  • Не снимая выделения с текстовой области, переключитесь в комбинированный режим отображения Split (Режим разделения) (в котором окно разбито на две области, представляющие содержимое в режимах Code [Код] и Design [Дизайн]). Между открывающим и закрывающим тегами (содержащих описание и альтернативный текст к изображению) поместите код, по умолчанию добавляющий в поля динамические значения.

    Для ASP:

    <%=rs_countryDetail("description")%> <%=rs_countryDetail("imageALT")%>

    Для ColdFusion:

    #rs_countryDetail.description# #rs_countryDetail.imageALT#

    Для PHP:



    Создание детальной страницы для обновления записей
    увеличить изображение

    Синтаксис для текстового поля отличается от синтаксиса других элементов формы. Значение не присваивается атрибуту value, а помещается между открывающим и закрывающим тегами >textarea>. В ASP, ColdFusion и PHP применяется один и тот же синтаксис текстового поля.

    После этого следует сохранить файл, загрузить его на сервер и протестировать.

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

    Создание формы и написание набора записей вручную

    В этом упражнении создается форма, используемая сотрудниками для добавления новых профилей стран. Данные формы должны передаваться на страницу admin_cp_insert_processor.asp, в которой будет содержаться код, необходимый для добавления новой записи в базу.
  • В документе admin_cp_insert.asp создайте форму (Form Name [Имя формы]: frm_insertProfile; Action [Действие]: admin_cp_insert_processor.asp). Внутри нее вставьте таблицу, состоящую из семи строк (Rows), двух столбцов (Columns) и с границей толщиной в 1 пиксел (Border), как показано на рисунке.
    Создание формы и написание набора записей вручную
    увеличить изображение

    Семь элементов, содержащихся в левом столбце, соответствуют семи из восьми полей в таблице tbl_country (восьмое поле – это создаваемый автоматически первичный ключ).
  • В правый столбец добавьте элементы формы, указанные в приведенной таблице.
    Тип элементаИмя элемента Примечания
    Список/Менюregion На панели Property Inspector (Инспектор свойств) следует оставить выбранный по умолчанию тип Menu.
    Текстовое поле countryName
    Текстовое поле population
    Текстовое поле currency
    Текстовая область description Ввод описаний должен быть удобным, поэтому на панели инспектора свойств необходимо указать следующие параметры для размеров: Char Width (раз-мер поля) – 55; Num Lines (Число строк) — 9; Wrap (перенос) – Virtual (автоматический).
    Текстовое поле imageURL
    Текстовая область imageALT Эта текстовая область не должна быть такой большой, как область для описания. В этом случае следует указать параметры Char Width – 55 и Wrap — Virtual, а поле Num Lines оставить неза-полненным.

    Имена элементов и имена полей в соответствующей таблице снова совпадают, что облегчает их сопоставление. На этот раз SQL-запрос будет создаваться вручную без применения диалогового окна Insert Record (Вставка записи), тем не менее совпадающие имена полей формы и соответствующих полей базы данных даже в этом случае облегчают работу.
    Форма практически готова, за исключением одного момента: в меню, расположенном вверху, не содержится никаких данных. Оно должно наполняться данными из таблицы tbl_region, а поэтому необходимо создать набор записей.

    Создание формы и написание набора записей вручную
    увеличить изображение

  • В режиме Code (Код) найдите участок кода, расположенный после серверной модели поведения Restrict Access to Page (Ограничить доступ к странице), но перед открывающим тегом . Введите код, необходимый для подключения к базе данных.

    Для ASP:

    <% 'Create connection object Dim dbConn Dim rs_regions set dbConn = server.CreateObject("adodb.connection") 'Connect to database via DSN dbConn.open("newland") %>

    Для ColdFusion:



    Для PHP:



    Этого кода достаточно для подключения к базе данных. Однако после подключения больше ничего не происходит. Для обеспечения дальнейших действий требуется добавить SQL-запрос.

    Рассмотрим введенный код. Код для ColdFusion выделяется своей простотой: в нем используется тег , в котором запросу присваивается имя (rs_regions) и указывается источник данных (newland).

    Для написания кода ASP требуется значительно больше усилий. Ключевое слово Dim употребляется для объявления новых переменных. В приведенном участке кода создано две переменные: dbConn и rs_regions. Переменная dbConn применяется для создания самого подключения, а rs_region предназначена для хранения набора записей. Вместо указанных имен вполне могут использоваться другие. Строка, идущая после объявления переменных и начинающаяся с кода dbConn =, включает указание для ASP создать новый объект подключения к базе данных, названный dbConn. В следующей строке содержится указание применить это подключение к DSN под названием "newland".

    Примечание. Возникает вопрос: почему в коде ASP и PHP присутствуют (соответственно) названия "newland" и "newland_tours" вместо "conn_newland", которое использовалось в предыдущих разделах книги. В случае с ASP "newland" – это имя DSN, которое хранится на сервере и указывает на базу данных Newland Tours. В случае с PHP "newland_tours" – это имя базы данных, расположенной на сервере MySQL. В свою очередь, "conn_newland" – это соединение, созданное в Dreamweaver, которое просто ссылается на DSN newland (ASP) или на базу данных newland_tours (PHP), но при этом отделено от них. Поскольку в данном случае код пишется вручную, и серверные модели поведения Dreamweaver не применяются, DSN newland для ASP и база данных newland_tours для PHP задаются напрямую.


    Создание формы и написание набора записей вручную
    увеличить изображение

    Помимо прочего, основу технологии ASP составляет группа готовых объектов, разработанных для выполнения типичных задач. Таких объектов довольно много, и некоторые из них использовались в предыдущих уроках (хотя и не всегда это было понятно). В частности, к объектам ASP относятся Request, Response, Session и Application. Объекты Connection и Recordset входят в состав ADO (ActiveX Data Objects – объекты данных технологии ActiveX). Объектно-ориентированное программирование (ООП) в этой книге не рассматривается, однако сейчас достаточно сказать, что код, созданный в этом уроке, в дальнейшем с уверенностью можно использовать в качестве шаблона для подключения к базе данных.

    Несмотря на то, что участок кода для PHP оказался более объемным, чем остальные, его достаточно легко читать. Встроенная функция mysql_connect() позволяет обработчику PHP найти сервер MySQL. Как видно из кода, для нее требуется указать три параметра: адрес, имя пользователя и пароль от учетной записи, к которой требуется получить доступ. Имя пользователя и пароль должны быть теми же, что указывались в диалоговом окне MySQL Connection (Соединение MySQL) в одном из предыдущих уроков при настройке подключения к базе данных. Их следует ввести вместо участков кода [введите имя пользователя] и [введите пароль]. Поскольку обработчик PHP не может найти сервер MySQL, он должен провести поиск самой базы данных. Для этого применяется встроенная функция mysql_select_db(), единственным параметром которой является имя базы данных на сервере MySQL.




  • Создание формы и написание набора записей вручную
    увеличить изображение

  • В режиме Code (Код) найдите участок кода, расположенный после серверной модели поведения Restrict Access to Page (Ограничить доступ к странице), но перед открывающим тегом . Введите код, необходимый для подключения к базе данных.

    Для ASP:

    <% 'Create connection object Dim dbConn Dim rs_regions set dbConn = server.CreateObject("adodb.connection") 'Connect to database via DSN dbConn.open("newland") %>

    Для ColdFusion:



    Для PHP:



    Этого кода достаточно для подключения к базе данных. Однако после подключения больше ничего не происходит. Для обеспечения дальнейших действий требуется добавить SQL-запрос.

    Рассмотрим введенный код. Код для ColdFusion выделяется своей простотой: в нем используется тег , в котором запросу присваивается имя (rs_regions) и указывается источник данных (newland).

    Для написания кода ASP требуется значительно больше усилий. Ключевое слово Dim употребляется для объявления новых переменных. В приведенном участке кода создано две переменные: dbConn и rs_regions. Переменная dbConn применяется для создания самого подключения, а rs_region предназначена для хранения набора записей. Вместо указанных имен вполне могут использоваться другие. Строка, идущая после объявления переменных и начинающаяся с кода dbConn =, включает указание для ASP создать новый объект подключения к базе данных, названный dbConn. В следующей строке содержится указание применить это подключение к DSN под названием "newland".

    Примечание. Возникает вопрос: почему в коде ASP и PHP присутствуют (соответственно) названия "newland" и "newland_tours" вместо "conn_newland", которое использовалось в предыдущих разделах книги. В случае с ASP "newland" – это имя DSN, которое хранится на сервере и указывает на базу данных Newland Tours. В случае с PHP "newland_tours" – это имя базы данных, расположенной на сервере MySQL. В свою очередь, "conn_newland" – это соединение, созданное в Dreamweaver, которое просто ссылается на DSN newland (ASP) или на базу данных newland_tours (PHP), но при этом отделено от них. Поскольку в данном случае код пишется вручную, и серверные модели поведения Dreamweaver не применяются, DSN newland для ASP и база данных newland_tours для PHP задаются напрямую.


    Создание формы и написание набора записей вручную
    увеличить изображение

    Помимо прочего, основу технологии ASP составляет группа готовых объектов, разработанных для выполнения типичных задач. Таких объектов довольно много, и некоторые из них использовались в предыдущих уроках (хотя и не всегда это было понятно). В частности, к объектам ASP относятся Request, Response, Session и Application. Объекты Connection и Recordset входят в состав ADO (ActiveX Data Objects – объекты данных технологии ActiveX). Объектно-ориентированное программирование (ООП) в этой книге не рассматривается, однако сейчас достаточно сказать, что код, созданный в этом уроке, в дальнейшем с уверенностью можно использовать в качестве шаблона для подключения к базе данных.

    Несмотря на то, что участок кода для PHP оказался более объемным, чем остальные, его достаточно легко читать. Встроенная функция mysql_connect() позволяет обработчику PHP найти сервер MySQL. Как видно из кода, для нее требуется указать три параметра: адрес, имя пользователя и пароль от учетной записи, к которой требуется получить доступ. Имя пользователя и пароль должны быть теми же, что указывались в диалоговом окне MySQL Connection (Соединение MySQL) в одном из предыдущих уроков при настройке подключения к базе данных. Их следует ввести вместо участков кода [введите имя пользователя] и [введите пароль]. Поскольку обработчик PHP не может найти сервер MySQL, он должен провести поиск самой базы данных. Для этого применяется встроенная функция mysql_select_db(), единственным параметром которой является имя базы данных на сервере MySQL.

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

    Для ASP:

    Set rs_regions = dbConn.Execute("SELECT * FROM tbl_region ORDER BY regionName")

    Для ColdFusion:

    Для ColdFusion:

    Для PHP:

    $query_rs_regions = "SELECT * FROM tbl_region ORDER BY regionName"; $rs_regions = mysql_query($query_rs_regions); $row_rs_regions = mysql_fetch_assoc($rs_regions);

    На данный момент этот SQL-код не должен вызывать вопросов. Он извлекает все поля из всех записей таблицы tbl_region и упорядочивает их в алфавитном порядке по названию региона.


    Код ASP и PHP снова может вызвать недоумение. Начнем с ASP. Как известно, dbConn – это не набор записей, а объект соединения. Для формирования набора записей в приведенной строке кода создается объект набора записей (Recordset), содержимое которого эквивалентно данным, извлеченным при помощи переданного через соединение запроса.

    Создание формы и написание набора записей вручную

    Первые две строки кода PHP отправляют запрос в базу данных. Можно предположить, что в результате отправления запроса обратно передается набор записей, который сохраняется в переменной $rs_regions. Но это не так. При отправлении запроса в базу данных MySQL при помощи функции PHP mysql_query() обратно передается не набор записей, а число, которое указывает на данные. Сами данные не возвращаются. Вместо этого они помещаются в нейтральную область, которая не относится ни к PHP, ни к MySQL. Чтобы получить эти данные, следует извлечь их при помощи функции mysql_fetch_assoc() (или одного из ее вариантов). Эта функция извлекает данные из нейтральной области и создает массив для их хранения. В данном случае этот массив назван $row_rs_regions. После размещения данных в этом массиве он начинает играть роль набора записей, как в ASP или ColdFusion. Для доступа к данным следует ссылаться на $row_rs_regions.

    Этого кода достаточно для создания набора записей и помещения данных на страницу. На панели Bindings (Привязки) этот набор записей отображен не будет, поскольку Dreamweaver не осознает его наличие. К сожалению, это означает и то, что привязать набор записей к объектам формы невозможно. Придется делать это вручную.

  • В режиме Code (Код) прокрутите страницу вниз, пока не обнаружите форму. Несколькими строками ниже внутри таблицы расположен элемент создает раскрывающийся список. Для добавления опций для списка используется тег

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

    Создание основной страницы

    Для обновления и удаления данных необходимы основная и детальная страницы, поскольку для удаления или обновления данных пользователи должны выбрать страну. В этом упражнении будет создана несложная основная страница, на которой будет отображаться таблица, в каждой строке которой присутствует название страны, ссылка для изменения информации о ней и ссылка для удаления страны. Как и прежде, каждая из этих ссылок содержит параметр URL-адреса, указывающий на то, какая именно страна была выбрана.
  • Откройте документ admin_cp_master.asp и переключитесь в режим Code (Код).
    Как обычно, перед тем, как вводить данные на странице, будет создан набор записей. Чтобы написать сценарий, формирующий набор записей, необходимо использовать режим Code (Код).
  • Между кодом серверной модели поведения Restrict Access (Ограниченный доступ) и началом документа (непосредственно перед тегом ), введите код, необходимый для создания набора записей ("rs_countries"), который извлекает из каждой записи в таблице tbl_country имя и идентификатор страны.
    Для ASP:
    <% Dim dbConn Dim rs_countries set dbConn = Server.CreateObject("adodb.connection") dbConn.open("newland") Set rs_countries = dbConn.Execute("SELECT countryID, countryName FROM tbl_country ORDER BY countryName ASC") %>
    Для ColdFusion:
    SELECT countryID, countryName FROM tbl_country ORDER BY countryName ASC
    Для PHP:


    Создание основной страницы
    увеличить изображение

    За исключением деталей в операторе SQL, приведенный код абсолютно идентичен коду, использованному ранее, так что здесь все должно быть понятно. Смысл запроса понять тоже несложно: он извлекает из базы данные с названиями стран и их идентификаторами и сортирует их по алфавиту (по названия).

  • Только пользователям ASP и ColdFusion. Добавьте в конец документа код, предназначенный для закрытия и уничтожения набора записей.

    Для ASP:

    <% rs_countries.Close() Set rs_countries = Nothing %>

    Для PHP:



    Этот код, как и раньше, очищает память сервера от лишних данных.

    Создание основной страницы

  • В режиме Design (Дизайн) введите на странице две строки текста:

    Select a country to modify or delete. Выберите страну, которую нужно изменить или удалить.

    Caution: Deleting is instant and permanent. Внимание! Удаление производится сразу же и отменить его невозможно.

    Как и прежде, четкие рекомендации несомненно повышают эффективность использования приложений.

    Создание основной страницы
    увеличить изображение

  • В режиме Code (Код) под созданным на предыдущем шаге абзацем поместите код новой таблицы, состоящей из одной строки и трех столб-цов.

    XX XX XX


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

  • Введите код для создания цикла, внутри которого заключен тег
  • XX XX XX
    XX XX XX
    XX XX XX
    , поместите приведенный ниже HTML-код.

    Country Name Modify this country’s profile Delete <%=rs_countries("countryName")%> "> Modify this country’s profile ">Delete#countryName# Modify this country’s profile Delete Modify this country’s profile Delete