25659-1 (663057), страница 2

Файл №663057 25659-1 (Использование CGI при создании интерактивных интерфейсов) 2 страница25659-1 (663057) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)



Пример использования CGI




Введите свое имя(Фамилию Имя Отчество):


Пол: - мужской -женский








После инициации формы путем нажатия кнопки "Послать запрос" WWW сервер обрабатывает поток данных от формы (заменяет все пробелы в именах и значениях на символ "+", заменяет все символы с десятичным кодом большим 128 на символ "%" и следующим за ним шестнадцатеричным кодом символа (например "И" в %С8)).
Выходной поток примет следующий вид:

RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8%E4%EE%F0
%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE%F1
%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1

В момент передачи управления модулю post-query сервер присваивает значения переменным окружения и аргументам командной строки:

argc = 0. argv =
SERVER_SOFTWARE = NCSA/1.5.1
SERVER_NAME = iceman.cnit.nsu.ru
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
SERVER_PORT = 80
REQUEST_METHOD = POST
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,*/*
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING =
REMOTE_HOST = fwa.cnit.nsu.ru
REMOTE_ADDR = 193.124.209.74
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE = application/x-www-form-urlencoded
CONTENT_LENGTH = 142

Результат работы post-query:

Query Results

You submitted the following name/value pairs:



  • RealName = Петров Иван Сидорович
  • Sex = Мужской
  • Submit = Послать запрос

И на экране браузера
Query Results
You submitted the following name/value pairs:
RealName = Петров Иван Сидорович
Sex = Мужской
Submit = Послать запрос

Ниже приведен исходный текст программы post-query.

#include
#ifndef NO_STDLIB_H
#include
#elsechar *getenv();
#endif
#define MAX_ENTRIES 10000

typedef struct {
char *name;
char *val;
} entry;

char *makeword(char *line, char stop);
char *fmakeword(FILE *f, char stop, int *len);
char x2c(char *what);
void unescape_url(char *url);
void plustospace(char *str);

main(int argc, char *argv[])

{
entry entries[MAX_ENTRIES];
register int x,m=0;
int cl;
printf("Content-type: text/html%c%c",10,10);
if(strcmp(getenv("REQUEST_METHOD"),"POST"))
{ printf("This script should be referenced with a METHOD of POST.\n");
printf("If you don't understand this, see this "); printf(" forms overview.%c",10);
exit(1);
} if(strcmp(getenv("CONTENT_TYPE"),"application/x-www-form-urlencoded"))
{printf("This script can only be used to decode form results. \n");
exit(1);
}
cl = atoi(getenv("CONTENT_LENGTH"));
for(x=0;cl && (!feof(stdin));x++)
{m=x;entries[x].val = fmakeword(stdin,'&',&cl); plustospace(entries[x].val);
unescape_url(entries[x].val);
entries[x].name = makeword(entries[x].val,'=');
}
printf("

Query Results

");
printf("You submitted the following name/value pairs:

%c",10);
printf("

    %c",10);
    for(x=0; x <= m; x++)
    printf("
  • %s = %s%c",entries[x].name, entries[x].val,10);
    printf("
%c",10);
}

Надо отметить, что post-query не обрабатывает имена, поэтому в примере они даны на английском языке. Если Вы используете русские названия имен, то вы должны обработать имена также как и значения, т.е. заменить все символы "+" на пробелы и преобразовать шестнадцатеричные коды кириллических символов в сам символ.
Приведем также исходный текст функций используемых post-query

char *makeword(char *line, char stop) {
/* Предназначена для выделения части строки, ограниченной "стоп-символами"*/
int x = 0,y;
char *word = (char *) malloc(sizeof(char) * (strlen(line) + 1));
for(x=0;((line[x]) && (line[x] != stop));x++)
word[x] = line[x];
word[x] = '\0';
if(line[x]) ++x;
y=0;

while(line[y++] = line[x++]);
return word;
}

char *fmakeword(FILE *f, char stop, int *cl) {
/* Предназначена для выделения строки, ограниченной "стоп-символом" stop, из потока f длиной cl.
*/
int wsize;
char *word;
int ll;

wsize = 102400;
ll=0;
word = (char *) malloc(sizeof(char) * (wsize + 1));

while(1) {
word[ll] = (char)fgetc(f);
if(ll==wsize) {
word[ll+1] = '\0';
wsize+=102400;
word = (char *)realloc(word,sizeof(char)*(wsize+1));
}
--(*cl);
if((word[ll] == stop) || (feof(f)) || (!(*cl))) {
if(word[ll] != stop) ll++;
word[ll] = '\0';
return word;
}
++ll;
}
}


char x2c(char *what) {
/* Предназначена для преобразования шестнадцатиричного кода символа в код символа
*/
register char digit;

digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));
digit *= 16;
digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));
return(digit);
}

void unescape_url(char *url) {

register int x,y;

for(x=0,y=0;url[y];++x,++y) {
if((url[x] = url[y]) == '%') {
url[x] = x2c(&url[y+1]);
y+=2;
}
}
url[x] = '\0';
}

void plustospace(char *str) {
/*замена символов "+" на символ "пробел"*/
register int x;

for(x=0;str[x];x++) if(str[x] == '+') str[x] = ' ';
}

Для демонстрации реализации формы с методом запроса GET воспользуемся той же самой формой, что и для метода POST и программой query. Для этого изменим значение атрибутов ACTION и METHOD в теге FORM.

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

argc = 0. argv is =
SERVER_SOFTWARE = NCSA/1.5.1
SERVER_NAME = iceman.cnit.nsu.ru
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING = RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8
%E4%EE%F0%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE %F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1
REMOTE_HOST = fwa.cnit.nsu.ru
REMOTE_ADDR = 193.124.209.74
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

Как мы видим, выходной поток от формы появился в значении переменной QUERY_STRING.

Результат работы query полностью совпадает с результатом работы post-query.

Приложение 1 к гл.4 Конструкции языка HTML для построения форм

...

использование: предназначен для получения информации от клиента и определяет начало и конец формы.

атрибуты:

  • Обязательные
    ACTION - определяет URI (Universal Resource Identifier-адрес или место расположения документа) CGI-скрипта
    METHOD - определяет метод передачи информации скрипту. Возможные значения GET или POST.

  • Необязательные
    [ENCTYPE] - определяет тип MIME декодирования информации (значение этого атрибута по умолчанию - "application/x-www-form-urlencoded").
    [SCRIPT] - используется для передачи URI скрипта. Язык скрипта и интерфейс пользователя при этом не являются частью спецификации HTML 3.0

Важно: Формы не могут быть вложенными!

Для реализации формы используются следующие теги.

использование: предназначен для создания различных по своей функциональности полей ввода.

атрибуты:

  • Обязательные:

TYPE - определяет тип поля формы.

    • Допустимые значения:
      TEXT - позволяет символьный ввод.
      PASSWORD - предназначено для "скрытого" ввода символов (вводимые символы не отображаются).
      CHECKBOX - поле, позволяющее два состояния ("есть", "нет"). Должен применяться с атрибутами NAME и VALUE
      RADIO - поле, позволяющее выбор "один из всех"
      SUBMIT - кнопка инициирующая передачу информации из формы обрабатывающему скрипту, определенному в ACTION в соответствии с методом, определенным атрибутом METHOD.
      RESET - кнопка, сбрасывающая все введенные ранее значения.
      IMAGE - поле позволяющее воспроизвести событие SUBMIT при помощи вашего изображения, при этом возвращается два значения: name.x = координата Х и name.y = координата Y, где Х и Y координаты положения курсора мыши на изображении в момент щелчка.
      HIDDEN - поле создающее неотображаемое значение.
      RANGE - определяет поле позволяющее ввести цифровое значение с определенными допустимыми верхним и нижним пределами.
      Используется вместе с атрибутами MAX и MIN определяющими область допустимых значений (например: TYPE=RANGE MIN=1 MAX=10).


NAME - значение этого атрибута определяет идентификатор поля.
VALUE - значение этого атрибута определяет что будет передано в качестве значения по умолчанию для данного поля при инициации формы.
SRC - определяет URI файла изображения. Используется только с типом поля IMAGE.
[CHECKED] - позволяет установить начальное значение поля типа CHECKBOX.
SIZE - определяет размер поля.
[MAXLENGTH] - определяет максимальное количество символов, допустимое для ввода в поле.
[ALIGN] - позволяет позиционирование

    • Допустимые значения:

    • по вертикали
      TOP - выравнивание по верху.
      MIDDLE - выравнивание по середине.
      BOTTOM выравнивание по низу.
      Эти значения используются только с TYPE=IMAGE.

    • по горизонтали
      [LEFT] - выравнивание слева
      [RIGHT] - выравнивание справа


[DISABLED] - определяет поле как "read only" - только для чтения. Значение в поле не может быть изменено пользователем.
[ERROR] - определяет сообщение об ошибке, объясняющее, почему введенное значение в поле не верно.

атрибуты>...

использование: предназначен для определения области ввода текста. Размер поля определяется атрибутами.

атрибуты:

NAME - значение этого атрибута определяет идентификатор поля. Возвращается при инициации формы.
ROWS - определяет количество строк в текстовой области.
COLS - определяет количество столбцов в текстовой области.
[VALUE] - задает значение по умолчанию.
[DISABLED] - определяет поле как "read only" - только для чтения. Значение в поле не может быть изменено пользователем.
[ERROR] - определяет сообщение об ошибке, объясняющее, почему введенное значение в поле не верно.


значение1
...
значениеN

использование: предназначен для определения области выбора из нескольких значений (меню).

Атрибуты:

NAME - значение этого атрибута определяет идентификатор поля. Возвращается при инициации формы.
[SIZE] - определяет количество видимых возможных значений.
[MULTIPLE] - определяет возможность множественного выбора.
[DISABLED] - определяет меню как "read only" - только для чтения. Значения в меню не может быть выбрано пользователем и показывается серым цветом.

значение

использование: используется только с для определения пунктов меню.

атрибуты:

SELECTED - определяет значение по умолчанию
VALUE - определяет возвращаемое значение

Примечание: в [ ] даны необязательные атрибуты

Характеристики

Тип файла
Документ
Размер
752,48 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее