정렬 & 검색 기능 - board page

DATE : 2023/12/02

이번엔 앞에서 만든 게시판에 (1)사용자가 원하는 카테고리 기준 정렬을 하거나

(2) 찾고자 하는 내용을 검색할 수 있는 기능을 더해보려고 한다.

이 기능을 구현하기 위한 HTML element는 이미 만들어두었기 때문에

<div class="funcs">
    <form method="post">
        <select name="order" id="order">
            <option value="date" autofocus>Date</option>
            <option value="author">Author</option>
            <option value="title">Title</option>
            <option value="hit">Hit</option>
        </select>
        <input type="text" placeholder="Search" class="search" name="search_value">        
        <input type="submit" value="SEARCH" id="search_btn" name="submit">
    </form>
    <button id="write_btn">WRITE</button>
</div>

설명은 패스하고 관련 code만 해석해보기로 하자.

(전반적인 코드는 페이징 기능 - board page에서 이미 해석함)

select tag에 들어있는 option을 하나 선택 & input에 검색하고자 하는 값을 입력해

Submit 버튼을 누르면

(1) 사용자가 고른 option tag의 value 값이

ex) Author을 고른 경우 
$_POST['order'] = author

$_POST['order']으로 들어가게 된다.

(2) 사용자가 입력한 검색어는

ex) 
option> Author
INPUT > hanhxx

$_POST['search_value']로 전달되며

option 값에 검색어가 들어가는 경우의 게시물만 DB에서 가져와

SELECT * FROM board WHERE $option LIKE '%$search_value%' ORDER BY $option

option 기준으로 오름차순 정렬을 실행한다.

ex) 
OPTION > title
INPUT > t


SELECT * FROM board WHERE title LIKE '%$t%' ORDER BY title

예를 들어, 사용자가 title 카테고리를 선정한 후 " t "라는 검색어를 제시하면

title에 "t"가 들어가는 게시물만 DB에서 조회해 가져오게 되는 것이다.

이때 조회 된 게시물의 개수를

$res = mysqli_query($conn, $sql);
$cnt = mysqli_num_rows($res);
$post_per_page = 10;
                    
$start = ($page - 1) * $post_per_page;

$cnt에 할당하고 페이징 기능에 필요한 값을 계산한다.

$get_post_sql = "SELECT * FROM board WHERE $option LIKE '%$search_value%' ORDER BY $option LIMIT $start,$post_per_page";

이후, start를 기준으로 10개의 게시물의 가져와 게시판 목록에 띄우게 되는 것이다.

이때 가져오는 게시물은 title에 "t"가 들어갔다는 조건을 만족하는 게시물만 포함한다.

이제 코드가 제대로 동작하는 지 직접 확인해보자.

index page에서 option: title & search: t 를 입력해보면

제목에 " t "가 들어간 게시물만 취합해, 제목 기준으로 정렬된 목록을 제공 받을 수 있다.

option: Author & search: han을 입력해보면

author에 "han"이 들어간 경우만 모아와 리스트로 제공되는 걸 볼 수 있다.

이렇게 해서 정렬 & 검색 기능을 만들어보았다!

전체 코드는 이미 공개했지만 다음으로는

사용자가 클릭한 게시물의 상세 페이지로 이동하는 기능과 관련된 내용을 살펴보도록 하자!

Last updated