Страница
ALLPRODS.ASP
Страница ALLPRODS.ASP отображает список категорий товаров в базе NWIND (рис. 22.8).
ASP-страница читает наименования категорий товаров и отображает их в виде гиперссылок. Когда пользователь выбирает гиперссылку, он переходит на другую страницу (PRODCAT.ASP), которая отображает все товары, принадлежащие этой категории, их цены и количество (рис. 22.9).
Если посмотреть на код страницы PRODCAT.ASP, то можно заметить, что в ней мало HTML-кода, поскольку это серверный сценарий, который открывает базу данных NWIND, создает набор записей с наименованиями категорий и отображает их в виде гиперссылок.
Наибольший интерес представляет строка, создающая гиперссылки. Если не обращать внимания на обрамление этого выражения тегами серверного сценария, то выглядит оно как обычный HTML-тег для создания гиперссылки. Поскольку имя гиперссылки и ее целевая страница в момент создания этого файла неизвестны, поместим в него выражения, которые будут замещены при обработке файла активной серверной страницей.
Рис. 22.8. Страница ALLPRODS.ASP: категории товаров в базе данных NWIND в виде гиперссылок
Рис. 22.9. файл PRODCAT.ASP: товары в категории, выбранной на рис. 22.8
Обратите внимание: все гиперссылки обращаются к одному
URL на сервере (файл PRODCAT.ASP), но каждая ссылка передает другое значение параметра. Этим значением является идентификатор (ID) категории - поле записи, хранящей сведения о каждом товаре. Страница PRODCAT ASP использует это значение для выбора товаров заданной категории. В качестве второго параметра передается наименование категории. Этот параметр не используется при выборке записей -он нужен только для отображения наименования категории. Если опустить этот параметр, то страница PRODCAT.ASP откроет таблицу Categories (Категории), чтобы найти наименование выбранной категории, отобразить его в заголовке страницы, а затем открыть таблицу Products (Товары) для извлечения наименований товаров. Передавая наименование категории в качестве второго параметра, мы избавляем сценарий от необходимости установления еще одной связи с базой данных для получения уже известной информации.
Программа 22.8. Файл ALLPRODS ASP
<HTML>
<%
Set DBObj =
Server.CreateObject("ADODB.Connection")
DBObj.Open "NWindDB"
SQLQuery = "SELECT CategoryID, CategoryName FROM Categories"
Set RSCategories = DBObj.Execute(SQLQuery)
%>
<CENTER>
<H1>List Of Product Categories</H1>
</CENTER>
<TABLE>
<% Do While Not RSCategories.EOF %>
<TR>
<TD> <FONT FACE-"Verdana" SIZE=2>
<% CategoryName = RSCategories ("CategoryName") %>
<A HREF="/ASPages/ProdCat.asp?CategoryID= _
<% "RSCategories ("CategoryID") %>&CategoryName= _
<% =CategoryName %> "> <% = CategoryName %> </A>
</FONT>
</TD>
</TR>
<%
RSCategories.MoveNext
Loop
DBObj.Close
%>
</HTML>
Файл PRODCAT ASP, обрабатывающий запросы, сделанные страницей ALLPRODS ASP, несколько сложнее Сначала он извлекает значения параметров, переданных клиентом Операторы
ReqCategory=Request.QueryString ("CategoryID")
ReqName=Request.QueryString ("CategoryName")
сохраняют эти значения в переменных ReqCategory и ReqName
Семейство QueryString хранит эти значения для дальнейшего использования Прочесть их, воспользовавшись соответствующими именами, не составляет труда Значение переменной ReqCategory необходимо для построения SQL-оператора, извлекающего записи из таблицы Products
SQLQuery = "SELECT ProductName, UnitPrice, UnitInStock _
FROM Products WHERE CategoryID = " & ReqCategory & " _
ORDER BY ProductName"
Этот SQL-оператор возвращает набор записей, содержащий сведения о товарах из выбранной категории. Затем сценарий просматривает записи и выводит их в строках таблицы. Фрагмент кода, который строит таблицу, выглядит достаточно сложно, поскольку в него входят HTML-операторы и операторы сценария. Чтобы понять, как он работает, замените каждое выражение, заключенное в теги <% и %>, соответствующем значением (например, наименованием товара в выражении <% = RSProducts ("ProductName") %> и т.д.).
Программа 22.9. Файл PRODCAT.ASP
<HTML>
<%
ReqCategory=Request. QueryString ("CategoryID")
ReqName=Request. QueryString ("CategoryName")
Set DBObj = Server.CreateObject ("ADODB.Connection")
DBObj.Open "NWindDB"
SQLQuery = " SELECT ProductName, UnitPrice, UnitsInStock FROM Products
WHERE CategoryID = " & ReqCategory S " ORDER BY ProductName"
Set RSProducts = DBObj.Execute(SQLQuery)
%>
<CENTER>
<H1>Query Results</H1>
<H3>List of products in category <% = ReqName %></H3>
</CENTER>
<TABLE>
<% Do While Not RSProducts.EOF %>
<TR>
<TD> <FONT FACE="Verdana" SIZE=2>
<% = RSProducts ("ProductName") & " (" &
RSProducts ("UnitPrice") & ")" %>
</FONT></TD>
<TD><FONT FACE="Verdana" SIZE=2>
<% = RSProducts ("UnitsInStock") %>
</FONT></TD>
</TR>
<%
RSProducts.MoveNext
Loop
%>
</TABLE>
</HTML>
Этот пример достаточно прост. Если некоторые его фрагменты выглядят непонятно, то отделите выражения, вычисляющиеся на сервере, от HTML-кода. При этом можно использовать символические имена - ProductName и UnitPrice. Убедившись, что код работает, замените их действительными переменными серверного сценария.