Поиск по стране: фильтрация по переменной формы
Сценарий для поиска путешествий по регионам готов. Поиск по странам аналогичен поиску туров, но с некоторыми отличиями. Вместо ссылок и параметров URL-адреса будут применяться формы и переменные формы. Как и прежде, для реализации поиска используется SQL-инструкция.
- Откройте страницу tours.asp. В режиме Design (Дизайн) поместите курсор во второй строке правого столбца и добавьте здесь форму, состоящую из одного раскрывающегося списка и кнопки Submit.
К этому моменту добавление элементов на страницу не должно вызывать затруднений.
увеличить изображение
- В селекторе тегов выберите тег <form>, а затем на панели 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 выполнять этот шаг не нужно, однако рекомендуется прочитать последующий текст.
Содержание Назад Вперед