필요없는 목록/PHP
게시판에 기능 추가하기(조회수, 검색, 총 게시글 숫자)
비밀안
2023. 5. 1. 12:31
완성된 모습
ㄴ글쓰기 게시판에 있는 총 갯수를 표현했습니다.
ㄴ게시판 검색결과에 있는 게시글 총 갯수를 표현했습니다.
ㄴ제목, 내용, 등록자로 검색을 할 수 있게합니다.
ㄴ제목, 내용, 등록자로 검색하여서 맞는 게시판이 있으면 보여주게 합니다.
ㄴ조회수도 증가하게 만들어봤습니다.
board.php코드
<?php
include "../connect/connect.php";
include "../connect/session.php";
$sql = "SELECT count(boardID) FROM board";
$result = $connect -> query($sql);
$boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
$boardTotalCount = $boardTotalCount['count(boardID)'];
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>게시판 만들기</title>
<?php include "../include/head.php" ?>
<!-- //head -->
</head>
<body class="gray">
<?php include "../include/skip.php" ?>
<!-- //skip -->
<?php include "../include/header.php" ?>
<!-- header -->
<main id="main" class="container">
<div class="intro__inner bmStyle">
<picture class="intro__images">
<source srcset="../assets/img/intro01.png, ../assets/img/intro01@2x.png 2x, ../assets/img/intro01@3x.png 3x" />
<img src="../assets/img/intro01.png" alt="소개이미지">
</picture>
<p class="intro__text">
과거의 실수보다는 미래의 가능성에 집중하여 끊임없이 성장하고 발전하는 모습을 보여드리겠습니다.
마지막으로 사용자의 니즈를 고려한 창의적이고 혁신적인 아이디어를 실현시켜, 가치 있는 기술을 제공하겠습니다.
</p>
</div>
<main id="main" class="container">
<div class="intro__inner center bmStyle">
<picture class="intro__images small">
<source srcset="assets/img/join01.png, assets/img/join01@2x.png 2x, assets/img/join01@3x.png 3x" />
<img src="assets/img/join01.png" alt="회원가입 이미지">
</picture>
<h2>회원 게시판</h2>
<p class="intro__text">
웹디자이너, 웹퍼블리셔, 프론트엔드 개발자를 위한 게시판입니다.<br>
관련된 문의사항은 여기서 확인하세요!
</p>
</div>
<!-- //join__inner-->
<div class="board__inner container">
<div class="board__search">
<div class="left">
* 총 <em><?=$boardTotalCount?></em>건의 게시물이 등록되어 있습니다.
</div>
<div class="right">
<form action="boardSearch.php" name="boardSearch" method="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="ac white">검색</button>
<a href="boardWrite.php" class="btnStyle3 white">글쓰기</a>
</fieldset>
</form>
</div>
</div>
<div class="board__table">
<table>
<colgroup>
<col style="width: 5%">
<col>
<col style="width: 10%">
<col style="width: 15%">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>등록자</th>
<th>등록자</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td>1</td>
<td><a href="baordView.html">게시판 제목</a></td>
<td>안교남</td>
<td>2022-02-02</td>
<td>100</td>
</tr> -->
<?php
if(isset($_GET['page'])){
// (int) 문자를 숫자형으로 변환함
// 혹시 문자로 받아 올수 있으니간 강제 형변환 함.
$page = (int) $_GET['page'];
}
else {
$page = 1;
}
$page = $_GET['page'];
echo $page;
$viewNum = 10;
// $page가 1일 때 0
// $page가 2일 때 20
$viewLimit = ($viewNum * $page) - $viewNum;
$sql = "SELECT b.boardID, b.boardTitle, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) ORDER BY boardID DESC LIMIT {$viewLimit}, {$viewNum}";
$result = $connect -> query($sql);
if($result){
// num_rows : 쿼리의 결과로 넘어온 행의 갯수를 알수 있음.
$count = $result -> num_rows;
if($count > 0){
for($i=0; $i<$count; $i++){
// 상수 기능
// MYSQLI_NUM 인덱스를 숫자로 사용 (기입순서)
// MYSQLI_ASSOC 인덱스를 문자로 사용 (필드명)
// MYSQLI_BOTH 인텍스를 숫자와 문자로 사용
$info = $result -> fetch_array(MYSQLI_ASSOC);
echo "<tr>";
echo "<td>".$info['boardID']."</td>";
// get방식
echo "<td><a href='boardView.php?boardID={$info['boardID']}'>".$info['boardTitle']."</a></td>";
echo "<td>".$info['youName']."</td>";
// php data 검색
echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
echo "<td>".$info['boardView']."</td>";
echo "</tr>";
}
}
else {
echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
}
if($info['youName'] === ""){
echo "asd";
}
}
?>
</tbody>
</table>
</div>
<div class="board__pages">
<ul>
<?php
$boardTotalCount = ceil($boardTotalCount / $viewNum);
$pageView = 5;
$startPage = $page - $pageView;
$endPage = $page + $pageView;
// 처음 페이지 초기화 + 마지막 페이지 초기화
if($startPage < 1) $startPage = 1;
if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;
// 처음으로 + 이전
if($page != 1){
$none2 = "";
$prevPage = $page - 1;
if($page > $boardTotalCount){
$none2 = "accc";
}
echo "<li class='{$none2}'><a href='board.php?page=1'>처음으로</a></li>";
echo "<li class='{$none2}'><a href='board.php?page={$prevPage}'>이전</a></li>";
}
// 페이지
for($i=$startPage; $i<=$endPage; $i++){
$active = "";
if($i == $page) $active = "active";
if(!$page) $active = "accc";
if($page > $boardTotalCount) {
$active = "accc";
}
echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
}
// 마지막으로 + 다음
if($page != $endPage){
$none = "";
$nextPage = $page + 1;
if($page > $boardTotalCount) {
$none = "accc";
}
echo "<li class='{$none}'><a href='board.php?page={$page}'>다음</a></li>";
echo "<li class='{$none}'><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}
?>
<!--
<li><a href="#">처음으로</a></li>
<li><a href="#">이전</a></li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
<li><a href="#">다음</a></li>
<li><a href="#">마지막으로</a></li>
-->
</ul>
</div>
</div>
<!-- //board__list -->
</main>
<!-- //main -->
<?php include "../include/footer.php"?>
</body>
</html>
코드 설명
1.
$sql = "SELECT count(boardID) FROM board";
$result = $connect -> query($sql);
$boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
$boardTotalCount = $boardTotalCount['count(boardID)'];
* 총 <em><?=$boardTotalCount?></em>건의 게시물이 등록되어 있습니다.
board 테이블에서 count(boardID) 필드만 데이터베이스에 줍니다.
fetch_array()로 데이터베이스 내용을 배열로 가져와서 $boardTotalCount에 저장합니다.
그리고 저장된 값중 count(boardID)의 값만 가져와서 $boardTotalCount에 저장합니다.
이 값들은 이제 "총 몇건의 게시물"이 등록되어잇는지 숫자로 표현이 됩니다.
2.
$boardTotalCount = ceil($boardTotalCount / $viewNum);
// 혼돈
// 1 2 3 4 5 6 7 8 9 10 11 12 13까지
$pageView = 5;
$startPage = $page - $pageView;
$endPage = $page + $pageView;
// 처음 페이지 초기화 + 마지막 페이지 초기화
if($startPage < 1) $startPage = 1;
if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;
// 처음으로 + 이전
if($page != 1){
$none2 = "";
$prevPage = $page - 1;
if($page > $boardTotalCount){
$none2 = "accc";
}
echo "<li class='{$none2}'><a href='board.php?page=1'>처음으로</a></li>";
echo "<li class='{$none2}'><a href='board.php?page={$prevPage}'>이전</a></li>";
}
// 페이지
for($i=$startPage; $i<=$endPage; $i++){
$active = "";
if($i == $page) $active = "active";
if(!$page) $active = "accc";
if($page > $boardTotalCount) {
$active = "accc";
}
echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
}
// 마지막으로 + 다음
if($page != $endPage){
$none = "";
$nextPage = $page + 1;
if($page > $boardTotalCount) {
$none = "accc";
}
echo "<li class='{$none}'><a href='board.php?page={$page}'>다음</a></li>";
echo "<li class='{$none}'><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}
처음으로 / 이전 / 1 2 3 4 5 6 7 8.... / 다음 / 마지막으로
버튼을 눌렀을때 해당하는 곳으로 이동하기 위한 코드입니다.
-----
- if($page != 1){}은 처음으로 / 이전 버튼을 만듭니다.
- if($page != 1) {}은 "이전 버튼"을 클릭하면 $page(현재 페이지)에서 -1을 합니다.
- if($page != 1) {}은 "처음으로"을 클릭하면 echo문에 적힌대로 borard.php?page={$page} 페이지1번으로 이동시킵니다.
- if(!$page) {}은 page가 0번 즉 존재하지 않는 페이지로 이동하면 처음, 이전 버튼을 지워줍니다.
---
- for($i=$startPage; $i<=$endPage; $i++){}은 숫자로 1~현재 게시글까지 li태그를 생성합니다.
- if($i == $page)은 현재 li태그에 에 active 클릭스를 줍니다.
- if(!$page)은 page가 0번 즉 존재하지 않는 페이지로 이동하면 li태그를 지워줍니다.
---
if($page != $endPage){}은 다음 / 마지막 버튼 li태그를 만들어줍니다.
if($page > $boardTotalCount){}은 page가 존재하지 않는 페이지로 이동하면 li태그를 지워줍니다.
3.
<?php
// 총 페이지 갯수
$boardTotalCount = ceil($totalCount/$viewNum);
$pageView = 4;
$startPage = $page - $pageView;
$endPage = $page + $pageView;
// 처음 페이지, 마지막 페이지 초기화
if($startPage < 1) $startPage = 1;
if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;
// 처음으로, 이전
if($page !== 1 && $page <= $boardTotalCount){
echo "<li><a href='boardSearch.php?searchKeyword={$searchKeyword}&searchOption={$searchOption}&page=1'>처음으로</a></li>";
$prevPage = $page - 1;
echo "<li><a href='boardSearch.php?searchKeyword={$searchKeyword}&searchOption={$searchOption}&page={$prevPage}'>이전</a></li>";
}
// 페이지
for($i=$startPage; $i<=$endPage; $i++){
if($page > 0 && $page <= $boardTotalCount){
$active = "";
if($i == $page) $active = "active";
echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
}
}
// 다음, 마지막으로
if($page !== $boardTotalCount && $page < $boardTotalCount){
$nextPage = $page + 1;
echo "<li><a href='boardSearch.php?searchKeyword={$searchKeyword}&searchOption={$searchOption}&page={$nextPage}'>다음</a></li>";
echo "<li><a href='boardSearch.php?searchKeyword={$searchKeyword}&searchOption={$searchOption}&page={$boardTotalCount}'>마지막으로</a></li>";
}
?>
이번 코드는 검색 코드입니다.(제목, 내용, 등록자)
위 코드대로 검색을 하면 검색 페이지로 이동을합니다.
- if($page !== 1 && $page <= $boardTotalCount)은 처음/ 이전 버튼을 클릭하게 되면 검색 페이지에서 버튼이 이동하게 해줍니다.
- if($page !== $boardTotalCount && $page < $boardTotalCount)은 다음 / 마지막 버튼을 클릭하게 되면 검색 페이지에서 버튼이 이동하게 해줍니다.
- 둘다 GET 방식입니다.
- if($page !== 1 && $page <= $boardTotalCount)로 li태그를 생성해서 1번부터 게시글 수대로 숫자 버튼을 생성합니다.
- a href보면 boardSearch.php로 전달 받은 값들을 화면에 표시를 해줌으로써 검색 페이지내에서 움직이게 해줍니다.

오늘도 월요일이 끝났네요.
얼릉 토요일이 왔으면 좋겠어요~_~
얼릉 집가서 자고 싶네요.