8.Common Function


  name=value가 여러 쌍이 들어오게 되므로 이걸 structure 배열에 넣어주면 좋을 것이다. 그래서 다음과 같은 자료구조를 사용하게 될 것이다.

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

entry entries[1000];
int entry_count;
typedef struct {
    char name[128];
    char val[128];
}entry;

entry entries[1000];
int entry_count;


  좌측은 POST 방식을 위한 자료구조이며, 우측은 GET방식을 위한 자료구조이다.

  위와 같은 구조를 가진 Data 형을 1000개의 entries Array로 잡았다. 여기서 1000개라함은 name=value의 총 개수를 말한다. 그리고, 실제로 CGI로 전달된 개수를 담을 entry_count를 선언했다.

    주의사항   사실 이 개수를 딱 몇 개인지 알 수도 있지만, 그냥 최대로 1000개는 넘지 않으리라는 가정하에 잡은 수치이다. 여기서 주의할 것은 select tag의 경우 multiple을 선택을 하게 되면, 선택한 개수만큼이 다 name=value의 형태를 띄게 된다는 점이다.( 같은 name을 가지는 모든 tag들이 이에 해당된다.). 특히, 오른쪽의 GET방식을 보면, name이나 value의 값이 128자를 넘지 않도록 규정되어 있으나, 이를 넘길 경우에는 시스템에 문제를 일으킬 소지가 있으니, 되도록이면, POST방식을 사용하기를 권장하는 바이다.


char *makeword(line, stop);
char *fmakeword(f, stop, cl);
char x2c(what);
void unescape_url(url);
void plustospace(str);
void getword(word,line,stop);
char x2c(what);
void unescape_url(url);
void plustospace(str);



  역시 왼쪽은 POST방식을 위해서 필요한 함수들이고, 오른쪽은 GET방식을 위한 함수들이다. 여기나온 함수를 모두 이해하면 좋지만, 굳이 다 이해할 필요는 없다.

  이 함수들의 잘 조합하여, GET, POST방식에 대응되는 기능을 수행하도록 추가로 2가지 함수를 더 만들고, 필요에 의해서 2가지 함수가 더 추가됐다.

void getPostData()POST방식으로 전송된 FORM Data를 entries배열에 저장
void getGetData()GET방식으로 전송된 FORM Data를 entries배열에 저장
char* findEntry(name)해당name을 가지는 value값을 return한다.
int findEntryCount(name)해당name을 가지는 value값의 개수를 return한다.


  이함수들을 파일로 모았다. 다음의 파일을 다운 받아 압축을 풀어서 사용하기 바란다.

- Last Update : 2001.7.9 by Deadfire(http://www.deadfire.net)

CGI with C 기초
서 언
준 비
용어 설명
기초 실습
기초 이론
작동 원리
Form Tag
     - GET METHOD
     - POST METHOD
Common Founction

Copyright ⓒ 1997 ~, Deadfire Program Master