8.Common Function


  • 함수의 사용

      앞장의 예를 봤을 텐데, 아주 간단하다. 즉,

    • GET방식 : cgiget.h를 include! getGetData() 호출

    • POST방식 : cgipost.h를 include! getPostData() 호출


      여기까지 하게 되면, Form Tag에 사용자가 적은 내용들이 entries라는 structure array에 entrey_count개수만큼 들어가 있게 된다.

  • 기타 추가 함수

      문제는 Form Tag로 들어오는 많은 값들 중에 특정 값이 뭔지 알고 싶다고 하자. 즉, 다음과 같은 Form이 있을 때, (앞장의 예중 일부)

    userid : <INPUT TYPE=text NAME=userid>
    passwd : <INPUT TYPE=password NAME=passwd>
    animal : <SELECT NAME=animal>
                      <OPTION>lion
                      <OPTION>tiger
                      <OPTION>monkey
                </SELECT>


      프로그램에서 userid가 뭐였는지 어떻게 알까? 간단하다. 즉, entries 배열을 뒤져서 "userid"라는 name을 가지는 것을 찾아서 val값을 가져오면 된다. 이게 귀찮아서 아예 함수를 만들었다. findEntry()인데 사용방법은 다음과 같다. get방식을 예로 들면,

    #include "cgiget.h"

    char* Userid;

    main()
    {
        int i;

        printf("Content-type: text/html\n\n");

        getGetData();

        Userid = findEntry("userid");
        if( Userid == NULL ){
           printf(" Please, Enter Userid\n"); exit(0);
        }
        printf(" User id is [%s]\n", Userid);
    }


      어떻게 찾는지 궁금한 사람은 findEntry함수를 살펴보라.

      위에서 굳이 Userid를 전역변수(global)로 선언했는데, 어차피 전체 프로그램에서 시도때도 없이 쓰이기 때문에 뺀것이다.

      Userid를 포인터로 선언했는데, 포인터만 보면 무서운 사람은 다음과 같이 바꿔서 사용해도 좋다. 즉, char* Userid; 부분은 char Userid[100]; findEntry함수 부분은 strcpy(Userid, findEntry("userid"));로 바꿔서 쓰면 된다. 그러나 주의할 점은, 만일 Userid로 들어오는 값이 100자리를 넘을 경우에 문제가 생기게 된다. 따라서 이럴 경우에는 strncpy(Userid, findEntry("userid"), 100-1);로 하면 99번째 자리에서 짤리고, 맨 마지막에 널이 들어가서 문제를 일으키지는 않는다.

      이렇게 해서, CGI를 위한 GET, POST방식별로 기본적인 함수들과 사용예까지 봤다. 이제 좀 속이 시원하지 않은가?

- 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