Опубликован: 24.12.2006 | Уровень: для всех | Доступ: платный

Урок 12: Создание поисковых интерфейсов

Поиск по стране: фильтрация по переменной формы

Сценарий для поиска путешествий по регионам готов. Поиск по странам аналогичен поиску туров, но с некоторыми отличиями. Вместо ссылок и параметров URL-адреса будут применяться формы и переменные формы. Как и прежде, для реализации поиска используется SQL-инструкция.

  1. Откройте страницу tours.asp . В режиме Design (Дизайн) поместите курсор во второй строке правого столбца и добавьте здесь форму, состоящую из одного раскрывающегося списка и кнопки Submit.

    К этому моменту добавление элементов на страницу не должно вызывать затруднений.

  2. В селекторе тегов выберите тег <form> , а затем на панели Property Inspector (Инспектор свойств) присвойте форме имя frm_bycountry . В качестве значения атрибута в поле со списком Action (Действие) укажите страницу tours_detail.asp . В качестве метода в поле со списком выберите POST.

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

  3. На панели 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, упорядоченных по алфавиту в порядке возрастания. Этот список будет использован для заполнения раскрывающегося списка формы.


  4. Щелкните на поле со списком, чтобы выделить его, и на панели 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.


  5. Откройте страницу tours_detail.asp . Найдите два запроса (один из которых закомментирован). Скопируйте второй запрос и вставьте его в следующую строку. Закомментируйте и второй запрос.

    Это снова дает возможность внести изменения в копию и протестировать новый SQL-инструкцию, которая будет обрабатывать данные, переданные формой.

  6. В запросе измените только условие, задаваемое предложением 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. Каждый раз, когда задается строка (в отличие от выражения или числового значения), она должна быть заключена в одинарные кавычки. В противном случае, база данных попытается обработать полученный текст как функцию или одну из специальных команд базы данных. При добавлении одинарных кавычек база данных получит указание не интерпретировать и не оценивать код, а сравнить его с текстом, хранящимся в указанном поле.

Екатерина Мезенцева
Екатерина Мезенцева
Россия
Маргарита Туктарова
Маргарита Туктарова
Соединенное Королевство, London, kingston university, 2012