Posted on : 2003-11-02 | By : SON BYOUNGMOK | In : PHP 게시판 만들기 2
0
드디어 답변형 게시판 마지막 강좌입니다.
* 소스 파일은 자료실에 등록되어 있습니다.
reply_ok.php에서는 72행부터 105행까지가 핵심입니다.



※ 이 부분을 완전히 이해하려면 답변형 게시판의 원리(TYPE2) 강좌와 함께 보시기 바랍니다.
아래 표기된 원문자는 게시판의 원리 강좌(TYPE2)에서 해당되는 단계를 나타냅니다.
참고로 원리 강좌에서 답변 글이 등록되는 과정을 다음과 같이 설명드렸습니다.

① number는 자동 증가합니다.
② 원 글의 replyst의 값을 구합니다.
③ 원 글의 깊이를 구합니다. 여기서 깊이라는 것은 처음 나오는 ‘A’의 위치입니다. 위치는 0부터 시작합니다. 따라서 ‘AAAAA’의 깊이는 0, ‘BBAAA’의 깊이는 2가 됩니다.(처음 나오는 A의 위치가 세 번째이지만 0부터 시작하므로 2가 됩니다.)
④ replyno(진짜 원 글의 번호)를 구합니다.
⑤ replyno가 같고 ‘깊이+1’번째 문자를 제외한 나머지 문자가 일치하는 글 중에서 가장 큰 reply값을 가진 글의 number를 구합니다.
⑥ ⑤에서 구한 number의 replyst 값에서, 깊이+1번째 문자를 구합니다.
⑦ ⑥에서 구한 위치의 다음 문자를 구합니다.
⑧ replyst 값에 깊이+1번째 문자를 ⑦에서 구한 문자로 바꿉니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

위 단계를 참고하시면서 아래 내용을 보시면 됩니다.
결코 쉽지만은 않은 부분입니다.
휴~ 답변형 게시판 강좌를 끝내고 나니 이렇게 후련할 수가…
이상, 동주아빠 손병목이었습니다.

Posted on : 2003-11-02 | By : SON BYOUNGMOK | In : PHP 게시판 만들기 2
0
이번 주가 매우 바쁠 것 같아, 오늘 답변형 게시판 강좌를 모두 마무리하겠습니다.

reply.php 파일은, 소스를 차근차근 보면 아시겠지만, 특별한 설명이 필요없을 겁니다.
14~36행은 원 글의 내용을 불러와서 보여주기 위한 것입니다.
88행에서는 replyno 값을 hidden으로 처리하여 reply_ok.php 파일로 넘기기 위한 것입니다.
* 소스 파일은 자료실에 등록되어 있습니다.





Posted on : 2003-11-02 | By : SON BYOUNGMOK | In : PHP 게시판 만들기 2
0
자료실에 등록한 관련 파일을 열어놓고 보시기 바랍니다.
기존 파일에서 어느 부분이 수정되었는지 쉽게 아실 수 있습니다.
- view.php 파일 수정하기
아래와 같이 두 부분만 수정하면 됩니다.
먼저, 상단 23행쯤에 보면,
$replyno = $array[replyno];
그리고, 하단에 [답변] 버튼을 달아야 하니까, 148행쯤에 다음과 같은 라인이 있을 것입니다.
Posted on : 2003-10-30 | By : SON BYOUNGMOK | In : PHP 게시판 만들기 2
0
어제 부득이한 술 자리가 있어 약속한 때에 업데이트를 하지 못했습니다.(죄송합니다. ^^)
참, 그리고 업데이트 계획을 좀 수정해야겠습니다. 처음 생각했던 것 보다 설명드릴 내용이 좀 더 많아질 것 같네요.
오늘도 원래는 답변 폼까지 모두 만들어야 하는데, 안 될 것 같습니다.
본격적으로 답변 기능을 부여하기 전에, 기존 테이블을 수정하고 기본 값을 입력하는 과정을 우선 하겠습니다.
이미 앞에서 말씀드렸다시피, 답변형 게시판의 원리는 2가지 타입이 있다고 설명드렸는데요, 우리는 TYPE 2의 답변형 게시판을 구현할 예정입니다.
답변형 게시판을 위해서 기존 파일 중에서 view.php와 list.php, insert.php 파일을 수정하고,
reply.php와 reply_ok.php를 새로 만들 것입니다.

그 전에 DB 테이블도 일부 수정해야 됩니다.
비교적 간단합니다.
두 개의 필드만 추가해 주면 됩니다.
원 글의 글 번호가 저장될 replyno 와 답변 글의 깊이와 정렬 순서를 담을 replyst 필드, 두 개만 추가하면 됩니다.

