주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

엠보드 만들기 (3)

맹이 | 2002.10.10 01:18:28 댓글: 4 조회: 1424 추천: 12
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758776
안녕하세요... 다시 찾아뵙게 되서 진짜 기쁘네요.. ^^
이젠 날씨가 마니 추워졌네요...... 이럴때는 나무잎이 잔뜩 떨어진
산길을 혼자 걷고 싶습니다...  누구도 없는 곳을 찾아서 혼자서
외로움을 즐기고 싶습니다...

요즘은 일이 진짜 꼬이네요.. ㅡㅡ;
진짜 확 벗어나고 싶은게 내 맘임니다...
그럴수가 없는것이 또 현실이구요... ㅡㅡ;
휴~~~ ㅠ.ㅠ

아싸~~~ 잡담은 이젠 그만하고 강좌를 시작합시다....
힘내자 힘~~!!! 이럴때일수록~~ ㅎㅎㅎ

그럼 오늘은 머할까요?
우리가 전번강까지 함께 계시판에 글 올리기를 했찌요?
그럼 오늘에는 올라간 글을 어케 출력하는냐.... 즉 list.asp를 만들어봅시다.
오늘은 그냥 입력한 내용을 한페이지에 쫘~악 출력을 해보겠습니다.
그럼 시작함니다... ^^

아래는 list.asp 의 소스입니다.


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58


<%option explicit%>
<!-- #include file="dbcon.asp" -->
<%
dim rs,sql

sql="select int_id,"
sql=sql & "strname,"
sql=sql & "stremail,"
sql=sql & "strsubject,"
sql=sql & "int_hit,"
sql=sql & "sdt_date "
sql=sql & "from board "
sql=sql & "order by int_id desc"

set rs=server.createobject("adodb.recordset")
rs.open sql,db
%>
<html>
<head>
<title>리스트</title>
</head>
<body>
<center>
<h2>리스트</h2>
<table width=630 border=1>
<tr align=center>
<td width=50>작성자</td>
<td width=450>제목</td>
<td width=80>등록일자</td>
<td width=50>조회</td>
</tr>
<% if rs.bof or rs.eof then %>
<tr align=center colspan=4>
등록된 글이 없습니다.
</tr>
<%
   else
     do until rs.eof
%>
<tr align=center>
<td width=50><a href="mailto:<%=rs(2)%>"><%=rs(1)%></a></td>
<td width=450><a href="content.asp?id=<%=rs(0)%>"><%=rs(3)%></a></td>
<td width=80><%=rs(5)%></td>
<td width=20><%=rs(4)%></td>
</tr>
<%   rs.movenext
     loop
   end if
   rs.close
   set rs=nothing
   db.close
   set db=nothing
%>
</table>
<a href="regist.asp">글쓰기</a>
</center>
</body>
</html>




여러분들 인터넷에서 계시판을 마니 보셨져? 첨에 접속하면
제목을 나렬해서 보고 싶은 제목을 클릭해서 그에 내용을 보는 이런 형식이 많져?
우리 그렇게 한번 해보겠습니다...
그럴려면 무엇을 출력해야 할지 생각해봅시다....
우선 제목을 출력한다. 이건 당연한 일이구요... 그리고 작성자와 날자. 그담은 조회수.
이렇게 출력을 하는것입니다... 많은 계시판에서는 번호,제목,작성자,날자,조회수.  
이렇게 출력을 하는데 우리는 초보인만큼 우리가 하기 쉽게 하겠습니다... 그래서 번호출력은
삭제를 하고 제목,작성자,날자,조회수만 출력을 해보겠습니다.

자~  이제 소스분석으로 들어감니다... ^^
전번 강에서 <%option explicit%> 하고 은
머 하는 늠인지 알았어져?생각이 안난다면 엠보드 만들기 (2-2) 을
다시 한번 쭈~욱 훌터보고 오세요.  그럼 인차 생각이 날껌다...

