<?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 변수를 계산하여 다음 페이지로 이동할 수 있도록 합니다.