Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

ASP - Обработка сведений, введенных пользователем

Используя объект ASP Request, можно создавать простые, но мощные сценарии для сбора и обработки данных, вводимых в формы HTML. В этом разделе вы не только научитесь создавать основные сценарии для обработки форм, но также узнаете полезные приемы проверки сведений, введенных в форму, как на веб-сервере, так и в обозревателе пользователя.

О формах HTML

Формы HTML, наиболее распространенный метод сбора сведений на основе веб, состоят из группы специальных тегов HTML, представляющих собой элементы пользовательского интерфейса на веб-странице. Текстовые поля, кнопки и флажки являются примерами элементов, позволяющих пользователям взаимодействовать с веб-страницей и отправлять сведения на веб-сервер.

Например, следующие теги HTML генерируют форму, в которую пользователь может ввести имя, фамилию и возраст, включающую кнопку для отправки сведений на веб-сервер. Эта форма также содержит скрытый тег ввода (не отображающийся в веб-обозревателе), который можно использовать для передачи на веб-сервер дополнительных сведений.

<FORM METHOD="Post" ACTION="Profile.asp">
<INPUT TYPE="Text" NAME="FirstName">
<INPUT TYPE="Text" NAME="LastName">
<INPUT TYPE="Text" NAME="Age">
<INPUT TYPE="Hidden" NAME="UserStatus" VALUE="New">
<INPUT TYPE="Submit" VALUE="Отправить">
</FORM>

Подробное рассмотрение всех тегов формы HTML выходит за рамки данного раздела. Существует множество источников, рассматривающих создание полезных и удобных форм HTML. Например, с помощью средства просмотра исходного текста страниц используемого обозревателя можно посмотреть, как сделаны формы HTML на других веб-узлах. Кроме того, сведения о передовом использовании форм HTML и других технологий Интернета содержатся на веб-узле Microsoft MSDN Online по адресу http://msdn.microsoft.com/.

Обработка в ASP сведений, введенных в форму

Когда форма HTML создана, необходимо обработать сведения, введенные пользователем, то есть, отправить их файлу .asp для анализа и других действий. Снова изучите программу HTML, приведенную в предыдущем примере. Заметьте, что атрибут ACTION тега <FORM> ссылается на файл Profile.asp. Когда пользователь отправляет сведения HTML, обозреватель передает их методом POST файлу .asp на сервере, в данном случае — Profile.asp. Файл .asp может содержать сценарии, обрабатывающие сведения и взаимодействующие с другими сценариями, компонентами COM и ресурсами, например, с базой данных.

Существует три основных способа сбора сведений, введенных в формы HTML, с использованием ASP:

  • статический файл .htm, содержащий форму, значения из которой передаются в файл .asp;
  • файл .asp, создающий форму, отправляющую сведения в другой файл .asp;
  • файл .asp, создающий форму, отправляющую сведения самой себе, то есть, файлу .asp, содержащему форму.

Первые два метода работают так же, как формы, взаимодействующие с другими программами на веб-сервере, кроме ASP, что существенно упрощает задачу сбора и обработки сведений, введенных в форму. Третий метод особенно эффективен и будет рассмотрен в разделе Проверка сведений, введенных в форму.

Получение данных, введенных в форму

Объект ASP Request предоставляет два семейства, облегчающих получение сведений, введенных в форму и отправленных по запросу URL.

Семейство QueryString

Семейство QueryString возвращает значения формы, переданные веб-серверу, в виде текста следующего после вопросительного знака в запрошенном адресе URL. Значения формы можно добавить к запрошенному адресу URL, используя либо метод HTTP GET, либо вручную добавив значения формы в адрес URL.

Например, если в предыдущем примере формы используется метод GET (METHOD="GET") и пользователь введет Clair, Hector и 30, на сервер будет отправлен следующий запрос URL:

http://Workshop1/Painting/Profile.asp?FirstName=Clair&LastName=Hector&Age=30&UserStatus=New