6번째줄부터 13번째 줄까지는 SQL 문자열을 만드는 부분인데요.. 눈에 익져? ㅎㅎㅎ
하지만 전번강에꺼 하고 쬐끔은 틀림니다... 전번강에 SQL 문자열은 정보를 디비에
입력하는 작용을 하는 문자열이지만 이번에 문자열은 디비에서 이미 입력된 정보를
꺼내는 문자열임니다... SQL문법을 한번 봅시다...
select 칼럼1,칼럼2, ... ,칼럼n from 테이블이름 where 조건
뻘건 글씨는 고정된 문자이고 퍼런 끌씨에는 자기 정황에 맞게 쓰는 것임니다...
그리고 where 조건 는 정황에 따라서 써주면 되는것임니다.
우리의 경우일때는 select int_id,strname,stremail,strsubject,int_hit,sdt_date from mboard
이 문구의 이미는 우리가 테이클 mboard에서 글번호,작성자이름,멜,제목,조회수,날자를 글번호의 역순으로 가져온다.
입니다.
그러니깐 6-13줄까지는 이 문자열을 만들어주는 부분이 되겠습니다.

여기서 문자열이 맞는가 틀리는가 검사해보는 방도를 하나 알려드리겠습니다...
이렇게 13줄까지 다 쓰고 그 아래에다가
response.write sql
response.end

이렇게 두줄을 치고 실행을 하는것입니다...
그러면 브라우저에 sql문자열이 나오는 것입니다....
이것을 설명한다면 response.write 라는 어구는 변수에 저장되여 있는
내용을 출력하는 어구 인데 우리가 이제 지겹도록 접촉하게 될껏임니다.. 때로는 간략으로 <%= %>
쓸때도 있습니다. 위의 소스에서도 많이 볼수가 있은것입니다.
그리고 response.end 는 소스가 여기까지만 실행하고 아래로 실행하지 말라! 이말임니다...
그러니깐 소소가 실행을 해서 내려오다가 이 넘을 만나면 종료를 하는것임니다...
그래서 이렇게 두줄을 쓰면 소스가 sql문구를 출력하고 종료를 하는것입니다...
이러면 우리가 브라우저에서 우리가 만든 sql문구가 맞는지 틀리는지를 검사할수 있는것임니다...
이 방법이 제 아주 마니 쓰는 방법임니다... 강추~~ ㅋㅋㅋ

여기까지 우리가 문자열을 만들었슴니다... 이제는 이 sql문구를 실행해야겠쪄? 그럼 이건 어케 실행하냐~
하면~ 먼저 recordset(레코드셋) 라는 객채를 만들어야 하는 것입니다. 이넘은 ADO 라는
넘의 하나의 객체인데. 멀 하는냐믄 디비에서 꺼내온 데이터들을 이 객체에 임시 저장을 해두는것입니다.
이렇게 저장을 해두었따가 아래에서 하나하나 지정한 위치에서 꺼내 쓰는 것이져...
그럼 ADO 라는 넘은 무엇하는 넘이냐하면 asp의 경우를 말할때 소스와 디비사이에서
asp를 도와서 디비의 데이터를 다루는 아주 중요한 작용을 하는 놈임니다...
이렇게 쬐끔 복잡한 넘을 간단하게 설명을 드렷는데 임시는 이렇게 이해를 해두시고 이후에 심도가 깊어지면
ADO 의 전문서적을 사서 보시는것이 조을뜻 싶슴니다...
그럼 이 객체를 만들어 봅시다...
dim rs
set rs=server.createobject("adodb.recordset")

이렇게 만들면 되는것임니다.asp에 server 라는 내장객체가 있는데 이 놈의 createobject라는
메소드(방법)을 이용해서 레코드셋객채을 만드는것임니다.
그러니깐 좀 상세하게 설명을 드리면 레코드셋이 가져온 데이터를 우리가 만든 rs변수에 저장해둔다 이말이 되는 것임니다.
이렇게 설명을 하면 이해가 될찌 모르겠네요.. ㅡㅡa

