Уроки ASP-технологии

В прошлой статье я рассказал вам о пересылке данных клиентам с помощью встроенного объекта Response. Однако только лишь пересылкой интерактивности добиться нельзя: ведь еобходимо еще и принимать информацию от клиента! Для этого и предназначен объект Request, который в основном ценен своими коллекциями. Их пять:

Таблица

Рассмотрим первую коллекцию — ServerVariables. В нее входит огромное количество различной информации о сервере, которая хранится в так называемых переменных окружения (environment variables). Обращение к ним осуществляются таким образом:

<% Request.ServerVariables("переменная окружения") %>

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

Все переменные запомнить, естественно, невозможно, поэтому напишем следующий скрипт для вывода ВСЕХ переменных и их значений:

<% Option Explicit %>
<html>
<head>
    <title>ServerVariables Collection Enum</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
    Dim SvrVar
    FOR EACH SvrVar IN Request.ServerVariables
    Response.Write "<B>" & SvrVar & "</B>" & "&nbsp;&nbsp;" & "===>" & "&nbsp;&nbsp;" & Request.ServerVariables(SvrVar) & "<br>"
    NEXT
%>
</body>
</html>

Давайте разберемся, как работает этот скрипт. В первой строке встречается новая директива: Option Explicit. Она предназначена для того чтобы в случае, если в последующем сценарии появится необъявленная переменная, движок ASP не объявил бы ее автоматически, а сгенерировал ошибку. Это делается, чтобы не возникало путаницы в объявлениях. Например, рассмотрим простейший код:

<%
    val1=2
    val2=3
    result=vap1+val2
    Response.Write result
%>

Вы увидите цифру 3, так как движок ASP автоматически объявляет переменную vap1 и присваивает ей значение 0. Поэтому результат будет 0+3=3. В этом простом примере можно легко найти ошибку, но представьте, если у вас скрипт на несколько страниц!

Теперь вернемся к нашему коду. После объявления переменной SvrVar встречается конструкция:

FOR EACH variable IN collection operators NEXT

Этот цикл применяется для удобства перебора элементов коллекции.

В теле цикла просто формируется строка вида "ключ ===> значение".

Рис. 1

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

Форма позволяет передавать данные, введенные пользователем, посредством HTTP-запроса серверу. Форма как таковая является блочным тэгом, у которого есть четыре основных атрибута:

  1. Action. В этом атрибуте указывается имя сценария, который будет обрабатывать данную форму.
  2. Method. Метод передачи данных. Существует два метода: POST и GET. Первый предназначен для передачи данных в виде отдельных строк, которые пользователь не может увидеть. В методе GET все строки сцепляются в одну, которая затем присоединяется к URL.
  3. Target. Имя фрейма (если таковой имеется), в который будет загружаться ответ сервера.
  4. Name. Имя формы.

В форму можно поместить такие элементы управления:

• Поле ввода текста (однострочное). Пример:

<input type=“text” name=“txtJob” value=“” size=30>

• Поле ввода текста (многострочное). Пример:

<textarea name=“txtFeedback”>This is a multiline textbox in which you can for example enter your opinion about this site</textarea>

• Поле ввода пароля. Пример:

<input type=“password" name=“txtPassword">

• Раскрывающийся список. Пример:

<select name=“lstChooseCountry”>
    <option selected >Ukraine</option>
    <option>Russia</option>
    <option>German</option>
    <option>France</option>
    <option>China</option>
</select>

• Фиксированный список. Пример:

<select name=”lstChooseCountry” size=3>
    <option selected>Ukraine</option>
    <option>Russia</option>
    <option>German</option>
    <option>France</option>
    <option>China</option>
</select>

• Скрытые элементы ввода. Пример:

<input type=“hidden” value=“username”>

• Обычная кнопка. Пример:

<input type=“button” name=“CustomButton” value=“My Custom Button” onClick=“CBClick()”>

• Кнопка сброса. Пример:

<input type=“reset” name=“ResetButton” value=“ResetAll”>

• Кнопка для отправки данных серверу. Пример:

<input type=“submit” name=“SubmitButton” value=“Send to Server”>

• Графическая кнопка (заменяет кнопку для отправки данных серверу). Пример:

<input type=“image” name=“ImageButton” src=“imgbutton.gif”>

• Флажок. Пример:

<input type=“checkbox” name=“chkRecNews”>  I want to receive a newsletter from you.  </input>

• Переключатели. Пример:

<input type=“radio” checked name=“rdoSelectLanguage”>  Russian  </input>
<input type=“radio” name=“rdoSelectLanguage”>  English  </input>

Пример формы:

<form action=”doIt.asp” method=”POST” name=”frmAction”>
    <input type=“text” name=“txtUsername” size=30>
    <input type=“password" name=“txtPassword">
    <input type=“submit” value=“Submit form”>
</form>

Теперь, когда мы разобрались с формами, давайте посмотрим, как их обрабатывает сервер при помощи ASP-скриптов. Для этого в объекте Request существует две коллекции: QueryString и Form. Первая отвечает за прием данных от клиента в случае, если форма отправляется при помощи метода GET, вторая — метода POST. Чтобы не растекаться мыслию по древу, давайте перейдем к конкретному примеру. Соорудим форму для сбора демографической информации по Украине. Проделайте следующие операции:

<% Option Explicit %>
<html>
<head>
<title>ServerVariables Collection Enum</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
Dim SvrVar
FOR EACH SvrVar IN Request.ServerVariables
Response.Write "<B>" & SvrVar & "</B>" & "&nbsp;&nbsp;" & "===>" & "&nbsp;&nbsp;" & Request.ServerVariables(SvrVar) & "<br>"
NEXT
%>
</body>
</html>

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

Перед тем, как пользователь, нажав кнопку Submit, отправит данные на сервер, он должен заполнить ВСЕ поля, иначе он увидит ту же страницу. Этот эффект достигается благодаря использованию конструкции IF… THEN…END IF (IF Request.Form("txtFirstName")="" OR Request.Form("txtLastName")="" OR Request.Form("txtCity")="" THEN). Если найдено пустое поле, то браузеру отправляется HTML, расположенный после тэга %"; если же нет, то выполняются инструкции, написанные во втором островке ASP. Я думаю, вам не составит труда разобраться в них. Примечание: функция Trim используется для отсечения пробелов слева и справа заданной строки. В результате на экране браузера вы получите картинку, представленную на рис. 2. После того, как вы введете что-нибудь в поля формы и нажмете кнопку «Подача запроса», вы увидите нечто аналогичное рис. 3.

Рис. 2

Рис. 3

На сегодня это все. В следующей статье мы рассмотрим остальные коллекции, свойства и методы объекта Request.