IENDEV.KR Since 2001 Login | Register

Development View


게시판 페이징 방법

웹사이트에서 게시물 리스트를 출력할 때 가장 기본적으로 사용되는 것이 페이징입니다. 페이징이란 많은 수의 게시물을 한꺼번에 가져오기가 매우 비효율적이기 때문에 일정 크기로 나누어 페이지 번호를 부여하는 방법을 말합니다. 다시말해 일정 영역만을 가져와서 페이지라는 개념으로 표시합니다.  본 글은 PHP+MySQL(MariaDB) 환경에서 게시물 페이징을 처리하기 위한 방법을 설명합니다. 아래 소스에 주석으로 설명을 달아 두었으니 참조 부탁드립니다.


<?


// 현재 페이지를 GET 방식으로 받아옵니다.


$page = $_GET["page"]; 


// DB에 접속하기 위한 부분입니다. 


$connect = mysql_connect ( "localhost", "아이디", "패스워드" ) or die ("DB에 연결할 수 없습니다.");

$status = mysql_select_db("DB명", $connect) or die ("DB 사용 실패 : ".mysql_error($connect)); 


// 한 화면에 나타날 게시물의 수를 설정합니다.


$page_set = 10;


// 하단의 페이지를 표시할 블럭 수를 설정합니다. 여기서 블럭이란 페이지 번호의 묶음으로 이해하시면 될 것 같습니다.


$block_set = 5; 


// DB에 쿼리를 먼저 날립니다. 전체 게시물 수($total)를 구하기 위함입니다.


$query = "SELECT count(no) as total FROM board"; 

$result = mysql_query($query, $connect) or die ("쿼리 에러 : ".mysql_error($connect));

$row = mysql_fetch_array($result); 

$total = $row[total];


// 전체 페이지 수를 구합니다. 위에서 설정한 $page_set으로 전체 게시물 수를 나눈 수를 올림합니다.


$total_page = ceil ($total / $page_set); 


// 총 블럭 수를 구합니다. 블럭 수로 전체 페이지 수를 나눈 수를 올림합니다.


$total_block = ceil ($total_page / $block_set); 


// 현재 페이지 값이 없으면 1로 설정합니다.


if (!$page) $page = 1; 


// 현재 블럭을 구합니다.


$block = ceil ($page / $block_set); 


// DB에 LIMIT 로 블럭을 지정하여 쿼리하기 위한 시작점을 설정합니다. 1페이지라면 LIMIT 0,10 으로 2페이지라면 LIMIT 10, 10 으로 지정하고자 합니다.


$limit_idx = ($page - 1) * $page_set; 


// 현재페이지를 쿼리합니다. 위에서 지정한대로 $limit_idx를 시작점으로 $page_set (10) 만큼 가져옵니다.


$query = "SELECT no FROM board ORDER BY no DESC LIMIT $limit_idx, $page_set";

$result = mysql_query($query, $connect) or die ("쿼리 에러 : ".mysql_error($connect));

$rows = mysql_num_rows($result);


// while 반복을 통해 게시물을 출력합니다.


while ($row = mysql_fetch_array($result)) {

echo $row[no]."\n";

}


// 현재 블럭에서 첫번째 페이지 번호를 설정합니다. 


$first_page = (($block - 1) * $block_set) + 1; 


// 현재 블럭에서 마지막 페이지 번호를 설정합니다.


$last_page = min ($total_page, $block * $block_set); 


// 현재 페이지와 다음 페이지를 설정합니다.


$prev_page = $page - 1; 

$next_page = $page + 1; 

 

// 이전 블럭과 다음 블럭을 설정합니다.


$prev_block = $block - 1;

$next_block = $block + 1; 


// 이전 블럭과 다음 블럭의 페이지 번호입니다.


$prev_block_page = $prev_block * $block_set; 

$next_block_page = $next_block * $block_set - ($block_set - 1);


// 이전 페이지와 이전 블럭 링크를 출력합니다.


echo ($prev_page > 0) ? " [prev] " : "[prev] ";

echo ($prev_block > 0) ? " ... " : "... ";


// 페이지 링크를 출력합니다. 현재 페이지는 링크 대신 굵게 표시합니다. 


for ($i=$first_page; $i<=$last_page; $i++) {

echo ($i != $page) ? " $i " : " $i ";

}


// 다음 페이지와 다음 블럭 링크를 출력합니다.


echo ($next_block <= $total_block) ? " ... " : "... ";

echo ($next_page <= $total_page) ? " [next]" : "[next]";


?> 


#페이징 #PHP #게시판


81 Like it  |   0 Comment


댓글 남기기


로그인후 입력하실 수 있습니다.