програмування форм

Якщо ви конструюєте форми, рано чи пізно вам знадобиться створювати додаток з боку сервера для їх обробки. Не панікуйте. Немає нічого чарівного в програмуванні з боку сервера, і це не дуже важко. При деякій наполегливості і після невеликої практики ви будете штампувати обробні програми.

Найважливіший рада, який ми можемо дати з приводу програмування форм, легко запам'ятати - копіюйте чужі роботи. Писати обробляє форму додаток з чистого аркуша дуже важко. Копіювати працює додаток і модифікувати його для потреб своєї форми - набагато легче.К щастя, постачальники серверів знають про це і зазвичай поставляють зразки обробних форми додатків разом з сервером. Покопайтеся трохи в каталозі cgi-src, і ви знайдете ряд корисних прикладів, які зможете скопіювати і застосовувати.

Не варто навіть розраховувати відтворити все те корисне, що поставляється разом з вашим сервером, не можемо ми і надати повне керівництво з програмування форм. Все, що ми можемо зробити, - це запропонувати прості приклади GET- і POST-додатків, даючи вам відчути характер цієї роботи і, може бути, підштовхуючи вас в правильному напрямку.

Перш ніж ми почнемо, візьміть до уваги, що не всі сервери викликають ці додатки однаково.


Наші приклади покривають широкий клас серверів, що сталися від оригінального HTTP-сервера, створеного в центрі NCSA (National Center for Supercomputing Applications, Національний центр з використання суперкомп'ютерів). Вони також повинні працювати з дуже популярним і легко доступним сервером Apache. У всіх випадках звертайтеся за роз'ясненнями до серверної документації. Детальну інформацію можна знайти в книгах: «CGI Programming with Perl» Скотта Гулича (Scott Guelich), Шишир Гундаварама (Shishir Gundavaram) і Гюнтера Бірзнекса (Gunther Birznieks), «Webmaster in a Nutshell» 2 Стівена Спейнауера (Stephen Spainhour) і Роберта Екштейн (Robert Eckstein), випущених видавництвом «O'Reilly».

Альтернативою CGI-програмування є модель Java-сервлетов3, описана в книзі «Java Servlet Programming» 4, що належить перу Джейсона Хантера (Jason Hunter) і Вільяма Кроуфорда (William Crawford) (O'Reilly). Сервлети можуть застосовуватися для обробки як GET-, так і POST-форм, хоча вони присвячені більш загальних питань. У цій книзі немає прикладів сервлетів.

повернення результатів
Перш ніж почати, ми повинні обговорити, як завершується робота програми з боку сервера.


Всі додатки з боку сервера передають свої результати назад сервера (і далі - користувачеві), наравлено їх в стандартний висновок програми у вигляді файлу в MIME- кодуванні. Отже, перший рядок виведення повинна бути MIME-описателем типу вмісту. Якщо ваш додаток повертає HTML-документ, перший рядок це:

Другий рядок повинен бути абсолютно порожній. Ваша програма може повертати вміст і іншого типу - тільки вкажіть правильно MIME-тип. Зображень GIF, наприклад, передує:

Власне текст, який не повинен інтерпретуватися як HTML, може повертатися як:

Це часто виявляється корисним, коли доводиться повертати висновок інших команд, що генерують простий текст замість HTML.

Коли сервер www.kumquat.com обробляє цей URL, він викликає додаток під назвою dump-get, що зберігається в каталозі cgi-bin.


Все, що йде після знака питання, передається з додатком в якості параметрів.

Далі все може бути по-різному, відповідно до природи URL типу GET. У той час як форми поміщають в URL пари ім'я / значення, можна викликати додатки типу GET з URL, що містить тільки значення. Таким чином:

це теж допустимий виклик з параметрами, розділеними знаком «плюс» (+). Такий виклик зазвичай зустрічається, коли на додаток посилається пошуковий документ з тегом. Параметри, Ви телефонували в поле введення, передаються з додатком з боку сервера як безіменні параметри, розділені знаком «плюс».

Якщо викликати GET-додаток з пойменованими параметрами, сервер передасть ці параметри з додатком одним способом. Безіменні параметри передаються по-іншому.

Використання названих параметрів з GET-додатками
Зазначені параметри передаються GET-додатків шляхом створення змінної оточення QUERY_STRING і присвоювання їй в якості значення всієї тієї частини URL, яка слідує за знаком. Якщо взяти наш попередній приклад, значенням QUERY_STRING буде:

Ваша програма повинна отримати цю змінну і виділити з неї пари ім'я / значення. На щастя, більшість серверів поставляються разом з низкою стандартних програм, що виконують цю роботу, так що проста С-програма, просто роздруковувати параметри, може виглядати приблизно так:

#include
#include
#define MAX_ENTRIES 10000
typedef struct char * val;
> Entry;
char * makeword (char * line, char stop);
char x2c (char * what);
void unescape_url (char * url);
void plustospace (char * str);
main (int argc, char * argv [])
int num_entries, i;
char * query_string;
/ * Отримати значення змінної оточення QUERY_STRING * /
query_string = getenv ( "QUERY_STRING");
/ * Видобути параметри, побудувати таблицю входжень * /
for (num_entries = 0; query_string [0]; num_entries ++) entries [num_entries] .val = makeword (query_string, '');
plustospace (entries [num_entries] .val);
unescape_url (entries [num_entries] .val);
entries [num_entries] .name =
makeword (entries [num_entries] .val, '=');
>
/ * Видати "рибу" HTML * /
printf ( "Content-type: text / html \ n");
printf ( "\ n");
printf ();
printf ();
printf ( "Іменовані параметри \ n");
printf ( "");
printf ();
printf ( "Ви ввели такі параметри: \ n");
printf ( "
    \ N "); / * Видати отримані від користувача параметри * /
    for (i = 0; i \ n ");
    printf ( "\ n");
    >

У реальних додатках ви повинні вставити дійсні коди обробки параметрів після їх виділення і перед генерацією HTML.

Зрозуміло, вам також потрібно змінити видається HTML-текст відповідно до функції вашої програми.

Використання безіменних параметрів з GET-додатками
Безіменні параметри передаються з додатком як параметри командного рядка. Це робить розробку програми з боку сервера майже тривіальної. Ось проста послідовність команд, що друкує значення параметрів:

#! / Bin / csh -f
#
# Висновок заданих користувачем різних неназваних параметрів типу GET
echo "Content-type: text / html"
echo
echo ''
echo ''
echo 'Висновок різних неназваних параметрів'
echo ''
echo ''
echo 'Ви задали наступні параметри:'
echo '
    '
    foreach i ($ *)
    echo '
  • '$ I
    endecho '
'
echo ''
exit 0

Ми знову йдемо того ж загальним правилом: виводимо типовий заголовок документа, що включає MIME-тип вмісту, за ним - параметри і стандартне завершення. Щоб перетворити це в реальне додаток, замініть цикл foreach командами, які щось дійсно роблять.

#include
#include
#define MAX_ENTRIES 10000
typedef struct 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 [])
int num_entries, i;
/ * Видобути параметри з stdin, побудувати таблицю входжень * /
for (num_entries = 0;! feof (stdin); num_entries ++) entries [num_entries] .val = fmakeword (stdin, '', cl);
plustospace (entries [num_entries] .val);
unescape_url (entries [num_entries] .val);
entries [num_entries] .name =
makeword (entries [num_entries] .val, '=');
>
/ * Видати "рибу" HTML * /
printf ( "Content-type: text / html \ n");
printf ( "\ n");
printf ();
printf ();
printf ( "Іменовані параметри \ n");
printf ( ""); printf ();
printf ( "Ви ввели такі параметри: \ n");
printf ( "
    \ N ");
    / * Видати отримані від користувача параметри * /
    for (i = 0; i \ n ");
    printf ( "\ n");
    >

Як і інші приклади, ця програма цілком придатна для перевірки параметрів, переданих серверного додатку, поки ви новачок в формах і налагодженні програм. Її також можна використовувати як основу для інших додатків, вставляючи відповідний обробляє код після того, як список параметрів побудований, і змінюючи висновок програми, щоб відправляти користувачеві відповідні результати.

Схожі статті