Отправляет email-рассылки с помощью сервиса Sendsay

Perl - подпишись и учись!

  Все выпуски  

Perl - подпишись и учись!


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Tenet Banner System

Привет всем!

Это вторая рассылка моего сайта http://perl.bos.ru
Я благодарен тем немногим(уже больше, чем в первый раз, но надеюсь, что будет больше), которые нашли в себе смелость и подписались на мою рассылку.
Здесь я буду вам рассказывать способы программирования на языке Perl, а также всё, что с ним связано, да и вообще о сайтостроительстве.


Сегодня мой рассказ будет посвящён формам и всему тому, что с ними связано.

Тэг <FORM>

В HTML-документе для задания формы используются тэги <FORM>. . .</FORM>, отмечающие соответственно, начало и конец формы. Документ может содержать несколько форм, но они не могут быть вложены одна в другую. Тэг <Form> имеет параметры ACTION, METHOD и ENCTYPE. Отдельные браузеры (Netscape, Internet Explorer) поддерживают дополнительные параметры помимо стандартных, например, CLASS, NAME, STYLE и др. В общем виде форма задается следующим образом:
<FORM ACTION="URL" МЕТН0D=метод передачи ENCTYPE=MIME-тип> содержание формы </Form>

Параметр ACTION является единственным обязательным. Его значением является URL-адрес CGI-программы, которая будет обрабатывать информацию, извлеченную из данной формы.

Параметр METHOD определяет метод пересылки данных, содержащихся в форме, от браузера к Web-серверу. Он может принимать два значения: GET (по умолчанию) и POST.

Взаимодействие между клиентом-браузером и Web-сервером осуществляется по правилам, заданным протоколом HTTP, и состоит из запросов клиента и ответов сервера. Запрос разбивается на три части:

В первой строке запроса содержится HTTP-команда, называемая методом, URL-адрес запрашиваемого файла и номер версии протокола HTTP. Вторая часть- заголовок запроса. Третья часть-тело запроса, собственно данные, посылаемые серверу.

Метод сообщает серверу о цели запроса. В протоколе HTTP определены несколько методов. Для передачи данных формы в CGI-программу используются два метода: GET И POST.

При использовании метода GET данные формы пересылаются в составе URL-запроса, к которому присоединяются после символа ? в виде СОВОКУПНОСТИ пар переменная=значение, разделенных символом &. В этом случае первая строка запроса может иметь следующий вид:
GЕТ /cgi-bin/cgi-program.pl?name=Mike&surname=lvanoff HTTP/1. 1

После выделения данных из URL сервер присваивает их переменной среды QUERY_STRING, которая может быть использована CGI-программой.

При использовании метода POST данные формы пересылаются Web-серверу в теле запроса, после чего передаются сервером в CGI-программу через стандартный ввод.

Значением параметра ENCTYPE является медиа-тип, определяющий формат кодирования данных при передаче их от браузера к серверу. Браузер кодирует данные, чтобы исключить их искажение в процессе передачи. Возможны два значения этого параметра: application/x-www-form-urlencoded (по умолчанию) и multipart/form-data.

Одним из первых применений Интернета была электронная почта, ориентированная на пересылку текстовых сообщений. Часто возникает необходимость вместе с текстом переслать данные в нетекстовом формате, например, упакованный zip-файл, рисунок в формате GIF, JPEG и т.д. Для того, чтобы пересылать средствами электронной почты такие файлы без искажения, они кодируются в соответствии с некоторым стандартом. Стандарт MIME (Multipurpose Internet Mail Extensions, многоцелевые расширения электронной почты для Интернета) определяет набор MIME-типов, соответствующих различным типам данных, и правила их пересылки по электронной почте. Для обозначения МIМЕ-типа используется запись вида тип/подтип, где тип определяет общий тип данных, например, text, image, application (тип application обозначает специфический внутренний формат данных, используемый некоторой программой), а подтип - конкретный Формат внутри типа данных, например, application/zip, image/gif, text/html. MIME-ТИПЫ нашли применение в Web, где они называются также медиа-типами, для идентификации формата документов, передаваемых по протоколу HTTP. В HTML-форме параметр ENCTYPE определяет медиа-тип, который используется для кодирования и пересылки специального типа данных - содержимого формы.

Для создания полей средствами языка HTML существуют специальные тэги: <INPUT>, <SELECT>, <TEXTAREA>, которые употребляются только внутри тэга <FORM>. О них вы сможете прочитать, нажав на одну из вышеперечисленных ссылок.

А теперь перейду к более интересному, передаче данных cgi-скрипту и обработка этих данных.

Наипростейшим скриптом(после "Hello World!") является скрипт, который получает данные формы и обрабатывает их.

Предположим что вы разобрались, как организовать форму (со стороны HTML). Предположим, что форма заполнена и нажата кнопка "Submit", то есть данные пошли на обработку скрипту. Теперь становится понятным, что, собственно, требуется от скрипта.

Итак, в скрипт входят данные, закодированные urlencode и находящиеся в переменной QUERY_STRING либо подаваемые на STDIN. Во-первых, мы должны их(данные) получить. Для этого выполним следующее:

 if ($ENV{'REQUEST_METHOD'} eq 'GET'){#Анализируем метод, GET или POST
   $buffer=$ENV{'QUERY_STRING'};
   }
 elsif ($ENV{'REQUEST_METHOD'} eq 'POST'){
 read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   }
Мы считали данные в переменную $buffer. Теперь необходимо обработать эту сроку. Зная, что поля разделены символом "&", будем использовать его в качестве разделителя функции split.
 @pairs = split(/&/, $buffer);
Теперь организуем цикл по новообразованному масиву @pairs и, декодировав запрос, создадим хэш вида $hash{имя}=значение, коим будет являться %input.
 foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;#Декодирование запроса
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s///g;
  $input{$name} = $value;#Заполнение хэша
}
А теперь поместив данные запроса в хэш %input, можно делать с ними всё, что вашей душе угодно.
                                                That's all, Folks!
                                                                Nick

P.s Мой сайт находится в состоянии не только разработки и обновления, но и в состоянии раскрутки, по-этому, если вас не затруднит, посоветуйте мой сайт друзьям.
Также, вероятно, что у всех вас есть сайты, по-этому предлагаю обменяться ссылками.
На сайте также открылся форум, заходите туда, задавайте вопросы, обсуждайте!
Если у вас есть какие-либо вопросы и предложения, то направляйте их на мой e-mail: nicky@nm.ru

Хороших скриптов!


Tenet Banner System

http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное