Использование технологий WWW для доступа к базам данных



         

Примеры cgi-модулей - часть 3


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("<H1>Query

Results</H1>");

printf("You submitted

the following name/value pairs:<p>%c",10);

printf("<ul>%c",10);

for(x=0; x <= m; x++)

printf("<li>

<code>%s = %s</code>%c",entries[x].name,

entries[x].val,10);

printf("</ul>%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;




Содержание  Назад  Вперед