В прошлый раз я расказал тебе, как создавать простейшие приложения для ASP сервера. Мы посылали запрос написанному в Delphi модулю и получали от него ответ. Такая схема эфективна на 10-20%, потому что основное преимущество у ASP - возможность получения и обработки введённой пользователем инфы. Сегодня я научу тебя этому чуду природы.
Рассмотрим простейший пример - подписка на новости. Для этого пользователь должен ввести в HTML форме своё имя и e-mail адрес, и отправить информацию серверу. ASP сервер должен прочитать информацию и сохранить в базу. Сохранять мы не будем (это дело техники), а информацию поличим и разберём. Так что, ты сам сможешь увеличить функциональность нашего сервера. А с базами данных мы будем работать в следующий раз.
Итак, открой пример из предыдущей статьи и выбери из меню View-> Type Library. Назови его RequestData . После нажатия кнопки "Обновить", ты увидешь новую процедуру RequestData в модуле TesterUnit.
procedure TTester.RequestData;
var
Str:String;
i,j:integer;
begin
Str:='';
//Вывести приветственное сообщение
Response.Write('<center><H2> Второй привет от ASP сервера </H2></center>');
//Получить количество переданных параметров Request.QueryString.Count
Str:=IntToStr(Request.QueryString.Count);
//Вывести на форму количество параметров
Response.Write('Количество членов -'+Str+ ' <HR> ');
//Обнулить переменную, в которую сохраним информацию о параметрах.
Str:='';
//Если интерфейс Request действителен, то можно работать
if Assigned(Request) then
//Если параметров больше 0, то пользователь передал данные.
if Request.QueryString.Count>0 then
begin
//Запускаем цикл обработки всех переменных
for i:=1 to Request.QueryString.Count do
begin
Str:=Str+'Ключь'+IntToStr(I)+'='+Request.QueryString.Key[i]+'<P>';
if not VarIsEmpty(Request.QueryString.Item[i]) then
if varType(Request.QueryString.Item[i])=varDispatch then
begin
if Request.QueryString.Item[i].count>0 then
for j:=1 to Request.QueryString.Item[i].count do
Str:=Str+'Значение: '+Request.QueryString.Item[i].item[j]+'<P>';
end;
Str:=Str+'<HR>';
end;
end;
//Выводим информацию
if Assigned(Response) then
Response.Write(Str);
end;
Мы получаем информацию о введённых данных через строку URL, например: http://194.190.35.10/Tester.asp?text1=%C8%E2%E0%ED%EE%E2&text2=ivanov@mail.ru&button1=%CE%F2%EF%F0%E0%E2%E8%F2%FC. В этой строке сначала идёт адрес странички: http://194.190.35.10/Tester.asp, затем, после знака ? (вопрос) идут переданные параметры.
Вот именно они находятся в параметре QueryString интерфейса Request. Количество параметров находится в свойстве Count (Request.QueryString.Count).
Ключи находятся в списке Request.QueryString.Key[i], где i изменяется от 1 до Request.QueryString.Count. Заметь, что именно с единицы, а не с нуля. Почему? Спроси Microsoft. По этим ключам ты можешь определить имя компонента, который передал значения. А соответвующее значение можно найти в параметре Request.QueryString.Item[i].
Сами значения ключей находятся в отдельном списке Request.QueryString.Item[i], где i изменяется так же. Здесь может находится несколько значений, и их количество хранится в свойстве Request.QueryString.Item[i].count. Чтобы получить доступ к значению параметра нужно прочитать Request.QueryString.Item[i].item[j].
Для удобства я все данные собрал в кучу и наш запрос выведет их на экран. Тебе надо только выполнить ASP-запрос и ты сразу поймёшь всё, что написано в исходнике.
Перед компиляцией не забудь добавить в раздел Uses модуль Sysutils. В нём описана функция IntToStr, которую мы используем. Если ты этого не сделаешь, то могут возникнуть проблемы с компиляцией.
Запомни, что информация о кнопке типа "Отправить" тоже уйдёт серверу.
Теперь компилируй пример и запускай. Для запуска нам понадобится HTML форма (как на рисунке 1) для ввода данных:
<html>
<head>
<title>
Тест ASP на получение данных
</title>
<body>
<form action="http://194.190.35.10/Tester.asp" metod="POST" name="QUERY">
<P>Name <input type="text" size=20 name="text1"></P>
<P>e-mail <input type="text" size=20 name="text2"></P>
<P><input type="submit" name="button1" value="Отправить"></P>
</form>
</body>
</html>
Рис 1. HTML форма
Данные отправляются по адресу http://194.190.35.10/Tester.asp (194.190.35.10 - адрес моего сервера, замени на свой). Tester.asp - имя ASP-формы в главной директории моего WEB-сервера. Данные отправяться в виде URL форме Tester.asp, которая выглядит так:
<HTML>
<BODY>
<TITLE> тестирование сервера ASP </TITLE>
<HR>
<% Set DelphiASPObj = Server.CreateObject("ASPTester.Tester")
DelphiASPObj.RequestData
%>
</BODY>
</HTML>
Рис 2. ASP форма с результатом запроса
В форме Tester.asp я также, как и в прошлый раз создаю объект ASPTester.Tester. А во второй строке я вызываю новый метод DelphiASPObj.RequestData.
Всё. Используй на здоровсе. Если возникли проблемы, то качай мой исходник. А в следующий раз мы будем работать с базами данных, так что готовься.