Файл Profile.asp может содержать следующий сценарий обработки данных формы:

Привет, <%= Request.QueryString("FirstName") %> <%= Request.QueryString("LastName") %>.
Вам <%= Request.QueryString("Age") %> лет!

<%
  If Request.QueryString("UserStatus") = "New" Then
    Response.Write "Вы в первый раз посещаете данный веб-узел!"
  End if
%>

В этом случае веб-сервер вернет пользователю веб-обозревателя следующий текст:

Привет, Clair Hector. Вам 30 лет! Вы в первый раз посещаете данный веб-узел!

Семейство QueryString также содержит необязательный параметр, который можно использовать для доступа к одному из нескольких значений в запрошенном адресе URL (используя метод GET). Кроме того, используя свойство Count , можно узнать число значений указанного типа.

Например, форма, содержащая раскрывающийся список, может генерировать следующий запрос:

http://OrganicFoods/list.asp?Food=Apples&Food=Olives&Food=Bread

Для подсчета нескольких значений можно использовать следующую команду:

Request.QueryString("Food").Count

Для отображения нескольких типов значений файл List.asp должен содержать следующий сценарий:

<%
  lngTotal = Request.QueryString("Food").Count
  For i = 1 To lngTotal
    Response.Write Request.QueryString("Food")(i) & "<BR>"
  Next
%>
Результат работы этого сценария:
Apples
Olives
Bread

Также можно вывести полный список значений, разделенных запятыми, используя следующую инструкцию:

<% Response.Write Request.QueryString("Item") %>

Будет отображена следующая строка:

Apples, Olives, Bread

Семейство формы

При использовании метода HTTP GET для передачи длинных и сложных значений формы на веб-сервер возможна потеря сведений. Некоторые веб-серверы ограничивают длину строки запроса адреса URL, поэтому длинные значения формы, переданные методом GET, могут быть обрезаны. Если требуется отправить большой объем сведений из формы на веб-сервер, следует использовать метод HTTP POST. Метод POST, отправляющий данные формы в теле запроса HTTP, может отправлять на сервер текст неограниченного объема. Для получения значений. отправленных методом POST, можно использовать семейство Form объекта ASP Request.

Способ хранения значений в семействе Form похож на способ хранения значений в семействе QueryString. Например, если пользователь заполнил форму, введя длинный список имен, их можно получить с помощью следующего сценария:

<%
  lngTotal = Request.Form("Food").Count
  For i = 1 To lngTotal
   Response.Write Request.Form("Food")(i) & "<BR>"
  Next
%>

Проверка сведений, введенных в форму

Профессионально выполненная веб-форма часто включает клиентский сценарий, выполняющий проверку сведений, введенных в форму, перед отправкой их на сервер. Сценарии проверки не допускают ввода неправильного значения и отправки пустого текстового поля. Предположим, веб-узел включает форму, позволяющую пользователям вычислять рентабельность капитальных затрат. Перед отправкой сведений на сервер целесообразно проверить, соответствуют ли введенные сведения требуемому типу (числовому или текстовому), чтобы не отправлять на сервер потенциально неправильные сведения.

Лучше выполнять как можно больше проверок со стороны клиента. Кроме более быстрого вывода сообщений об ошибках ввода, проверка на стороне клиента способствует уменьшению времени ответа, уменьшает загрузку сервера и снижает загрузку сети, ускоряя работу других приложений.

Следующие клиентские сценарии проверяют сведения, введенные пользователем (в этом случае сценарий определяет, является ли числом номер учетной записи, введенный пользователем) перед отправкой сведений на сервер:

<SCRIPT LANGUAGE="JScript">

function CheckNumber()
{
 if (isNumeric(document.UserForm.AcctNo.value))
   return true
 else
 {
   alert("Введите правильный номер учетной записи.")
   return false
 }
}

