홈>컴퓨터이야기
logo_01.gif


TOTAL ARTICLE : 91, TOTAL PAGE : 1 / 5
구분 웹일반 | 태그-소스 | 제로보드 | 그누보드 |
제로보드 : 최근 게시물을 나타내는 원리와 방법
 오예    | 2006·05·27 16:54 | HIT : 1,804 | VOTE : 77
php로 만들어진 게시판 CGI인 경우 최근게시물과 같은 효과적인 출력물을 얻을수가 있습니다.

지금 저두 사용하구 있죠.

그리고 메인화면에 있는 공지사항도 따로 프로그램을 만든것이 아니라 게시판에 있는 자료를 불러오는 겁니다.

그럼 이 최근게시물이라는 것이 어떤 원리로 구현되는지 알아보죠.

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() 입니다.

이상 끝~~~
샬롬~
난! 자유인...
  
91 태그-소스   태그가 적용되지 않게 하는 태그  오예 18·01·10 197 17
90 그누보드   그누보드 최고관리자 추가  오예 18·12·11 319 13
89 제로보드   mysql 4.1에서 제로보드의 호환성 문제 해결  오예 16·01·15 343 26
88 그누보드   그누보드 이미지 리사이즈  오예 15·07·30 458 33
87 그누보드   DHTML 에디터 이미지 새창으로 안뜨게 하려면  오예 15·05·17 462 48
86 태그-소스   video 태그  오예 14·06·19 745 29
85 웹일반   해상도에 따라 변하는 레이어 위치 고정하기  오예 12·08·16 884 33
84 그누보드   코멘트 줄간격 조정  오예 12·09·03 895 39
83 그누보드   그누보드 이미지 클릭시 팝업창 뜨는 문제  오예 13·04·24 1041 47
82 태그-소스   플래시에 레이어창 위로 올라오게 하기  오예 11·10·04 1075 43
81 웹일반   플래시 위에 레이어 팝업창 띄우기  오예 12·11·09 1162 39
80 웹일반   onfocus="this.blur()"  오예 11·08·22 1281 58
79 태그-소스   플래시 object태그(배경 투명)  오예 11·08·22 1320 43
78 태그-소스   이미지맵에서 롤오버 만들기  오예 11·07·31 1483 46
77 제로보드   특정 회원사진 출력 안되는 문제  오예 06·05·01 1668 58
76 태그-소스   Style sheet 사용법  오예 06·04·15 1687 66
75 제로보드   [PHP]게시판에서 문자열 자르기 함수  오예 05·11·16 1803 66
제로보드   최근 게시물을 나타내는 원리와 방법  오예 06·05·27 1804 77
73 제로보드   회원사진 리사이즈  오예 05·09·14 1825 89
72 웹일반   자신의 홈페이지 트래픽 알아내기  오예 06·04·05 1839 78
12345
Copyright 1999-2020 Zeroboard / skin by GGAMBO