웹마스터 팁

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

이상 끝~~~

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

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

잘 모르시면 묻구 답하기 게시판에 글 적어주세요~~ ^^
제목 글쓴이 날짜
사용자 정의를 활용하여 폼 형식으로 개발하는 무식한 방법(2) [5] Reminisce 2014.08.22
사용자 정의를 활용하여 폼 형식으로 개발하는 무식한 방법(1) [6] Reminisce 2014.08.22
CafeXE (homepage 모듈) 메뉴노출 권한오류 수정안. Xiso 2014.08.22
사이트 디자인 설정에서 레이아웃 저장이 안될시 고치는 방법 [1] LoteM대한천자 2014.07.28
스케치북 게시판 메뉴얼 [1] socialskyo 2014.08.21
jquery 이미지 이펙트 플러그인 Ansi™ 2014.08.19
게시판의 관리자가 최고관리자의 글을 지울 수 없도록 하기 [1] file BJ람보 2014.08.18
이거 어디다 올려야 될 지 몰라 여기다 올립니다. 프로그래머님들 읽어보세요. [2] 유샤인 2014.06.10
외부 페이지 작업시 페이징 작업 함수 Happyphp 2014.08.12
관리자설정-> 관리자 메뉴설정 에서 삭제가 안 되는 현상 수정하는 방법 [1] sejin7940 2014.08.11
F12개발자도구를 열었을때 IE버젼이 낮게 나온다면 pezex 2014.08.11
글읽기 권한 없을때 회원가입창으로 유도하는 방법 (XE1.5수정) [10] sejin7940 2011.08.23
룰셋을 폼 필터처럼 Ajax로 사용하기 Lansi 2014.08.08
xe module, sample 생성기 [9] 천재ㅐ재 2014.07.24
네이버 SMTP로 인증메일 보내기 [12] Neder 2013.08.26
첨부파일 제한 등을 1M 이하인 K 단위로 제한할 수 있게 설정 [1] sejin7940 2014.08.07
UX를 편리하게 하기 위한 7 CSS 팁 gamgak2895 2014.08.07
코어 수정하지 않고 게시물 첨부 파일 사용제한 Happyphp 2014.08.07
XE 설치 시 안전한 폴더권한 설정하기 (chown 사용) 컴토피아 2014.08.07
특정 도메인 가입 않되게 (인증메일 관련) 컴박살 2014.08.06