//Функция определения, является ли значение формы числом.
//Примечание.  Метод JScript isNaN лучше подходит для определения, является ли
//значение числом. Однако некоторые устаревшие обозреватели не поддерживают этот метод.
function isNumeric(str)
{
  for (var i=0; i < str.length; i++)
		{
    var ch = str.substring(i, i+1)
    if( ch < "0" || ch>"9" || str.length == null)
				{
      return false
    }
  }
  return true
}
</SCRIPT>

<FORM METHOD="Get" ACTION="balance.asp" NAME="UserForm" ONSUBMIT="return CheckNumber()">

	<INPUT TYPE="Text"   NAME="AcctNo">
	<INPUT TYPE="Submit" VALUE="Отправить">

</FORM>

Если проверка формы требует доступа к базе данных, следует рассматривать проверку формы на стороне сервера. Самым удобным способом выполнения проверки на стороне сервера является создание формы, отправляющей сведения самое себе. То есть, файл .asp содержит форму HTML, возвращающую сведения, введенные пользователем. (Помните, что для взаимодействия со сценариями на стороне клиента и страницами HTML можно использовать ASP. Дополнительные сведения содержатся в разделе Взаимодействие с клиентскими сценариями). Введенные сведения передаются тому же файлу, который выполняет их проверку и оповещает пользователя, если во введенных сведениях допущена ошибка.

Использование этого способа обработки и проверки сведений, введенных пользователем, значительно увеличивает удобство использования и гибкость обработки веб-форм. Например, помещая ошибочные сведения, относящиеся к полю формы, куда были введены ошибочные сведения, упрощается задача поиска пользователем источника ошибки. (Обычно веб-формы пересылают запросы отдельной веб-странице, содержащей ошибочные сведения. Пользователи, которые не поймут эти сведения сразу, будут разочарованы).

Например, следующий сценарий определяет, ввел ли пользователь допустимый номер учетной записи, передавая сведения самому себе (Verify.asp) и вызывая пользовательскую функцию, выполняющую запрос к базе данных:

<%
  strAcct = Request.Form("Account")
  If Not AccountValid(strAcct) Then
    ErrMsg = "<FONT COLOR=Red>Введен неправильный номер учетной записи.</FONT>"
  Else
    Обработка сведений, введенных пользователем
    .
    .
    .
    Server.Transfer("Complete.asp")
  End If

  Function AccountValid(strAcct)
    Здесь должен быть сценарий подключения к базе данных или вызов метода компонента.
  End Function
%>

<FORM METHOD="Post"  ACTION="Verify.asp">
Account Number:  <INPUT TYPE="Text" NAME="Account"> <%= ErrMsg %> <BR>
<INPUT TYPE="Submit">
</FORM>

В этом примере сценарий находится в файле Verify.asp — в том же файле, который содержит форму HTML; он отправляет сведения самому себе, указывая в атрибуте ACTION файл Verify.asp.

Важно!   Если для проверки на стороне сервера используется JScript, при назначении семейства локальной переменной не забудьте поставить пару пустых скобок после элемента семейства Request (QueryString или Form). Без скобок семейство будет возвращать объект, а не строку. Следующий сценарий иллюстрирует правильный способ назначения переменных в JScript:

<%
   var Name = Request.Form("Name")();
   var Password = Request.Form("Password")();

  if(Name > "")
  {
     if(Name == Password)
      Response.Write("Имя и пароль совпадают.")
  else
      Response.Write("Имя и пароль не совпадают.");
  }
%>

Программа VBScript выполняется одинаково, если семейство содержит несколько значений, разделенных запятыми или индексируемых. Это значит, что и в VBScript, и в JScript вдобавок к добавлению пары пустых скобок к элементу семейства Request необходимо задать индекс требуемого значения. Например, следующая строка JScript возвращает лишь первое из нескольких значений элемента формы:

var Name = Request.Form("Name")(1);

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог