2014년 8월 21일 목요일

proc로 cgi만들기(3) - 김태양[오라클개발자교육/오라클/ORACLE강좌/오라클교육잘하는곳/오라클교육추천/ORACLE실무교육/ORACLE/ORACLE교육/ORACLE학원/오라클실무교육]

오늘은 게시판처럼 List를 Table로 보여주는 기능이 들어있는 cgi를 작성하여 보도록 하겠습니다. 

1) 소스 

#include <stdio.h> 

#include "/home/superman/cgic/cgic.h" 



#define USERNAME "superman" 

#define PASSWORD "superman" 

#define DBSTRING "db" 

#define NEXT 5 // 한화면에 5개의 개시물을 보여주기 위한 선언 



EXEC SQL BEGIN DECLARE SECTION; 

char *username = USERNAME; 

char *password = PASSWORD; 

char *dbstring = DBSTRING; 



int re2; 

int re3; 

int page1,page2,page3; 

int pagecount1; 

int pagecount2; 

int pagecount4; 

int temp; 

int allpage; 

int i,j,flag1; 

int id;  

int xx; 

VARCHAR re1[20]; 

VARCHAR re4[60]; 

VARCHAR re5[20]; 

VARCHAR re6[2000]; 

VARCHAR re7[10]; 

VARCHAR sqlstmt[200]; 



EXEC SQL END DECLARE SECTION; 

EXEC SQL INCLUDE sqlca; 



void sqlerror(); 

void setMemory ( ); 

void getCgiParameter();  



int cgiMain ( void ) { 



putenv("ORACLE_HOME=/usr/oracle/733"); 

putenv("ORACLE_SID=DB"); 

putenv("NLS_LANG=American_America.ko16ksc5601"); 

putenv("LD_LIBRARY_PATH=/usr/oracle/733/lib"); 



EXEC SQL WHENEVER SQLERROR DO sqlerror(); 

EXEC ORACLE OPTION(RELEASE_CURSOR=YES); 

EXEC ORACLE OPTION(HOLD_CURSOR=NO); 

EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbstring; 

cgiHeaderContentType("text/html"); // web으로 보여줘야 하게 때문에 html라고 header에 정의 



EXEC SQL SELECT count(*) INTO : allpage FROM s_reg_db;//총 개수를 allpage변수에 저장시킴 



sprintf(sqlstmt.arr," select S_NAME , S_AGE , S_SEX , S_ADDRESS , S_TELEPHONE , to_char(S_DATE, 'yy/mm/dd') , S_MEMO, S_ID " 

" from s_reg_db " 

" order by S_DATE "); // list에 넣을 데이터를 query해옴 

sqlstmt.len = strlen( (char *)sqlstmt.arr); // 이것 꼭 써줘야 올바르게 값이 나옵니다!! 



/* 커서 설정 */ 

EXEC SQL PREPARE s_reg_result FROM :sqlstmt; 

EXEC SQL DECLARE reg_cursor CURSOR for s_reg_result; 

EXEC SQL OPEN reg_cursor; 



/* 나이별로 검색하는 부분 - 다음시간에 할것임*/ 

fprintf(cgiOut,"<form action=/cgi-bin/test/henryiii/ex3/ex3.cgi method=post>"); 

fprintf(cgiOut,"<h5>Age Search</h5>");  

fprintf(cgiOut,"<input type=text name=st_age maxlength=5 size=10 >~<input type=text name=ed_age maxlength=5 size=10 >"); 

fprintf(cgiOut,"<br><p>");  

fprintf(cgiOut,"<input type=hidden name=s value=1>"); 

fprintf(cgiOut,"<input type=hidden name=page value=1>"); 

fprintf(cgiOut,"<input type=text name=search1>"); 

fprintf(cgiOut,"<input type=submit value=search>"); 

fprintf(cgiOut,"</form>"); 



/* 웹에 보여주는 list table의 label을 작성하는 부분*/ 

fprintf(cgiOut,"<table border=1 width=100%>"); 

fprintf(cgiOut,"<tr>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Number"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Write Date"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Name"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Age"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Sex"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Address"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Telephone"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"Memo"); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"</tr>"); 



getCgiParameter(); // 페이지수를 받아오는 함수 

pagecount1 = page1; 

pagecount2 = pagecount1*5; 



for ( i=1 ; i <= pagecount2 ; i++) 



setMemory(); // 변수 초기화 



if ( page1 > 1 && flag1==0) 



