웹마스터 팁
최근 게시물을 나타내는 원리와 방법
2000.03.06 22:16
지금 저두 사용하구 있죠.
그리고 메인화면에 있는 공지사항도 따로 프로그램을 만든것이 아니라 게시판에 있는 자료를 불러오는 겁니다.
그럼 이 최근게시물이라는 것이 어떤 원리로 구현되는지 알아보죠.
php로 만든 게시판의 경우 대다수가 DB를 이용해서 데이타가 저장이 됩니다.
그럼 이 DB가 몬지는 아시죠?
MySQL과 같은 DBMS 프로그램을 이용해서 어떤 형식에 의해서 저장되는 거죠.
그럼 감 잡으신분 계시죠?
어떤 형식으로 DB에 데이타가 저장되더라도 우리는 MySQL의 Query를 통해서 원하는 데이타를 가져올수가 있는겁니다.
즉, 게시판이 아닌 방명록으로도 충분히 공지사항을 나타낼수가 있죠.
그럼 DB에서 원하는 자료를 가져오는 순서를 알아봅시다.
1. 당근 MySQL DB서버에 접근을 해야겠죠.
(mysql_connect() 함수로 하면 되죠)
2. 접근한 DB서버에서 원하는 데이타가 있는 자신의 db로 연결을 해야죠/
(mysql_select_db() 함수로 접근하죠)
3. 그 DB중에서 실제로 자료를 담구 있는 테이블에서 최근 게시물을 가져와야겠죠.
( select query와 mysel_query() 함수를 쓰면 됩니다)
쉽죠?
그럼 이 하나하나를 실제로 해봅시다.
파일이름은 new_list.html 로 해봅시다. (new_list.php3로 해도 당근 되죠~~ ^^)
자신의 DB에 대한 정보를 변수로 지정합시다.
그래야 자주 쓰일때 편하죠.
$host_name = "localhost"; // DB서버의 위치입니다.
$user_name = "?????"; // 자신의 계정의 ID를 넣으시면 되요.
$user_password = "*****"; // 자신의 DB의 Password 입니다.
$db_name ="?????"; // 자신이 사용할 DB의 이름입니다.
그러면 msyql_connect()함수를 써서 DB서버에 접근을 해야겠죠.
$connect = mysql_connect($host_name,$user_name,$user_password);
위와 같이 하면 지정된 서버에 접근을 한후 결과값을 $connect에 돌려줍니다.
제대로 접근이 되었다면 1 이라는 값을 리턴하구 아니면 0을 리턴하죠.
그럼 자신의 DB를 선택해야 겠죠?
mysql_select_db($db_name, $connect);
이제 최근게시물을 뽑아오기 위한 준비단계가 끝났습니다.
그럼 이제 query (DB프로그램의 언어라는거 아시죠?)를 이용해서 필요한 데이타를 DB에서 가져옵시다.
$que = "SELECT * FROM board order by date desc limit 5";
위와 같이 하면 되죠.
먼저 select * from board 는 board라는 테이블에서 모든 자료를 선택한다는 거에요.
뒤에 order by date desc 라는 구문이 있죠?
그거는 date 라는 날짜 데이타를 역순(desc)으로 정렬하라는 거죠.
그 뒤에 limit 5 는 5개로 제한하라는 겁니다. 원하는 숫자로 바꾸면 되죠.
그럼 $que 라는 문자열 변수에는 board라는 테이블에서 날짜역순으로 정렬된 5개의 자료를 가져와라는 query가 있는거죠.
그럼 이 query를 MySQL 프로그램에 전달해줘서 실제적으로 일을 시켜야죠.
$result =mysql_query($que,$connect);
mysql_query() query에 명령한대로 자료를 뽑아서 $result 라는 변수에 담아줍니다.
그런데 $result에는 MySQL에서의 데이타 형식으로 자료가 저장되어 있어요.
그럼 우선 몇개의 값이 왔는지를 알아봐야겠죠?
물론 limit 5 라는 query로 5개를 뽑아오라구 해놓고 왜 몇개인지를 알아야 하느냐는 분도 계시겠죠~
총 게시물이 3개만 있으면 당연히 5개의 데이타를 못가져오잖아요...
이 리턴된 자료의 갯수를 알아보는 함수가 mysql_affected_rows() 라는 함수입니다.
$total = mysql_affected_rows();
위와 같이 하면 최근에 select query를 사용해서 가져온 자료의 갯수를 알수 있습니다.
그런데 현재 $result에 저장된 자료는 MySQL의 형식으로 저장이 되어 있습니다.
이 자료를 우리가 직접 사용할수 있게 배열 형식으로 바꾸어야 하죠.
바로 mysql_fetch_array() 라는 함수를 사용하면 됩니다.
$new_bbs =mysql_fetch_array($result );
처음에 $result에는 첫번째 자료에 pointer가 있는 상태입니다.
위와 같이 해주면 첫번째 자료를 $new_bbs라는 변수에 배열로 리턴합니다.
그러고는 $result에서 2번재 자료로 pointer을 옮겨줍니다.
그럼 실제로 사용해보죠.
for($i=1; $i<=$total; $i++)
{
$new_bbs =mysql_fetch_array($result );
$new_bbs[name]=stripslashes($new_bbs[name]);
$new[subject]=stripslashes($new[subject]);
echo "작성자 : $new_bbs[name], 제목 : $new[subject]";
}
자 위에 구문을 보면 $i 라는 루프변수를 사용해서 전체갯수만큼 루프합니다.
그리고 mysql_fetch_array() 함수를 사용해서 $new_bbs 변수에 데이타를 가져오죠.
그러고는 echo " " 를 사용해서 출력을 하는 겁니다.
$new_bbs[name] 은 글쓴이의 이름입니다.
현재 ZeroBoard에는 사용자의 이름을 name 이라는 스키마를 사용했습니다.
다른 php 게시판은 만든이의 맘이니깐 write로 되어 있을수도 있죠.
만약 본문을 출력하고 싶으면 $new_bbs[memo] 라고 하면 되겠죠?
근데 stripslashes() 라는 함수가 몰까요?
MySQL DB에 자료를 저장할대 '(홑따옴표) 와 같은 문자들은 에러를 유발합니다.
그래서 DB에 자료를 저장하기 전에 addslashes() 라는 함수로 에러를 유발하는 문자앞에 를 붙여줍니다.
그러니깐 당근 자료를 가져와서 출력할대는 를 떼어줘야 겠죠?
그때 쓰는 변수가 stripslashes() 입니다.
이상 끝~~~
제가 쓰는 소스를 직접 쓰려다가 열분덜 공부도 하면서 하시라구 감히 설명만 올립니다.
쿠쿠, 위에서 소스부분만 떼다가 사용하셔도 충분히 될거에요~~ ^^
잘 모르시면 묻구 답하기 게시판에 글 적어주세요~~ ^^
댓글 55
-
g
2000.09.17 13:26
g -
상진
2000.10.26 13:41
명쾌한설명...캄사!!!!해여... -
먼소린지멀러
2000.12.28 12:11
먼소리징.....넘어렵뚜아~~ -
김시화
2001.01.08 19:20
음... cgi 는 해결한지 오랜데... php 는 넘 어려운 것 같아요... -_-; -
포도비누
2001.01.08 22:59
-_-;;; -
WoonG
2001.02.10 00:54
MySQL 쿼리에서 date 대신 reg_date로 해야 되는군요 -_- -
WoonG
2001.02.10 00:56
몇시간이나 헤맸습니다 -_-+ -
까투리
2001.02.18 01:14
zero님~ 카테고리 부르는 스키마는 뭐져? -
이원재
2001.02.19 22:01
ll-_-llll -
김유진
2001.02.20 00:42
이해가~~ 퐉! 멋집니다...*^^* -
정연
2001.02.23 21:53
이게 뭔말이여? -
정연
2001.02.23 21:53
어려버 -
김충희
2001.03.01 02:01
cgi 초본데.ㅠ.ㅠ -
박영근
2001.03.05 14:48
이얏!! 잼있네염..;; 끈기는 부분두 있찌만 -
박영근
2001.03.05 14:48
저더 cgi 언어 공부하구 시포요..ㅠ.ㅠ;; -
겨울아이
2001.03.17 10:41
잘보았습니다....^^ 한번해봐야징.. -
이지현
2001.04.03 15:56
내용이 넘 길어.. ㅡ ㅜ -
진이^0^
2001.04.15 23:46
new_list.html 이 파일을 어디로 올립니까?가르쳐주세요 -
이경원
2001.05.03 16:51
후미..--머리 아파라...cgi도 잘 머르는데 cgi부터 해야겠네..- -
ZeZe
2001.05.04 15:48
cgi 가 더 힘들텐데...-.-; -
장태웅
2001.05.05 00:21
명쾌한 강의 였습니다... 가슴이 확..^^; -
Skyblue@
2001.06.21 19:09
일단 부딪쳐 보는거죠....^^a -
김형섭
2001.06.05 16:22
디비자 -
조현갑
2001.06.28 11:47
함해봐야지... -
조현갑
2001.06.28 12:10
되기는 하는데..왜 한번이 더 실행되져? -
신현진
2001.06.28 19:48
잘봤습니다. -
김영관
2001.07.19 21:36
dfgdfgdddd -
김유민
2001.07.20 05:35
머리 뽀사져~ㅡㅡ+ -
바다~♡
2001.08.22 12:03
우하하하....ㅇㅋㅂㄹ -
바다~♡
2001.08.22 12:03
페이지 나누는거 강의좀 해주셨으면.ㅡ,ㅡ 아직까지 페이지 나누는거 이해가 안가여.. -
허남영
2001.08.23 19:44
php 고 perl 이고 다 cgi 죠 cgi 가 어렵다는건 좀.^^ -
황승민
2001.08.30 19:45
조금 어렵네 ㅇㅇ; -
방예은
2001.09.06 14:30
3번 설명에 ( select query와 mysel_query() 함수를 쓰면 됩니다) 라고 하셨는데
mysel_query()가 아니라 mysql_query()입니다 오타나신것 같아요. -
박근형
2001.10.12 00:11
너무 어렵다 -
psycho+.~
2001.10.12 17:31
그러면 msyql_connect()함수를 써서 DB서버에 접근을 해야겠죠.
$connect = mysql_connect($host_name,$user_name,$user_password);
위와 같이 하면 지정된 서버에 접근을 한후 결과값을 $connect에 돌려줍니다.
↑ 이부분에도 오타가 있슴돠.. 찾아보셉~ -
Kheizy-_-V
2001.10.24 17:42
어렵다--; -
양재봉
2001.10.25 06:54
$que = "SELECT * FROM board order by date desc limit 5";
이 부분에서요 order by date desc 날짜의 역순으로 불러오는거 말고
특정테이블을 불러올수는 없는건가요?
그러니깐 음.. 저장될때는 desc=asc&no=1 .2. 3 이렇게 테이블 번호가 붙잖아요
이번호를 이용해서 특정테이블만 불러올수있는 방법좀 가르켜주세요 -
진이
2001.10.28 23:10
성공 했숨다~
감솨함다~~ -
성기윤
2001.11.18 12:15
함수가 모예효? ㅜㅜ -
한창민
2001.12.08 07:43
-_- 난 허접인가봐.. 도저히 무가 무슨 소린지 모르것으니.. -
지니
2001.12.23 17:42
하하하.. 넘 어렵네요.. 왕초보가... 흑흑...
있잖아여....어떻게하는 거죠...
메인에 공지사항을 몇개 뽑아오고 싶은데...
정말 어렵네요... -
케리시냥~★
2002.01.12 16:38
먼소리햐...=ㅅ= -
이영원
2002.01.17 09:59
여기 이 내용만으로 제가 이해하기가 어렵네요...--;; -
송경석
2002.01.28 01:03
저기요 질문이요.. 이거 출력을.. 할려면.. 어떻게 해야 하져..? -
^ㅡ^
2002.02.05 00:30
와와;;; 어렵구나;; -
한건희
2002.04.07 23:09
ㅡㅡ;
뭐가 뭔 소리인지 함수가 뭐지 ;; 더 배워야 하나 ;; -
근배
2003.01.31 06:07
ㅇ ㅏ!!!!! 왠만하면 그냥 가는데 제로님 실수를 두가지나 하셨잖아여!!!! 위에 님이 말한 date_reg...저도 상당히 고민했습니다!! 한 1시간?? ㅡㅡ;; 글구!!!!! for 문에 new[subject] 이거!!! 싸그리 new_bbs[subject] 로...ㅡㅡ;; ㅇ ㅏ...php 는 이것땜에 첨으로 공부좀 했나부네여 ㅡㅡ;; 그래도 공부되서 고마워여 ^^; -
오애선
2003.03.10 00:54
=_= 에공 ... 안쓰고 말아야 하나 -
세죠위그이
2003.04.18 17:26
좋은팁, 감사합니다. ^^ -
젠장
2003.05.05 17:45
무슨 말인지........................;;;;
제목 | 글쓴이 | 날짜 |
---|---|---|
회원관리 프로그램을 구현하고 싶은신 분들께.. [7] | [폐]허접-_- | 2002.03.18 |
PHP 인증 페이지를 만들자! - Lesson 2 수정본 #1 [5] | ☺[폐]허접-_- | 2002.01.24 |
PHP 인증 페이지를 만들자! - Lesson 1 수정본 #2 | ☺[폐]허접-_- | 2002.01.24 |
노프레임/카운터에 관련된 PHP함수 팁 몇가지 [1] | 차카게살자 | 2001.12.28 |
MySQL 루트비번 분실시 대처요령 [29] | zero | 2001.04.18 |
교육용 방명록 #8 [delete.php3파일에서 넘겨받은 비밀번호를 검사하여 글을 삭제합니다.] [18] | zero | 2000.07.03 |
교육용 방명록 #7 [삭제 버튼을 눌렀을 때 비밀번호를 입력받는 부분입니다.] [5] | zero | 2000.07.03 |
교육용 방명록 #6 [수정된 값을 넘겨받아서 비밀번호를 비교하고 변경하여 줍니다.] [2] | zero | 2000.07.03 |
교육용 방명록 #3 [글쓰기 폼에서 넘어온 값을 DB에 입력하기] [5] | zero | 2000.07.03 |
교육용 방명록 #2 [글쓰기 폼 작성] [11] | zero | 2000.07.03 |
교육용 방명록 #1 [전체구성 설정, 테이블 생성, 기본함수 정의] [50] | zero | 2000.07.03 |
최근 게시물을 나타내는 원리와 방법 [55] | zero | 2000.03.06 |
교육용 메모장 #5 [21] | zero | 2000.07.10 |
교육용 메모장 #4 [18] | zero | 2000.07.10 |
교육용 메모장 #3 [16] | zero | 2000.07.10 |
교육용 메모장 #2 [18] | zero | 2000.07.10 |
교육용 메모장 #1 [53] | zero | 2000.07.10 |
윈2000, NT 또는 98에서 APM설치하기 [74] | zero | 2000.08.26 |
MySQL DB 데이타 백업/복구 하는 방법 [38] | zero | 2000.08.26 |
자동링크 만드는 방법!!! [28] | zero | 2000.03.06 |