cgi ÄÄÆÄÀÏÀº µÇ´Âµ¥ À¥ÆäÀÌÁö¿¡¼ ½ÇÇàÀÌ ¾ÈµÇ´Âµ¥ Ȥ½Ã ¹®Á¦ µÇ´Â°÷ ÀÖÀ¸½Ã¸é ã¾ÆÁÖ½Ã¸é °¨»çÇϰڽÀ´Ï´Ù.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <cgiutil.h> // CGI library Çì´õÆÄÀÏ
#include <mysql.h> // MySQL library Çì´õÆÄÀÏ
struct ent {
// NAME°ú VALUE¸¦ À§ÇÑ ±¸Á¶Ã¼
char name[200];
char value[200];
};
int main() {
struct ent a[100];
int i=0, j, cnt=0, comp1, comp2, check;
char *en, *en2, *en3;
char *str;
char idstr[11], namestr[21];
long cl;
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW tuple;
char query[300];
int num_tuples, num_fields;
// MIME header Àü´Þ ¹× header¿Í data ±¸ºÐ
printf("Content-type:text/html\n\n");
// request method¿¡ ÀÇÇÑ ±¸ºÐ
if(!strcmp(getenv("REQUEST_METHOD"), "GET"))
// request method¿¡ ÀÇÇÑ ±¸ºÐ : GETÀÎ °æ¿ì
str = getenv("QUERY_STRING");
else {
// request method¿¡ ÀÇÇÑ ±¸ºÐ : POSTÀÎ °æ¿ì
en = getenv("REQUEST_METHOD");
comp1 = strcmp(en, "POST");
if(comp1 == 0) {
en2 = getenv("CONTENT_TYPE");
comp2 = strcmp(en2, "application/x-www-form-urlencoded");
if(comp2 == 0) {
en3 = getenv("CONTENT_LENGTH");
cl = atoi(en3);
str = (char*) malloc(sizeof(char)*cl);
if(str == NULL) {
printf("Can't allocated memory!!!\n");
printf("</body></html>");
exit(1);
}
for (i=0; i<cl; i++)
*(str+i) = getc(stdin);
*(str+i)='\n';
}
}
}
// ¹®ÀÚ¿ char *strÀ» °¡Áö°í NAME/VALUE °ªÀ» ¾ò´Â´Ù.
for(i=0; str[0]!='\0'; i++){
cnt++;
getword(a[i].value, str, '&');
// ÀÔ·Â ¹®ÀÚ¿¿¡¼ (NAME,VALUE) ½ÖÀ» ±¸º°
unescape_url(a[i].value);
// %xx´Â ÇØ´çÇϴ Ư¼ö ¹®ÀÚ·Î
plustospace(a[i].value);
// +´Â blank space·Î
getword(a[i].name, a[i].value, '=');
// name=value ½Ö¿¡¼ value¸¸À» °ñ¶ó³½´Ù
}
// mysql µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÑ´Ù.
conn = mysql_init(NULL);
mysql_real_connect(conn, NULL, "bky89", "kookie1234", "chance", 0, NULL, 0);
// ¸¸¾à ¿¬°á¿¡ ¿À·ù°¡ ¹ß»ýÇß´Ù¸é ¿À·ù¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ ´ÙÀ½¿¡ Á¾·áÇÑ´Ù.
if(conn == NULL){
printf("<body bgcolor='#000000' text='#FFFFFF'>\n");
printf("<FONT size='+4' face='Comic Sans MS, cursive'><a href='refresh.cgi?initname=%s'>\n");
fprintf(stderr, "%s", mysql_error(conn));
printf("</font></body>");
mysql_close(conn);
exit(1);
}
// Query¹®À» ÀÔ·ÂÇÑ´Ù.
sprintf(query,
"SELECT username FROM user WHERE userid = '%s';", a[0].value);
check = mysql_query(conn, query);
// ÀÔ·ÂÇÑ Query¹®¿¡ ¿À·ù°¡ ¹ß»ýÇß´Ù¸é ¿À·ù ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ ÈÄ Á¾·áÇÑ´Ù.
if(check != 0) {
printf("<body bgcolor='#000000' text='#FFFFFF'>\n");
printf("<FONT size='+4' face='Comic Sans MS, cursive'><a href='refresh.cgi?initname=%s'>\n");
printf("Select Error<br>%s", mysql_error(conn));
printf("</font></body>");
mysql_close(conn);
exit(1);
}
// Query °á°ú¸¦ ÀúÀåÇÑ´Ù.
res = mysql_store_result(conn);
// Quert °á°ú°¡ Á¦´ë·Î ÀúÀåµÇÁö ¾Ê¾Ò´Ù¸é res¸¦ clear ½ÃŰ°í ¿¬°áÀ» ²÷°í Á¾·áÇÑ´Ù.
if(res == NULL) {
printf("<body bgcolor='#000000' text='#FFFFFF'>\n");
printf("<FONT size='+4' face='Comic Sans MS, cursive'><a href='refresh.cgi?initname=%s'>\n");
printf("%s", mysql_error(conn));
printf("</font></body>");
mysql_free_result(res);
mysql_close(conn);
exit(1);
}
// ¸î °³ÀÇ tuple¸¦ ¾ò¾î¿Ô´ÂÁö °Ë»çÇÑ´Ù.
num_tuples = mysql_num_rows(res);
//º¹»ç
strcpy(idstr, a[0].value);
strcpy(namestr, tuple[0]);
printf("<body bgcolor='#000000' text='#FFFFFF'>\n");
printf("<form action='cgi-bin/login.cgi' method='post' target='_top'>\n");
printf("<table width='100%' border='0'>\n");
printf(" <tr>\n");
printf(" <td><FONT size='+4' face='Comic Sans MS, cursive'><a href='refresh.cgi?initname=%s'>JIPSIN</a></FONT></td>\n");
printf(" <td width='350' align='center' valign='bottom'><font size='3' face='Comic Sans MS, cursive'>\n");
printf("Welcome <a href='refresh.cgi?initname=%s'>%s</a>!\n", idstr, namestr);
printf(" </td>\n");
printf(" </tr>\n");
printf("</table>\n");
printf("</form>\n");
printf("</body>\n");
//Query °á°ú¸¦ À§ÇÑ res °´Ã¼¸¦ free ½ÃÄÑÁÖ°í mysql ¼¹ö¿Í ¿¬°áÀ» ²÷Àº ÈÄ Á¾·áÇÑ´Ù.
mysql_free_result(res);
//mysql ¼¹ö¿Í ¿¬°áÀ» ²÷Àº ÈÄ Á¾·áÇÑ´Ù.
mysql_close(conn);
}