그런데 위와 같이 두 개의 필드를 추가했는데, 이 필드에 기본 값을 넣어야 합니다.
replyno는 원 글의 번호가 들어가야 하는 곳이니, 현재로서는 글 번호(number)가 곧 원 글의 번호가 되겠죠…
(아직까지는 답변 글이 하나도 없으니까요)
그래서 replyno의 값은 모두 number 값으로 넣어 주고요,
replyst는 모두 ‘AAAAA’를 넣어 줍니다. 이것 역시 답변 글이 아니므로 ‘AAAAA’를 입력하는 것입니다.
무슨 말인지 헷갈리시는 분은, 앞의 강좌를 다시 한번 보시기 바랍니다.
그럼 어떻게 일괄적으로 replyno와 replyst 값을 입력할 수 있을까요?
MySQL을 실행해서 SQL 문을 사용하여 직접 수정을 합니다.
여러가지 방법이 있겠습니다만, phpMyAdmin 을 사용하여 수정해 보겠습니다.

- phpMyAdmin을 실행해서 [SQL] 메뉴를 누르고,
- 쿼리 입력란에
update bbs set replyno=number;
를 입력합니다.
- 그리고 [실행] 버튼을 클릭합니다.
같은 방법으로
update bbs set replyst=’AAAAA’;
명령을 실행합니다.
정상적으로 실행했으면 [SQL] 메뉴 옆에 있는 [보기] 메뉴를 눌러 replyno와 replyst 필드에 정상적으로 값이 입력되었는지 확인합니다.
잘 되었나요?
이상, 동주아빠 손병목이었습니다.

Posted on : 2003-10-23 | By : SON BYOUNGMOK | In : PHP 게시판 만들기 2
0
오늘 내용은 결코 쉽지가 않습니다.
처음부터 차례차례 정말 주의 깊게 보지 않으면 잘 이해가 안 되실 겁니다.
차근차근 보세요. 앞의 내용이 이해안되면 뒤로 갈수록 더 이해가 안됩니다.
지난 번에 설명드린 답변형 게시판 TYPE1에서는 기존 게시판 테이블을 기준으로 세 개의 필드(list_number, depth, parent)가 더 필요했습니다.
게다가 list_number 필드는 실제 글이 작성되거나 삭제될 때마다 기존의 list_number를 모두 바꿔줘야 합니다. (이해가 안 되시면 TYPE1 강좌를 다시 보시기 바랍니다.)
오늘 설명드리는 TYPE2는 두 개의 필드만 더 있으면 됩니다.
그리고 정렬된 목록을 보여주기 위한 글 번호인 list_number가 필요 없습니다.
원 글의 번호를 저장하는 replyno 필드와 답변 글의 깊이와 순서를 동시에 나타내기 위한 replyst 필드가 필요합니다. 물론 number 필드에는 자동으로 고유한 번호가 매겨지게 되어 있구요.
답변 글을 등록하고 목록을 정렬하는 순서는 다음과 같습니다.
이해가 안 되시면 그냥 넘어가도 됩니다.
단, 이해는 안 되어도 반드시 기억은 하고 있어야 합니다.
그래야 아래 규칙에 맞게 코딩을 할테니까요.

1. 원 글을 쓸 경우…. 즉 답변 글이 아닐 경우
① number는 자동 증가합니다. (이건 당연한 거구요)
② replyno에는 number와 같은 값이 저장됩니다.
③ replyst에는 ‘AAAAA’가 저장됩니다.
2. 답변 글을 쓸 경우
① number는 자동 증가합니다.
② 원 글의 replyst의 값을 구합니다.
③ 원 글의 깊이를 구합니다. 여기서 깊이라는 것은 처음 나오는 ‘A’의 위치입니다. 위치는 0부터 시작합니다. 따라서 ‘AAAAA’의 깊이는 0, ‘BBAAA’의 깊이는 2가 됩니다.(처음 나오는 A의 위치가 세 번째이지만 0부터 시작하므로 2가 됩니다.)
④ replyno(진짜 원 글의 번호)를 구합니다.
※ [주의!!!] 만약 답변 글(ⓐ)의 답변 글(ⓑ)일 경우에는 ⓐ의 number 값이 아닌 ⓐ의 replyno 값(즉, ⓐ의 원래 글)이 됩니다.
⑤ replyno가 같고 ‘깊이+1’번째 문자를 제외한 나머지 문자가 일치하는 글 중에서 가장 큰 reply값을 가진 글의 number를 구합니다.
⑥ ⑤에서 구한 number의 replyst 값에서, 깊이+1번째 문자를 구합니다.
⑦ ⑥에서 구한 위치의 다음 문자를 구합니다.
⑧ replyst 값에 깊이+1번째 문자를 ⑦에서 구한 문자로 바꿉니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
처음 봐서는 도저히 이해가 안 될 겁니다.
일단 위와 같은 규칙을 적용한다고 하고, 아래 내용을 봐 주세요.

- 첫 번째 글을 등록할 경우

① number는 자동 증가하므로 1이 됩니다.
② 답변 글이 아니므로 replyno의 값은 number와 같은 1이 됩니다.
③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.
- 두 번째 글을 등록할 경우

