웹마스터 팁

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

이상 끝~~~

제가 쓰는 소스를 직접 쓰려다가 열분덜 공부도 하면서 하시라구 감히 설명만 올립니다.

쿠쿠, 위에서 소스부분만 떼다가 사용하셔도 충분히 될거에요~~ ^^

잘 모르시면 묻구 답하기 게시판에 글 적어주세요~~ ^^