php

php 게시판 검색

진블로그 2023. 5. 1. 12:37
다른 명언

728x90
반응형
<?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/connect.php" 파일과 세션을 시작하는 "connect/session.php" 파일 두 개를 포함합니다.

스크립트는 먼저 URL에서 "page" 매개변수가 설정되어 있는지 확인하고, 그렇다면 $page 변수를 해당 매개변수 값으로 정수형으로 캐스트합니다. 그렇지 않으면 $page를 1로 설정합니다.

다음으로, $_GET을 사용하여 URL에서 searchKeyword와 searchOption 매개변수를 가져옵니다. 이 매개변수의 값은 선행 또는 후행 공백을 제거하고 SQL 인젝션 공격을 방지하기 위해 "real_escape_string" 메서드를 사용하여 적절히 검증됩니다.

그런 다음, searchKeyword와 searchOption 매개변수를 기반으로 게시판 글 테이블에서 검색을 수행하는 SQL 쿼리를 작성합니다. SQL 쿼리는 switch 문을 사용하여 매개변수에 따라 다른 검색 조건을 설정합니다. 쿼리는 검색된 결과를 boardID 기준으로 내림차순으로 정렬합니다.

마지막으로, 실행된 쿼리에서 검색된 전체 행 수를 확인하고 $totalCount 변수에 할당합니다.

 

 

<?php
    $viewNum = 10;
    $viewLimit = ($viewNum * $page) - $viewNum;

    $sql .= "LIMIT {$viewLimit}, {$viewNum}";
    $result = $connect -> query($sql);

    if($result){
        $count = $result -> num_rows;

        if($count > 0){
            for($i=0; $i<$count; $i++){
                $info = $result -> fetch_array(MYSQLI_ASSOC);

                echo "<tr>";
                echo "<td>".$info['boardID']."</td>";
                echo "<td><a href='boardView.php?boardID={$info['boardID']}'>".$info['boardTitle']."</td>";
                echo "<td>".$info['youName']."</td>";
                echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
                echo "<td>".$info['boardView']."</td>";
                echo "</tr>";
            }
        } else {
            echo "<tr><td colspan='5'>게시글이 없습니다.</td></tr>";
        }
    }
?>

이 PHP 스크립트는 게시판 글 데이터베이스에서 검색된 결과를 페이징 처리하여 화면에 표시하는 기능을 합니다.

먼저, $viewNum 변수를 이용하여 페이지당 보여줄 게시글 수를 지정합니다. 그리고, $viewLimit 변수를 계산하여 현재 페이지에서 보여줄 게시글의 시작 인덱스를 설정합니다.

다음으로, SQL 쿼리에 "LIMIT" 구문을 추가하여 $viewLimit 변수와 $viewNum 변수를 사용하여 페이지에 보여줄 게시글 범위를 지정합니다.

그리고, 결과값을 $result 변수에 할당하고, 결과값이 있으면 반복문을 사용하여 검색된 모든 게시글을 화면에 출력합니다. 각 게시글의 정보는 테이블의 각 열에 맞게 출력됩니다. 만약 검색된 게시글이 없을 경우, "게시글이 없습니다." 라는 메시지가 화면에 출력됩니다.

이 방식으로 페이징 처리를 하면, 사용자는 보다 쉽게 게시글을 찾아볼 수 있습니다.

 

<?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($page != 1 && $boardTotalCount !=0 && $page <= $boardTotalCount){
        echo "<li><a href='boardSearch.php?page=1&searchKeyword={$searchKeyword}&searchOption={$searchOption}'>처음으로</a></li>";
        $prevPage = $page - 1;
        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>";
    }
?>


이 코드는 PHP로 작성된 페이지네이션 기능을 구현하는 코드입니다.

먼저 $boardTotalCount 변수는 총 게시물 수를 페이지 당 보여지는 게시물 수($viewNum)로 나눈 뒤 올림하여 총 페이지 수를 계산합니다.

$pageView 변수는 현재 페이지를 중심으로 좌우로 보여지는 페이지 수를 의미합니다. 예를 들어, $pageView가 4일 때, 현재 페이지가 6이라면 2부터 10까지의 페이지가 보여지게 됩니다. 이후 $startPage와 $endPage 변수를 계산하여 페이지 목록을 출력합니다. 단, $startPage와 $endPage가 1보다 작거나 총 페이지 수를 넘어갈 경우, 이를 초기화합니다.

이어서 현재 페이지가 첫 페이지가 아니고 총 페이지 수가 0이 아니며 현재 페이지가 총 페이지 수보다 작거나 같을 때, "처음으로"와 "이전" 페이지 링크를 출력합니다. 이때, $prevPage 변수를 계산하여 이전 페이지로 이동할 수 있도록 합니다.

그리고 $startPage부터 $endPage까지의 페이지 목록을 출력합니다. 이때, 현재 페이지와 $i가 같으면 해당 페이지가 활성화된 상태이므로 CSS 클래스를 추가합니다.

마지막으로 현재 페이지가 마지막 페이지가 아니고 현재 페이지가 총 페이지 수보다 작거나 같을 때, "다음"과 "마지막으로" 페이지 링크를 출력합니다. 이때, $nextPage 변수를 계산하여 다음 페이지로 이동할 수 있도록 합니다.

728x90