for ( j=1 ; j<=((page1-1)*5) ; j++ ) 



EXEC SQL FETCH reg_cursor INTO :re1 , :re2 , :re3 , :re4 , :re5 , :re7 , :re6 , id; //위에서 만든 커서를 가지고 1개씩 row를 fetch해옴 





i=j; 

flag1=1; 





EXEC SQL FETCH reg_cursor INTO :re1, :re2 , :re3, :re4, :re5, :re7, :re6, id; 



if ( sqlca.sqlcode == 1403 ) /* 더 이상의 데이터가 없다면 중단하라는 문장 */ 

break; 



/* 실제 query해온 data를 table에 찍어줌 */ 

fprintf(cgiOut,"<tr>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%d",id); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%s",re7.arr); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%s",re1.arr); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"%d",re2); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>");  



if ( re3 == 1 ) { 

fprintf(cgiOut,"Male"); 



else if ( re3 == 2 ) { 

fprintf(cgiOut,"Female"); 





fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%s",re4.arr); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%s",re5.arr); 

fprintf(cgiOut,"</font></td>"); 

fprintf(cgiOut,"<td>"); 

fprintf(cgiOut,"<font size=2>"); 

fprintf(cgiOut,"%s",re6.arr); 

fprintf(cgiOut,"</font></td>"); 

}  

fprintf(cgiOut,"</tr>");  

fprintf(cgiOut,"</table>"); 

fprintf(cgiOut,"<br><p>"); 



EXEC SQL close reg_cursor; 



if ( allpage == 0 ) 

exit(1); 



page3 = page1; 



if ( allpage > NEXT && allpage > (page1*NEXT)) 



flag1=0; 

fprintf(cgiOut,"<a href=/cgi-bin/test/henryiii/ex2/ex2.cgi?page=%d>Next</a>",++page1); // Next를 눌렀을 때 자신의 cgi를 다시 호출하여 사용 */ 

page2=page1-1; 

page3 = page2; 





if ( allpage > 5 && (page3*5) >= 10) 



flag1=0; 

fprintf(cgiOut,"<a href=/cgi-bin/test/henryiii/ex2/ex2.cgi?page=%d>Prev</a>",--page3); 





fprintf(cgiOut,"<a href=/cgi-bin/test/henryiii/ex4/ex4.cgi>Write</a>"); 



return 0; 





void sqlerror() { 

EXEC SQL WHENEVER SQLERROR CONTINUE; 



fprintf(cgiOut, "ORACLE Error detected:<BR>\n"); 

fprintf(cgiOut, "% .70s <BR>\n", sqlca.sqlerrm.sqlerrmc); 



EXEC SQL ROLLBACK WORK RELEASE; 



exit(1); 





void setMemory ( ) { /* 변수초기화*/ 



memset(re1.arr,0,sizeof(re1.arr)); 

memset(re4.arr,0,sizeof(re4.arr)); 

memset(re5.arr,0,sizeof(re5.arr)); 

memset(re6.arr,0,sizeof(re6.arr)); 

memset(re7.arr,0,sizeof(re7.arr)); 

re2=NULL; 

re3=NULL; 

id=NULL; 







void getCgiParameter() { /* page값을 받아옴 */ 

int result; 

char x[3]; 

result = cgiFormString ("page",x,3); 

page1 = atoi (x); 

} 



평일주간[100%환급과정]
(8/25)C#4.0,WinForm,ADO.NET
(8/25)안드로이드개발자과정
(8/25)SQL기초에서 Schema Object까지
(8/29)Spring,MyBatis,Hibernate실무과정
(8/29)자바기초JDBC,Servlet/JSP까지
(8/29)PL/SQL,ORACLE HINT,TUNING
(8/25)오라클자바채용확정교육
평일야간[개인80%환급]
(8/26)SQL기초에서실무까지
(8/26)안드로이드개발자과정
(8/28)자바JSP,jQuery,Spring,MyBatis
(8/29)Spring, MyBatis, Hibernate
(9/02)HTML5,CSS3,Ajax,jQuery마스터
(9/12)C#,Network,ADO.NET,ASP.NET
주말주간[개인80%환급]
(8/23)자바웹&스프링,마이바티스
(8/23)Spring, MyBatis, Hibernate
(8/23)SQL기초에서실무까지
(8/23)자바,네트워크,웹&스프링
(8/30)안드로이드개발자과정
(8/30)C#,ASP.NET마스터(8/30)웹퍼블리싱 마스터

댓글 없음:

댓글 쓰기