WEB/PHP

[PHP] 게시판 검색 페이지 만들기

aimee418 2023. 5. 2. 07:59

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

PHP 를 이용하여 게시판의 검색 페이지 만들기

 

 

 

board.php

✈. 게시판의 검색창 영역 

: 검색 될 키워드와 검색 옵션 선택 정보를 input과 select 태그에 넣어줍니다.

: name과 id를 달아줍니다

: 검색창이 빈칸이 되지 않도록 require를 넣습니다

<form action="boardSearch.php" name="boardSearch" methood="get" >
                            <fieldset>
                                <legend class="blind">게시판 검색 영역</legend>
                                <input type="search" name="searchKeyword" id="searchKeyword" placeholder="검색어를 입력하세요" required>
                                <select name="searchOption" id="searchOption">
                                    <option value="title">제목</option>
                                    <option value="content">내용</option>
                                    <option value="name">등록자</option>

                                </select>
                                <button type="submit" class="btnStyle3 white">검색</button>
                                <a href="boardWrite.php" class="btnStyle3">글쓰기</a>
                            </fieldset>
                    </form>

 

 

boardSearch.php

✈. 게시판 검색

<?php
include "../connect/connect.php";
include "../connect/session.php";

if(isset($_GET['page'])){
    $page =(int) $_GET['page'];
}else {
    $page = '1';
}


$searchKeyword = $_GET['searchKeyword'];
$searchOption = $_GET['searchOption'];

$searchKeyword = $connect-> real_escape_string(trim($searchKeyword));
$searchOption = $connect-> real_escape_string(trim($searchOption));

//검색에 맞는 게시판 불러오기
$sql = "SELECT  b.boardID, b.boardTitle, b.boardContents, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) ";
// //제목에서 내가 쓴 키워드 찾기
// $sql = "SELECT  b.boardID, b.boardTitle, b.boardContents, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) WHERE b.boardTitle LIKE '%{$searchKeyword}' ORDER BY boardID DESC";
// //내용에서 내가 쓴 키워드 찾기
// $sql = "SELECT  b.boardID, b.boardTitle, b.boardContents, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) WHERE b.boardContents LIKE '%{$searchKeyword}' ORDER BY boardID DESC";
// //이름에서 내가 쓴 키워드 찾기
// $sql = "SELECT  b.boardID, b.boardTitle, b.boardContents, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) WHERE m.youName LIKE '%{$searchKeyword}' ORDER BY boardID DESC";

switch ($searchOption) {
    case "title":
        $sql .= "WHERE b.boardTitle LIKE '%{$searchKeyword}%' ORDER BY boardID DESC ";
        break;
    case "content":
        $sql .= "WHERE b.boardContents LIKE '%{$searchKeyword}%' ORDER BY boardID DESC ";
        break;
    case "name":
        $sql .= "WHERE m.youName LIKE '%{$searchKeyword}%' ORDER BY boardID DESC ";
        break;
}



$result = $connect->query($sql);

$totalCount = $result->num_rows;
// echo $totalCount;
?>

✈. 스크립트

: php 스크립트 상단에 서버와 연결 정보를 담은 connect.php 와  세션 관리를 위한 session.php 파일을 연결합니다.

session 세션(Session)은 모든 정보가 사용자 측의 컴퓨터에 저장되는 쿠키와 달리 웹 서버에 정보를 저장하고 사용자 측에는 접근할 수 있는 키 값을 저장한다.
웹 서버에 데이터가 저장되고 필요할 때마다 브라우저에서 키 값으로 서버에 요청을 한다. 그리고 브라우저를 종료하는 시점에서 세션이 삭제가 되도록 설정이 가능해서 쿠키에만 데이터를 저장하는 것보다는 보안성이 높다.
 
사용하는 법도 쉽기 때문에 로그인과 같은 인증 처리에 많이 사용이 된다.

: 검색창의 값을 받아오기 위해 $_GET 방식으로 작성되었습니다. 각각 searchKeyword와 searchOption변수에 저장됩니다

HTML의 form을 이용하여 값을 전송하는 방식은 get과 post 두 가지가 있습니다

: 검색옵션에 따라 다른 결과를 나타내므로 switch문으로 조건문을 작성합니다

: totalCount는 검색 결과 총 개수를 담습니다.

 

 

boardSearch.php

✈ 게시판 하단 페이징 부분

<?php
    //총페이지갯수
    $boardTotalCount =ceil($totalCount/$viewNum);
    // 1 2 3 4 5 6 7 8 9 10
    $pageView =4;
    $startPage =$page - $pageView;
    $endPage =$page + $pageView;

    //처음 페이지 초기화
     if($startPage < 1) $startPage = 1;
     if($endPage >= $boardTotalCount)  $endPage = $boardTotalCount;
    //처음으로/이전
    if($boardTotalCount > 1 && $page <= $boardTotalCount){
        if($page != 1){
            $prevPage = $page-1;
            echo "<li><a href='boardSearch.php?page=1&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>처음으로</a><li>";
            echo "<li><a href='boardSearch.php?page={$prevPage}&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>이전</a><li>";
        }
    }
    //페이지
    for($i=$startPage; $i<=$endPage; $i++){
        $active ="";
        if($i == $page) $active = "active";

        echo "<li class='{$active}'><a href='boardSearch.php?page={$i}&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>{$i}</a></li>";
    }
    //마지막으로/다음
    if($page != $boardTotalCount && $page <= $boardTotalCount){//
        $nextPage = $page+1;
        echo "<li><a href='boardSearch.php?page={$nextPage}&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>다음</a><li>";
        echo "<li><a href='boardSearch.php?page={$boardTotalCount}&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>마지막으로</a><li>";
    }
?>

 

: 한 페이지당 몇개의 글을 보일 것 인지 지정하여 총 페이지를 계산하고, 시작페이지가 1보다 작으면 1로 초기화, 끝페이지가 전체페이지보다 크거나 같으면 전체페이지 수로 초기화합니다 

: 현재페이지와 페이지 번호가 같으면 active클래스를 적용 합니다.

 

: 현재페이지가 전체페이지보다 작으면 페이징 양 끝에 "다음"과 "마지막" 버튼이 활성화 됩니다. 

 

 

 

 

 

 

 

board.php

✈. 게시판의 검색창 영역 

<?php 
    include "../connect/connect.php";
    include "../connect/session.php";

    // echo "<pre>";
    // var_dump($_SESSION);
    // echo "</pre>";

    //case1. 게시글 총갯수 보이는 부분
    // $sql = "SELECT  b.boardID, b.boardTitle, b.boardContents, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) ";
    // $result = $connect->query($sql);
    // $totalCount = $result -> num_rows;
   
    //case2. 게시글 총갯수 보이는 부분
    //게시글의 총 갯수
    //몇 페이지?
    $sql = "SELECT count(boardID) FROM board";
    $result = $connect -> query($sql);

    $boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
    $boardTotalCount = $boardTotalCount['count(boardID)'];
?>

게시판에 총 게시글 갯수를 보여주는 코드입니다