0  На главную

0 1.Как создают веб-страницы
Как написать веб-страницу
Обзор программ для просмотра
и создания веб-страниц
Создание веб-страниц

0 2.Основные средства языка HTML
Самое главное на любой веб-странице - гиперссылки
Как создать списки на веб-странице
Создание таблиц

0 3.Графика на веб-странице
Графические форматы
интернета
Графические элементы оформления
веб-страниц
Графические маркеры
Подготовка рисунков в
программе Adobe Photoshop

0 4.Оформление веб-страницы с использованием стилей
Определение стилей в
специальной таблице
Обзор других возможностий
стилевых таблиц

0 5.Использование звука на
веб-странице
Маленькие хитрости

0 6.Динамические веб-страницы
на основе JavaScript
Как писать собственные функции
Динамическое изменение внешнего
вида страницы
Другие возможности языка
JavaScript

0 7.Веб-страницы, реагирующие
на действия пользователя
Страница, управляемая
при помощи мыши
Страница, управляемая
с клавиатуры
Динамическое отображение
текста веб-страницы
Динамическое изменение
графических элементов веб-страницы
Динамическое изменение таблиц
Самоизменяющиеся формы

0 8.Размещение элементов на веб-странице
с помощью таблиц
Управление расположением элементов
на веб-страницы
Динамическое позиционирование слоев

0 9.Дополнительные возможности формирования веб-страниц
Пример использования элемента управления Tabular Data

Пример простейшего серверного сценария

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

Помните, когда мы создавали страницу гипотетической фирмы «Лентяй», в ней был раздел «Книга отзывов» ? Там пользователю предлагалось ввести свое имя в одно текстовое поле (с именем Name), а свое мнение — в другое (многострочное) текстовое поле (с именем Opinion). Затем, после нажатия кнопки Отправить заполненная форма отправлялась на сервер. Но что с ней происходит там?

В качестве примера мы написали небольшой сценарий, который принимает данные формы и создает текстовый файл, в который эти данные записываются. Затем сценарий высылает пользователю сообщение об успешном завершении работы.

Сценарий, исполняемый на сервере, может быть написан на различных языках программирования и использовать различные технологии. Например, он может использовать технологию ASP (Active Server Pages) или специальную серверную редакцию языка JavaScript. Однако чаще всего такие сценарии пишутся на языке Perl (и используют технологию CGI — Common Gateway Interface). Мы сейчас не будем рассказывать об этом подробно, а просто проиллюстрируем, каким может быть простейший Perl-сценарий. Для облегчения восприятия давайте сначала напишем его «построчно», а затем приведем полный текст.

Итак, в первой строке мы должны указать местоположение интерпретатора языка Perl на сервере. Его можно узнать у администратора сервера. Если сервер работает под управлением Windows NT, а не UNIX или Linux, эта строка будет проигнорирована. Обычно она выглядит так:

#! /usr/bin/perl

Теперь, чтобы мы могли легко считывать данные HTML -формы, надо написать еще одну строку:

require "cgi-lib.pl";

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

Поскольку мы будем отправлять пользователю подтверждение успешного завершения работы, необходимо предварительно указать тип текста, который сценарий будет посылать пользователю: print "Content-type: text/html\n\n";

Вообще говоря, все, что указано в операторе print, по умолчанию будут отправлено на компьютер пользователя. Теперь нужно прочитать данные формы, отправленной пользователем:

&ReadParse(*input);

Запись в файл

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

Выйти из положения можно разными способами. Один из них заключается в том, чтобы сгенерировать имя файла из имени, введенного пользователем, и некого случайного числа. Таким образом, вероятность генерации двух одинаковых имен файлов оказывается ничтожно малой.

Чтобы генерировать случайные числа, сначала необходимо инициализировать их генератор:

srand($$^time);

Теперь можно сгенерировать само имя. Для удобства присвоим его переменной $fname:

$fname=$input{"Name"}.int(rand(99999) ) ;

Имена переменных в языке Perl всегда начинаются со знака $. Как вы можете заметить, мы здесь использовали новую переменную $fname, не объявляя ее заранее. Но Perl — язык очень демократичный, здесь такие вещи допускаются (точнее сказать — здесь допускается еще и не такое!). С помощью функции rand(99999) мы генерируем случайное число в диапазоне от 0 до 99 999, а затем отделяем от него целую часть с помощью функции int. Знак «точка» означает конкатенацию, то есть присоединение символьных строк друг к другу.

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

