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