그럼 우리가 이미 레코드셋객채를 만들었으니깐 이제는 이것으로 데이터를 가져와야겠쬬? 흠흠...
그럴려면 이제 rs.open sql,db 이렇게 쓰는것임니다.  이 어구를 설명하면:
레코드셋의 open 메소드(방법) 을 통해서 디비에서 데이터를 가져옴니다. 그런데 데이터를 가져올려면
조건이 있어야죠.. 아무런 조건이 없으면 멀 어떤걸 가져오란지 모르 자나요... 그래서 위에서 우리가 작성한 sql문구를 쓰는것임니다. 그리고 조건하나 더 있는데 이것이 바라 우리가 dbcon.asp에서 만든 connection객채인 db임니다. 그러니깐 정리를 하면
레코드셋객채가 컨넥션객채에서 sql문구에 맞는 데이터를 open메소드을 통해서 가져온다.
이런 말이 되는군요...어떻습니까? 이해가 가는지요? 좀 이해하기가 바쁜 부분이기는 합니다. 지금 당장은 아니여도 후에 asp를 마니 접촉하면 이해가 갈껏이니 걱정하지 마세요.. ^^

쉽지가 않았지만 이렇게 우리가 디비에서 데이터를 가져왔습니다...
이젠 가져온 데이터를 맞는 부분에다 맞게 배열을 하면 되는검니다.

이렇게 데이터가져오기는 끝을 맷고 이젠 html이 등장할 차례임니다.
html을 잘 모르시는 분들은 조~~~기메 노아의 html강좌를 참고하시길 바랍니다...
여기선 설명을 간략하겠습니다...

if rs.bof or rs.eof then
이구절을 봅시다. 여기에 두가지가 있는데 하나는 조건어구 임니다. 아주 중요한 내용이구요.
이후에 아주 많이 쓰이게 되는데요. 기초이기두 하는 어구입니다.
문법을 한번 살펴봅시다.

if 조건 then
    실행할 문구1
else
    실행할 문구2
end if


여기서 if 는 "만약" 이라는 뜻으로서 만약 조건을 만족시킨다면 실행할 문구1을 실행함니다. 만약
조건을 만족시키지 못한다면 실행할 문구2를 실행하는것임니다. 그리고 end if 로 이 조건어구를
끝맞히는거죠. 그리고 여기에 연산자 or 가 등장을 하는데 그 뜻처럼 "이거나" 의 뜻으로서 조건이
두개씩 붙을때 쓰는것임니다.or를 쓰면 조건둘중에서 하나만 만족시키면 실행할 문구1을 실행하고
둘중에서 하나도 만족시키지 못한다면 실행할 문구2를 실행하게 됩니다.

그럼 위의 문구에서 rs.bof하고 rs.eof 는 무엇이나면요.
위에 우리가 가져온 데이터의 시작과 끝을 표시하는것임니다. bofbegin of file의 약자로서
파일의 시작이라는 뜻을 가지고 있습니다. eof 도 마찬가지로 end if file 의 약자이며 파일의
끝이라는 의미를 가지고 있습니다.

그럼 가져온 데이터가 어떤 형식으로 되여있는가를 알아봅시다.

                     ----------------
                    |         rs.bof      |
                     ----------------
     (커서)==> |         기록1       |
                     ----------------
                    |         기록2       |
                     ----------------
                    |         기록3       |
                     ----------------
                    |         기록4       |
                     ----------------
                    |         rs.eof      |
                     ----------------

이것이 바로 우리가 가져온 데이터를 그림으로 표시한것임니다. 잴 위에가 시작이고 잴 아래가 끝을 표시하고
커서가 기록1을 짚고 있습니다.

잠깐: 여기서 커서(cursor)에 대해 간단히 설명을 하겠습니다.
cursor 라는 단어를 자전에서 찾아보면 눈금자의 움직이는 부분이라고 나와있습니다.그리고 컴푸터에서 위치를 표시
하느 도구라고 적혀져있습니다. 간단하게 화살표로 생각해도 무방하겠습니다. 우리가 데이터를 출력할때 화살표가 어느
기록을 짚고 있으면 어느 기록을 출력하는것임니다.

그럼 기록1을 출력한담에 기록2를 출력할려면 어케 하냐? rs.movenext 을 사용하면 되는 것입니다.
그러면 커서가 아래로 하나 이동해서 기록2를 짚고 있을껏입니다. 그렇게되면 기록2를 출력할수가 있는것임니다.
이렇게 내려가서 데이터의 끝 즉 rs.eof를 짚었을땐 에러가 발생합니다. 당연한 일이죠. 여기에는 기록이 없으니깐
출력할수가 없죠.그래서 위의 조건어구에서 rs.eof 일때 조건어구를 끝낸다 이렇게 만드는것이죠. 그럼 커서가
데이터의 끝을 짚었을때 조건어구에서 빠져나오죠.