if (-e "$fname.txt") {
print ("Ошибка создания файла. Попробуйте еще раз!");
exit 0;
}

Как мы уже говорили, оператор print по умолчанию выводит информацию на компьютер пользователя. На этом месте сценарий предлагает пользователю попробовать отослать форму еще раз, так как теперь будет сгенерировано другое имя файла.

Если же все в порядке, сценарий должен создать и открыть для ввода данных файл с именем, хранящимся в переменной $fname и расширением txt:

open (FILE, ">$fname.txt");

Теперь, чтобы иметь возможность записывать в этот файл какие-либо данные, нужно, как говорят программисты, «перенаправить туда вывод» с помощью оператора select:

select (FILE);

Это означает, что теперь, к примеру, оператор print будет выводить данные не на компьютер пользователя, а в наш новый файл. Заметим время, когда это произошло:

$tim=localtime();

Здесь мы получили текущее время и дату с помощью функции localtime() и присвоили его переменной $tim. Теперь давайте выведем сами данные:

print <<OTZYV
Отзыв пользователя $input{"Name"}
$input{"Opinion"}
Отзыв получен $tim
OTZYV

Кстати, это пример многострочного оператора print. Вместо открывающих кавычек здесь использованы символы<<и идентификатор (какое-нибудь имя следующего многострочного блока), а вместо закрывающих кавычек — только имя многострочного блока. В результате мы можем просто набирать текст, который должен быть выведен. В этот текст, однако, можно подставлять значения переменных: в данном случае вместо $input{"Name"} будет выведено имя пользователя, которое он ввел в поле формы с именем Name, вместо $input{"Opinion"} — его мнение, введенное в многострочное текстовое поле Opinion. А вместо переменной $tim будет выведено текущее время.

Теперь, когда все данные выведены, файл надо закрыть (только при этом он окончательно сохраняется на диске). Это делается с помощью оператора close:

lose(FILE);

Выдача сообщения пользователю

На этом миссия сценария завершается, но надо еще вывести подтверждение успешного завершения работы, чтобы пользователь узнал об этом. Это можно сделать с помощью оператора print, но прежде нужно перенаправить вывод обратно пользователю:

select(STDOUT);

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

print "<Н1>Ваш отзыв был успешно отправлен на сервер компании! </Н1>";

и завершить работу:

exit 0;

Хотя мы и рассмотрели написание этого сценария построчно, давайте все же теперь взглянем на него целиком:

#! /usr/bin/perl

require "cgi-lib.pl";
"Content-type: text/html\n\n";

&ReadParse(*input) ;

srand($$^time);
$fname=$input{"Name"}.int(rand(99999) ) ;

if (-e "$fname.txt") {
print "Ошибка создания файла. Попробуйте еще раз!";
exit 0;
}

open (FILE, ">$fname.txt");
select (FILE);
$tim=localtime();
print <<OTZYV
Отзыв пользователя $input{"Name"}

$input{"Opinion"}

Отзыв получен $tim
OTZYV
close(FILE);
select(STDOUT);
print "<Н1>Ваш отзыв был успешно отправлен на сервер компании! </H1>";

exit 0;

Конечно, этот сценарий совершает довольно примитивную работу. Однако его рассмотрение может дать некоторое представление о том, что за пределами HTML, CSS и JavaScript открываются новые просторы Web-технологий. И мы надеемся, что после прочтения этой книги наши читатели не просто научатся создавать динамические веб-страницы, но и заинтересуются другими существующими веб-технологиями.

И последний совет: чтобы научиться свободно обращаться с HTML/CSS/ JavaScript, как можно больше экспериментируйте самостоятельно! Начинать можно с изменений и «улучшений» приведенных в книге примеров, однако затем попробуйте создавать страницы самостоятельно «с нуля» или « почти с нуля ». А если вы увидите в WWW какую-либо интересную и красивую страницу, обязательно посмотрите на ее код, вникните в то, как она сделана. Такой опыт тоже очень полезен.

На этом мы, пожалуй, закончим наше путешествие в мир веб-технологий. Удачи вам, дорогой читатель, и хороших веб-страниц!

Hosted by uCoz