“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- 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)'];
?>
게시판에 총 게시글 갯수를 보여주는 코드입니다