[PHP] 게시판 만들기 (10/10) - 검색 결과 확인하기

2022. 10. 27. 02:37무료강좌&튜토리얼/PHP

[PHP] 게시판 만들기 (10/10) - 검색 결과 확인하기

 

앞에서 생성한 검색폼에서 데이터를 전달받아 검색 결과를 출력하는 기능을 구현해보자.

검색폼의 select 태그에 있는 옵션([제목], [내용], [제목과내용], [제목 또는 내용])에 따라 쿼리문의 조건문이 다르게 바뀐다.

 

옵션에 따른 조건문의 변화

옵션명 옵션값 조건문
제목 title title = 검색어
내용 content content = 검색어
제목과내용 tandc title = 검색어 AND content = 검색어
제목 또는 내용 torc title = 검색어 OR content = 검색어

 

다음은 검색 결과를 출력하는 예제이다.

[예제: 187_searchResult.php ]

<?php
  include $_SERVER['DOCUMENT_ROOT'].'/php/common/171_session.php';
  include $_SERVER['DOCUMENT_ROOT'].'/php/common/179_checkSignSession.php';
  include $_SERVER['DOCUMENT_ROOT'].'/php/cssControlPanel/163_connection.php';

  $searchKeyword = $dbConnect->real_escape_string($_POST['searchKeyword']);
  $searchOption = $dbConnect->real_escape_string($_POST['option']);

  if($searchKeyword == '' || $searchKeyword == null) {
    echo "검색어가 없습니다.";
    exit;
  }

  switch($searchOption) {
    case 'title':
    case 'content':
    case 'tandc':
    case 'torc':
      break;
    default :
      echo "검색 옵션이 없습니다.";
      exit;
      break;
  }

  $sql = "SELECT b.boardID, b.title, m.nickName, b.regDate FROM board b JOIN member m ON (b.memberID = m.memberID) ";
  
  switch($searchOption) {
    case 'title':
      $sql .="WHERE b.title LIKE '%{$searchKeyword}%'";
      break;
    case 'content':
      $sql .="WHERE b.content LIKE '%{$searchKeyword}%'";
      break;
    case 'tandc':
      $sql .="WHERE b.title LIKE '%{$searchKeyword}%' AND b.content LIKE '%{$searchKeyword}%'";
      break;
    case 'torc':
      $sql .="WHERE b.title LIKE '%{$searchKeyword}%' OR b.content LIKE '%{$searchKeyword}%'";
      break;
  }

  $result = $dbConnect->query($sql);
  if($result) {
    $dataCount = $result->num_rows;
  } else {
    echo "오류발생 - 관리자 문의";
    exit;
  }
?>

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>검색 결과</title>
</head>
<body>
  <a href="./180_writeForm.php">글 작성하기</a>
  <a href="/php/joinLogin/signIn/177_signOut.php">로그아웃</a>
  <table>
    <thead>
      <th>번호</th>
      <th>제목</th>
      <th>작성자</th>
      <th>게시일</th>
    </thead>
    <tbody>
      <?php
        if($dataCount > 0) {
          for($i = 0; $i < $dataCount; $i++) {
            $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
            echo "<tr>";
            echo "<td>".$memberInfo['boardID']."</td>";
            echo "<td><ahref='./185_view.php?boardID={$memberInfo['boardID']}'>{$memberInfo['title']}</a></td>";
            echo "<td>".$memberInfo['nickName']."</td>";
            echo "<td>".date('Y-m-d H:i:s', $memberInfo['regDate'])."</td>";
            echo "</tr>";
          }
        } else {
          echo "<tr><td colspan='4'>{$searchKeyword}를 포함하는 게시글이 없습니다.</td></tr>";
        }
      ?>
    </tbody>
  </table>
</body>
</html>

1. 검색폼에서 전달받은 데이터를 변수에 대입한다.

2. 검색어의 공백 여부를 확인한다.

3. 검색 옵션이 올바른 값인지 확인한다.

4. 게시물을 불러오는 쿼리문이며 WHERE문은 검색 옵션값에 따라 별도록 만들어준다.

5. table 태그에 검색된 게시물을 출력한다.

6. 조건에 맞는 게시물이 없는 경우의 출력문을 만든다.

 

실행 URL은 http://localhost/php/board/183_list.php 이다.

다음은 검색어로 [24번째]를 입력했으며 옵션은 [내용]을 선택한 그림이다.

 

실행결과

1개의 검색결과를 표시해주고 있는것을 확인 할 수있다.

 

 

 


 

 

 

초보자를 위한 PHP 200제
김태영 지음 | 정보문화사