그럼 기록이 없을때는 어떤 정황일까요? 그림을 봅시다.

                    -----------------
      (커서)==>|     rs.bof/rs.eof  |
                    -----------------

기록이 없을 경우에는 이렇게 rs.bof와rs.eof가 같은 위치에 자리잡고 있는것임니다. 그래서 조건어구에서
조건을 rs.bof or rs.eof 로 하죠. 그러면 데이터가 없을경우 데이터가 없다라는 글을 출력해서 애러를
방지함니다.

다음으로 넘어갑시다.
이번에는 do until rs.eof 를 알아봅시다.이구절은 순환문 혹은 루프문이라고 하는데 같은 구절을
여러번 반복할때 사용하는 문구입니다.

do until 조건
실행할 문구
loop


해석을 하면 조건을 만족시킬때까지 실행할 문구를 반복적으로 실행한다. 이말임니다.우리의 경우에는 이렇게 상용하는
것입니다.

dountil rs.eof
...
실행할 문구
...
rs.movenext
loop


즉 커서가 rs.eof를 짚을때까지 실행할 문구를 실행한다. 그중에 매번 순환마다 커서는 하나씩 아래로 내려간다.
그러니깐 매번 순환에 rs.movenext를 한번씩 실행하는것입니다. 그래서 커서를 하나씩 아래로 이동을 시킴니다.
그래서 커서가 rs.eof를 짚으면 순환구에서 빠져나오게 함니다.

그런데 우리가 데이터를 가져올때 한개 기록안에 여러개 내용이 들어있쪄? 이름,멜,제목 등등이 들어있습니다.
이런것을 어떻게 구분을 해서 지정한 위치에 출력을 하느냐?
이문제를 해결하려고 rs(0) 이런형식의 단어가 나옴니다. rs(0)은  한개 기록에서 첫번째내용을
말하는데요 단 주의할쩜은 기록을 구분할때 0부터 시작을 한다는것임니다. 컴터를 하다보면 이런 문제가 많습니다.
시작을 하는데 1부터 시작을 하는것이 아니라 0부터 시작하는 경우가 많습니다. 여기서도 0부터 시작을 하는것입니다.
그런데 어느것이 첨이고 어느것이 마지막인지는 어떻게 아는냐? 이것은 우리가 sql문구를 작성함에 따르는데 위에서 우리는
sql문구를 이렇게 썼습니다.
select int_id,strname,stremail,strsubject,int_hit,sdt_date from mboard
그러면
rs(0) <=== int_id     (글의 번호)
rs(1) <=== strname    (작성자)
rs(2) <=== stremail   (작성자의 멜)
rs(3) <=== strsubject (제목)
rs(4) <=== int_hit    (조회수)
rs(5) <=== sdt_date   (작성날자)


이렇게 되는 것입니다. 그런데 여기 문제가 하나 있습니다. 이렇게 수자로 표시하면 가독성이 약해지죠? rs(3)이가 도대채
무엇을 가리키는지...  위에 sql문구를 봐야 알수가 있습니다. 그래서 아래처럼 쓸수도 있는것임니다.

rs("int_id")         <=== int_id     (글의 번호)
rs("strname")     <=== strname    (작성자)
rs("stremail")      <=== stremail   (작성자의 멜)
rs("strsubject")   <=== strsubject (제목)
rs("int_hit")         <=== int_hit    (조회수)
rs("sdt_date")     <=== sdt_date   (작성날자)


이렇게 쓰면 sql문구를 보지 않고 어느것을 표시하는지 쉽게 알수가 있는것임니다. 하지만 제가 많이 사용하는것은 위의 방도임니다.
개인습관이라고 할까? 하여가 제가 쓰긴에 위의 방도를 쓰면 에러가 적게 나고 편리하고 성능도 좋아진다고 생각을 하는것임니다.
열분은 각자의 생각대로 어느방도가 쉽게 생각되면 어느 방도를 택해서 사용하시길바람니다.

이렇게해서 순환문(do until)안에 다가 html을 작성하고 html안에 <%=rs("strname")%>이런형식을 써서 지정한 내용을
지정한 곳에 출력을 시키는것임니다. <%= %> 는 무엇을 의미하는지 아시죠? 위에서 설명을 드렸습니다.


