database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 2396 게시물 읽기
No. 2396
태웅이의 버버벅 코딩 테크닉#3 (게시판 소스임, 목록보기만..)
작성자
이태웅
작성일
2001-03-08 14:31
조회수
4,041

안녕하세요~ 코딩하다보니.. 별 거지같은 소스를 만들었는데...

이거나마 도움이 되시라고 소스코드를 올립니다.

참고로 여기서 변수사용은 전역변수 지역변수 여기저기 혼용했는데..

정리할까 생각하다가 그냥 귀찮아서.. 그냥 두었습니다.

그냥 알고리즘 부분만 유심히 보시면 괜찮을 것 같군요.

키값하나만으로도 몇번째 페이지인지.. 리플글은 있는지 다 확인이

되게 만들었거든요.(sql db고치기 귀찮아서.. 그냥 하나로 되게

만듬.. 정말 게을러서리.. //;)

하여간 올립니다요.

 

#include <stdio.h>

#include <string.h>

#include "libpq/fe.h"

#include "qDecoder.h"

 

#define LINE 10

#define DB "wboard"

void go(PGresult *result, int page, int flag);

int printline(PGresult *result, int num, int re, int page);

static void exit_nicely(PGconn *conn);

 

char *pghost, *pgport, *pgoptions, *pgtty, *dbName, *login, *pwd;

char *table, *search;

PGconn *pc119;

char imsi[200];

int page, i, pg=0, search_flag=0;

long count=0;

int nTups, lpage;

 

 

void go(PGresult *result, int page, int flag)

{

int i1, re1;

char temp[200];

PGresult *res1;

for (i1 = 0; i1 < PQntuples(result); i1++)

{

sprintf(temp, "%s", PQgetvalue(result,i1,5));

re1=atoi(temp); // re의 1000단위 부분은 리플을 가지고있는지.. 1단위는 리플레벨

if (PQgetvalue(result,i1,5)==NULL) re1=0;

if (re1==flag)

{

if (printline(result, i1, re1, page)==0) return;

}

else if ((re1 / 1000)==1)

{

if ((re1/1000)==flag){

if (printline(result, i1, (re1/1000), page)==0) return;

}

sprintf(temp, "select num, name, email, subject, renum, re, date, count from %s where renum=%s order by num DESC",table ,PQgetvalue(result,i1,0));

res1=PQexec(pc119, temp);

go(res1, page, flag+1);

continue;

}

}

}

 

 

int printline(PGresult *res, int num, int re, int page) // num은 셀렉트한 문장의 순서고 글번호는 아니다. re는 리플정도.

{

int i2,i3;

char cc[10];

pg++;

if (pg <= (page*LINE)) return 1;

if (count==LINE) return 0;

 

printf("<tr><td><font size=2><p align="center">%ld</font></td><td><font size=2><p><A HREF="/cgi/bin/view.cgi?db=%s&num=%s">",(long)nTups/(count+page*10),table ,PQgetvalue(res,num,0));

for (i2=0; i2<re; i2++)

{

if (i2==0)

{

for (i3=0; i3<re; i3++)

{

printf("&nbsp;&nbsp;"); // 들여쓰기 리플레벨까지..

}

printf("[re]");

continue;

}

printf("[re]"); // 리플정도까지 [re]표시..

}

printf("%s</A></font></td>",PQgetvalue(res,num,3));

printf("<td><font size=2><p align=center>&nbsp;<A HREF="mailto:%s">%s</a>&nbsp;</font></td>",PQgetvalue(res,num,2),PQgetvalue(res,num,1));

strncpy(cc,PQgetvalue(res,num,6),10);

printf("<td><font size=2><p align=center>&nbsp;%10s&nbsp;</font></td><td><font size=2><p align=center>&nbsp;%s&nbsp;</font></td></tr>",cc,PQgetvalue(res,num,7));

count++;

return /1;

}

 

static void exit_nicely(PGconn *conn)

{

PQfinish(conn);

qFree();

exit(1);

}

 

int main()

{

PGresult *res;

char temp[200];

int j;

qContentType("text/html");

qDecoder();

table=qValue("db");

search=qValue("s_cont");

sprintf(imsi,search);

if (imsi[0]!=0x00)

{

search_flag=search_flag+1;

}

search=qValue("s_name");

sprintf(imsi,search);

if (imsi[0]!=0x00)

{

search_flag=search_flag+2;

}

search=qValue("s_sub");

sprintf(imsi,search);

if (imsi[0]!=0x00)

{

search_flag=search_flag+4;

}

search=qValue("search");

pghost = NULL;

pgport = NULL;

pgoptions = NULL;

pgtty = NULL;

dbName = DB;

login = "postgres";

pwd = NULL;

 

printf("<!DOCTYPE HTML PUBLIC "///W3C//DTD HTML 4.0//EN">\n");

printf("<html><head><title>번호</title></head><body bgcolor=black text=white link=white vlink=#FFCC33 alink=red>");

 

pc119 = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName, login, pwd);

 

if (PQstatus(pc119) == CONNECTION_BAD)

{

printf("'%s'DB의 접속에 실패했습니다.<br>", DB);

printf("%s", PQerrorMessage(pc119));

exit_nicely(pc119);

}

switch (search_flag)

{

case 0 : sprintf(imsi,"select num from %s",table); break;

case 1 : sprintf(imsi,"select num from %s where content like '%%%s%%'",table,search); break;

case 2 : sprintf(imsi,"select num from %s where name like '%%%s%%'",table,search); break;

case 4 : sprintf(imsi,"select num from %s where subject like '%%%s%%'",table,search); break;

case 3 : sprintf(imsi,"select num from %s where name like '%%%s%%' or content like '%%%s%%'",table,search,search); break;

case 5 : sprintf(imsi,"select num from %s where content like '%%%s%%' or subject like '%%%s%%'",table,search,search); break;

case 6 : sprintf(imsi,"select num from %s where subject like '%%%s%%' or name like '%%%s%%'",table,search,search); break;

case 7 : sprintf(imsi,"select num from %s where content like '%%%s%%' or subject like '%%%s%%' or id like '%%%s%%' or name like '%%%s%%'",table,search,search,search,search); break;

default : sprintf(imsi,"select num from %s",table); break;

}

res = PQexec(pc119, imsi);

 

nTups = PQntuples(res); // 게시물의 숫자

sprintf(temp, "%s", qValue("page"));

if (temp==NULL) page=0;

else page=atoi(temp);

 

switch (search_flag)

{

case 0 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s order by num DESC",table); break;

case 1 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where content like '%%%s%%' order by num DESC",table,search); break;

case 2 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where name like '%%%s%%' order by num DESC",table,search); break;

case 4 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where subject like '%%%s%%' order by num DESC",table,search); break;

case 3 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where name like '%%%s%%' or content like '%%%s%%' order by num DESC",table,search,search); break;

case 5 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where content like '%%%s%%' or subject like '%%%s%%' order by num DESC",table,search,search); break;

case 6 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where subject like '%%%s%%' or name like '%%%s%%' order by num DESC",table,search,search); break;

case 7 : sprintf(imsi,"select num, name, email, subject, renum, re, date, count from %s where content like '%%%s%%' or subject like '%%%s%%' or id like '%%%s%%' or name like '%%%s%%' order by num DESC",table,search,search,search,search); break;

default : sprintf(imsi,"select num from %s",table); break;

}

res = PQexec(pc119, imsi);

printf("<table border=0 cellpadding=0 cellspacing=0><tr><td colspan=2>&nbsp;&nbsp;&nbsp;&nbsp;<img src="/%s.gif"></td></tr><tr><td width=22></td><td><table border=0 cellpadding=3 cellspacing=0><tr><td colspan=5><font size=2><p align=right>",table);

lpage=((nTups/1) / LINE);

for (j=0; j < lpage+1 ; j++) // 페이지 숫자 파악

{

if (page!=j) printf("<A HREF="/cgi/bin/list.cgi?db=%s&page=%d">%d</A>&nbsp;", table, j, (j+1));

else printf("%d&nbsp;", (j+1));

}

printf("</font></td></tr>");

 

printf("<tr><td><font size=2><p align=center>번호</p></font></td>");

printf("<td width=377><p align=center><font size=2>제목</font></p></td>");

printf("<td><font size=2><p align=center>이름</p></font></td>");

printf("<td><font size=2><p align=center>날짜</p></font></td>");

printf("<td><font size=2><p align=center>조회</p></font></td></tr>");

printf("<tr><td colspan=5 bgcolor=#999999 height=1></td></tr>");

 

go(res, page, 0);

 

printf("<tr><td colspan=5>&nbsp;</td></tr></table>");

printf("<table border=0 cellpadding=0 cellspacing=0><tr><td><form method=post action=/cgi/bin/list.cgi?db=%s></td></tr><td width=200></td><td><font size=2><input type=checkbox name=s_name value=name>이름<br>",table);

printf("<input type=checkbox name=s_sub value=subject>제목<br><input type=checkbox name=s_cont value=content cheched>내용</font></td><td width=380>&nbsp;&nbsp;<input type=text name=search size=16 maxlength=16>");

printf("&nbsp;<input type=submit name=Submit value=찾기></td></tr>");

if (page==0) printf("<td colspan=3 align=center><A HREF="/cgi/bin/list.cgi?db=%s"><img src="/before.gif" border=0></A>",table);

else printf("<tr><td colspan=3 align=center><A HREF="/cgi/bin/list.cgi?db=%s&page=%d"><img src="/before.gif" border=0></A>",table, (page/1));

printf("<A HREF="/cgi/bin/preins.cgi?db=%s"><img src="/write.gif" border=0></A>",table);

if (page==lpage) printf("<A HREF="/cgi/bin/list.cgi?db=%s&page=%d"><img src="/next.gif" border=0></A></td></tr>",table, lpage);

else printf("<A HREF="/cgi/bin/list.cgi?db=%s&page=%d"><img src="/next.gif" border=0></A></td></tr>", table, (page+1));

 

printf("</table></td></table></body></html>");

PQfinish(pc119);

qFree();

return 0;

}

 

눈여겨 봐야할부분은 go()밖에 없습니다. //;

게시물 왕창 늘어나면 루프열라게 돌기때문에 느려질지도 모릅니다. //;

행복하세요~

[Top]
No.
제목
작성자
작성일
조회
2400태웅이의 버버벅 코딩 테크닉... #5
이태웅
2001-03-09
3125
2399postgresql 6.5 버젼의 데이터들을 7.0으로 바꾸려면...?
권민기
2001-03-08
3295
2402┕>Re: postgresql 6.5 버젼의 데이터들을 7.0으로 바꾸려면...?
신현호
2001-03-10 01:20:49
3210
2398태웅이의 버버벅 코딩 테크닉 #4
이태웅
2001-03-08
2910
2403┕>Re: 태웅이의 버버벅 코딩 테크닉 #4
신현호
2001-03-10 01:29:31
3363
2410┕>Re: 태웅이의 버버벅 코딩 테크닉 #4
정재익
2001-03-10 23:12:19
3366
2396태웅이의 버버벅 코딩 테크닉#3 (게시판 소스임, 목록보기만..)
이태웅
2001-03-08
4041
2392postgresql jdbc에서 lob 지원 안하나요?
이석용
2001-03-06
3348
2391에러메세지..
권혁찬
2001-03-06
3006
2397┕>Re: 에러메세지.. (맞는 답변인지도 모르겠네요. 장님 코끼리 만지기라.. --)
이태웅
2001-03-08 14:34:58
3390
2390오라클의 connect by 구문과 같은 기능이 없을까요?
이석용
2001-03-05
3197
2407┕>Re: 오라클의 connect by 구문과 같은 기능이 없을까요?
정재익
2001-03-10 22:49:41
3612
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다