저번 실습에 이어서 페이징 처리를 추가해 게시판 화면을 구현하겠습니다. 1. 페이징 설계구현할 페이지의 디자인은 다음과 같습니다. 하나의 페이지에는 최대 5개의 게시글이 보이게끔 구현합니다. 그리고 '마지막' 을 클릭하면 마지막 페이지로, '처음' 을 클릭하면 처음 페이지로 이동하게끔 만듭니다. 또한 처음 페이지에서는 '이전' 은 나오지 않고 '다음' 만 나오게끔 하고 마지막 페이지는 그와 반대로 되게끔 구현할 예정입니다. 처음과 마지막이 아닌 페이지는 모든 이동 이벤트들이 발생할 수 있게 다음과 같이 구현합니다. 2. 페이징 구현저번 실습에서의 코드를 다음과 같이 페이징 구현 코드를 추가해줍니다. 첫번째 코드는 맨 앞에, 두번째 코드는<body> 부분에서 찾아서 넣어줍니다.
$page는 현재 페이지 번호를 확인하기 위한 변수입니다. 위에서와 같이 이전,다음 등을 클릭했을 때 GET방식으로 페이지 번호를 받아 해당 페이지로 넘어가기 위해 필요한 코드입니다.
두번째 코드는 많이 어렵진 않으나 처음 접하면 이해하기 힘들 수 있기 때문에 한줄씩 무엇을 의미하는지 알아보고 넘어 가도록 합시다. 먼저 mysqli_num_rows() 함수가 의미하는 것은 board 테이블에 있는 모든 레코드 수를 의미합니다. 즉 게시판의 총 레코드 수를 $total_record에 저장하겠다는 의미입니다. $list는 한 페이지에 보여줄 개수를 저장, $block_cnt는 블록당 보여줄 페이지의 개수를 저장하는 변수입니다. ceil() 함수는 인자 값을 무조건 올림 처리하는 기능을 합니다. 현재 페이지를 나타내는 $page와 블록당 보여줄 페이지 개수를 나타내는 $block_cnt 값을 나누어 올림함으로써 $block_num에 현재 페이지 블록을 저장합니다. $block_start는 블록의 시작 번호를 나타냅니다. 만약 현재 페이지 블록이 1이라면 블록의 시작 번호는 (1-1)*5+1=1, 현재 페이지 블록이 2라면 블록의 시작 번호는 (2-1)*5+1=6, 이런식으로 1,6,11 ... 블록의 시작 번호를 나타냅니다. (변수의 값에 따라 달라질 수 있습니다.) $block_end는 블록의 마지막 번호를 의미합니다. 예를들어 블록의 시작 번호가 1이라면 블록의 마지막 번호는 1+5-1=5, 블록의 시작 번호가 6이라면 6+5-1=10, 이런식으로 5,10,15 ... 블록의 마지막 번호를 나타냅니다. $total_page는 페이징한 페이지 수를 의미합니다. 조건문에서, if($block_end > $total_page)는 블록의 마지막 번호가 페이지 수 보다 많다면 페이징한 페이지의 수를 마지막 번호로 설정합니다. $total_block은 블록의 총 개수, $page_start는 페이지의 시작을 뜻합니다. $page_start 변수는 SQL문에서 LIMIT 조건을 걸때 사용할 변수입니다. 마지막으로 "SELECT * FROM board ORDER BY idx DESC LIMIT $page_start, $list" 는 board 테이블에서 idx를 내림차순으로 정렬하여 $page_start를 시작으로 $list 의 수만큼 보여주게끔 모든 정보를 가져오겠다는 의미입니다. 즉 5개씩 게시글 정보를 가져오는 것입니다. 페이징 구현이 끝났으므로 위에서 설계했던대로 처음, 이전, 다음, 마지막 페이지 이동을 조건문을 이용하여 구현합니다. 아래의 코드를 <table> 태그가 끝나곳 밑에 입력해줍니다.
이 코드를 통해 아까 위에서 GET으로 page를 왜 받아와야했는지 이해하셨을거라고 생각합니다. 다음 코드는 지난번 실습 했던 내용과 비슷하므로 이 정도로 넘어가도록 하겠습니다. ★ 글쓰기, 검색 FORM 구현하기앞으로 구현할 기능에는 글쓰기, 글 검색 등의 기능이 있습니다. 나중에 차차 실습해보겠지만 미리 그럴싸한 게시판 화면을 만들기위해서 외관이라도 구현해보겠습니다.
글쓰기 버튼을 누르면 write.php 로 넘어가서 글쓰기 화면으로 이동하고, option 태그를 이용하여 제목, 글쓴이, 내용의 3가지 조건으로 글을 검색할 수 있게끔 검색창을 만들었습니다. 실제 기능은 실습을 통해 천천히 진행하도록 하겠습니다. 다음은 실습의 결과입니다. 비록 심플하지만 제법 구색을 갖춘 게시판 화면을 구축해봄으로써 이번 실습은 여기서 마치도록 하겠습니다. 감사합니다 :) PHP 게시판 만들기 시리즈 👇노력의 천재 Carpe Diem, Seize the day transferhwang.tistory.com |