이렇게 출력을 마치고 하나를 잊지 마세요... 아직도 남은일이 하나 있습니다. 우리가 위에서 레코드셋객체(rs)와 컨넥션객체(db) 열어 놓았져? 문을 열었으면 닫아야 하듯이 이런 객체도 열어놨으니깐 닫아주어야 하는것입니다. 닫은후에 우리가 만든 객채를 없애버림니다. 그러면 컴터이 메모리에서 우리가 가져온데이터를 완전히 없애버리게 되여있습니다. 이것을 실행하는 어구가 바로
rs.close
set rs=nothing
db.close
set db=nothing

인것입니다. 우리가 open메소드를 이용해서 객채를 열었죠? 요번에는 close메소드를 이용해서 객채를 닫아줌니다. 그러고 객채를 메모리않에서 제거함니다.

이만하면 list.asp는 작성이 다 되였습니다.

이렇게 오늘 강좌는 마무리를 졌습니다. 오늘의 내용은 앞에 비교을 해서 좀 어렵다고 생각이 되네요.
하지만 너무 바쁘다고 생각은 하지 마세요. 해보지도 않고 아예 난 못해 하고 뒷걸음을 치면 안되죠.. ^^
그러면 아무것도 못함니다. 무엇이나 첨이 잴 바쁜것임니다. 그 고비를 넘으면 쉬워지계 되여있는것임니다.
흥취를 배양하고 열씨미하면 무엇이나 무서울것이 없습니다.
흠..... 우리같이 열쒸미 합시다... ^^
그럼 전 이만 ...
여러번 빠빠이~~~

ps: 저의 강좌를 보시고 의문이 되는 부분이 있으면 maengyi@hotmail.com 으로 멜 주시길 바람니다.









* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (12) 선물 (0명)
IP: ♡.27.♡.96
슈퍼맨 (♡.109.♡.218) - 2002/10/11 10:27:38

열심히쓴글 잘보구 갑니다.
열심히배우는학생이될랍니다.
허락없이님의멜주소를 저의메신저에 추가햇는데...

쪼각달 (♡.133.♡.176) - 2002/10/19 10:53:36

좀 빨랑 써주셨으면 합니다.
배우는 사람들은 목마른 사람이 우물파듯 합니다.
맹이님께서 좋은 강의 해주셔 감사합니다.
다음 또 기대할게요.

쪼각달 (♡.133.♡.176) - 2002/10/19 10:58:44

될수 있으면 asp는 이런이런 걸 원합니다. 1,2...이런 순서로 강의해줬으면 하는 바램입니다.지금 다음을 기다리고 있는 중인데...다음두 궁금하구...근데 regist_ok.asp까지 아니 ,list.asp두 다 작성했는데...
글이 등록되지 않아서 ...안타깝네요...

맹이 (♡.27.♡.96) - 2002/10/19 19:40:04

먼저 디비를 열어보시고 글이 등록&#46124;는가 확인해보세요....
그래서 글이 등록되였으면 list.asp에 문제가 생긴것이구요...등록이 안되였으면 regist_ok.asp에 문제가 생겼을껏임니다....

다시 확인해보시고 연락하시기 바람니다...

3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
12013
관리자
2003-09-20
11562
관리자
2003-09-20
20721
지구인
2010-08-27
19496
지구인
2009-09-07
13811
SOLIDH
2010-01-29
15775
엔죠라이프
2004-10-07
16858
맹이
2002-10-14
1053
맹이
2002-10-14
746
맹이
2002-10-14
1061
네로
2002-10-11
668
맹이
2002-10-10
1424
0_fist
2002-10-09
650
허인배
2002-09-29
1999
네로
2002-09-24
1624
네로
2002-09-23
919
네로
2002-09-23
1270
네로
2002-09-23
856
네로
2002-09-17
1318
네로
2002-09-14
1525
허인배
2002-09-10
385
허인배
2002-09-10
427
허인배
2002-09-10
854
허인배
2002-09-10
716
허인배
2002-09-10
564
허인배
2002-09-10
418
허인배
2002-09-10
705
허인배
2002-09-08
1161
모이자 모바일