CGIで送受信するプログラムの作り方
入力フォームを返すのとフォームからのPOSTとGETを受け取って処理する、
同一のスクリプトを、CGI、C言語で作成致しましたが、
上手く動作していません。(白紙のページが表示されるだけでした。)
getenv("REQUEST_METHOD");がNULLだった場合に本来表示されるハズのページが表示されるはずで、これが出ないという事は、getenv("REQUEST_METHOD");がNULLでなく、うまく動作していないのでは?
こう考え、getenv("REQUEST_METHOD");の中身を表示させた所、GET と表示されました。
何も送信していないのに、GETと判断されているのは何故でしょうか?
また、正しい動作をするプログラムをご提示頂けますと助かります。
/* form2.c */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int len;
char *clen;
char *data,*method,*qs;
printf("Content-type: text/html\n\n");
printf("<html><head></head><body>\n");
method = getenv("REQUEST_METHOD");
printf("%s\n", method);
if(method == NULL){
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head>\n");
printf("<title>form test page</title>\n");
printf("</head>\n");
printf("<body>\n");
printf("<form method=\"post\" action=\"form2.cgi\">\n");
printf("<input type=\"text\" name=\"fieldname\" size=\"40\"><br>\n");
printf("<input type=\"text\" name=\"fieldname2\" size=\"40\"><br>\n");
printf("<input type=\"text\" name=\"fieldname3\" size=\"50\"><br>\n");
printf("<input type=\"submit\" value=\"書き込み\">\n");
printf("</form>\n");
printf("<form method=\"get\" action=\"form2.cgi\">\n");
printf("<input type=\"text\" name=\"fieldname\" size=\"40\"><br>\n");
printf("<input type=\"text\" name=\"fieldname2\" size=\"40\"><br>\n");
printf("<input type=\"text\" name=\"fieldname3\" size=\"50\"><br>\n");
printf("<input type=\"submit\" value=\"書き込み\">\n");
printf("</form>\n");
printf("</body>\n");
printf("</html>\n");
exit(0);
}
//POST
else if(!strcmp(method, "POST")){
clen = getenv("CONTENT_LENGTH");
if(clen == NULL){
exit(0);
}
len = atol(clen);
data = malloc(len+1);
scanf("%s",data);
data[len] = '\0';
printf("Content-type: text/html\n\n");
printf("<html><head></head><body>\n");
printf("%s<br>\n", data);
printf("</body></html>\n");
}
//GET
else if(!strcmp(method, "GET")){
qs = getenv("QUERY_STRING");
printf("Content-type: text/html\n\n");
printf("<html><head></head><body>\n");
printf("%s<br>\n", qs);
printf("</body></html>\n");
}
printf("</body></html>\n");
}
宜しくお願いいたします。
お礼
POSTに変更したら?が無くなりました。有難う御座います。 もう一点関連したご質問ですが、 cgiでは無く、htmlを呼び出す箇所があるのですが、 <FORM method=GET action=../a.html> とすると、やはり?が付きます。ここでPOSTにするとエラー になってしまい、飛びません。