① number는 자동 증가하므로 2가 됩니다.
② 답변 글이 아니므로 replyno의 값은 number와 같은 2가 됩니다.
③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.
- 두 번째 글의 답변 글을 등록할 경우

① number는 자동 증가하므로 3이 됩니다.
② 원 글(number=2)의 replyst의 값은 ‘AAAAA’입니다.
③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다. (0부터 시작합니다.)
④ replyno(원 글의 번호)는 2가 됩니다.
⑤ replyno=2이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=2입니다.
⑥ number=2의 replyst 값이 ‘AAAAA’인데, 깊이+1(=1)번째 문자가 ‘A’입니다.
⑦ ‘A’ 다음의 문자는 ‘B’입니다.
⑧ replyst 값은 ‘BAAAA’입니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
- 세 번째 글을 등록할 경우

① number는 자동 증가하므로 4가 됩니다.
② 답변 글이 아니므로 replyno의 값은 number와 같은 4가 됩니다.
③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.
- 첫 번째 글(number=1)의 답변 글을 등록할 경우

① number는 자동 증가하므로 5가 됩니다.
② 원 글(number=1)의 replyst의 값은 ‘AAAAA’입니다.
③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다. (0부터 시작합니다.)
④ replyno(원 글의 번호)는 1이 됩니다.
⑤ replyno=1이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(역시 하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=1입니다.
⑥ number=1의 replyst 값이 ‘AAAAA’인데, 깊이+1(=1)번째 문자가 ‘A’입니다.
⑦ ‘A’ 다음의 문자는 ‘B’입니다.
⑧ replyst 값은 ‘BAAAA’입니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
- 두 번째 글의 답변 글(number=3)의 답변 글을 등록할 경우

① number는 자동 증가하므로 6이 됩니다.
② 원 글(number=3)의 replyst의 값은 ‘BAAAA’입니다.
③ 원 글의 깊이(처음 나오는 ‘A’)는 1입니다. (0부터 시작합니다.)
④ replyno(진짜 원 글의 번호)는 2가 됩니다.
※ [주의!!!] 답변형 게시판 Type1과 다릅니다.
여기서 원 글은 number=3이 아닙니다. 비록 number=3의 답변글이기는 하지만, number=3의 글이 number=2의 글의 답변글이므로, number=3의 원 글인 number=2로 해야 합니다.
②와 ④에서의 원 글의 의미는 다릅니다. 그래서 다음부터 replyno를 ‘진짜 원 글’(^^)이라고 하겠습니다. 주의!!!!
⑤ replyno=2이고 깊이+1(=2)번째 문자를 제외한 나머지 문자(B_AAA)가 일치하는 글(nuber=3 하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=3입니다.
⑥ number=3의 replyst 값이 ‘BAAAA’인데, 깊이+1(=2)번째 문자가 ‘A’입니다.
⑦ ‘A’ 다음의 문자는 ‘B’입니다.
⑧ replyst 값은 ‘BBAAA’입니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
- 두 번째 글의 답변 글의 답변 글(number=6)의 답변 글을 등록할 경우

① number는 자동 증가하므로 8이 됩니다.
② 원 글(number=6)의 replyst의 값은 ‘BBAAA’입니다.
③ 원 글의 깊이(처음 나오는 ‘A’)는 2입니다. (0부터 시작합니다.)
④ replyno(진짜 원 글의 번호)는 2가 됩니다.
⑤ replyno=2이고 깊이+1(=3)번째 문자를 제외한 나머지 문자(AA_AA)가 일치하는 글(2,3,6) 중에서 가장 큰 reply값을 가진 글은 number=6입니다.
⑥ number=6의 replyst 값이 ‘BBAAA’인데, 깊이+1(=3)번째 문자가 ‘A’입니다.
⑦ ‘A’ 다음의 문자는 ‘B’입니다.
⑧ replyst 값은 ‘BBBAA’입니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
- 다시 두 번째 글(number=2)의 답변 글을 등록할 경우

① number는 자동 증가하므로 9가 됩니다.
② 원 글(number=2)의 replyst의 값은 ‘AAAAA’입니다.
③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다.
④ replyno(진짜 원 글의 번호)도 2가 됩니다.
⑤ replyno=2이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(2,3) 중에서 가장 큰 reply값을 가진 글은 number=3입니다.
⑥ number=3의 replyst 값이 ‘BAAAA’인데, 깊이+1(=1)번째 문자가 ‘B’입니다.
⑦ ‘B’ 다음의 문자는 ‘C’입니다.
⑧ replyst 값은 ‘CAAAA’입니다.
⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.
어렵죠…
이 부분은 몇 번이고 반복하면서 봐야 됩니다.
우리가 앞에서 실습한 게시판을 답변형 게시판으로 바꾸려면 이 방법(TYPE 2)을 사용해야 합니다.
그러니 더더욱 꼭~ 이해를 해주시기 바랍니다.
정말 정말 오랜만에, 동주아빠 손병목이었습니다.
