[PHP] 게시판 만들기 - 읽기 기능 구현
이번 시간에는 글쓰기 기능을 통해 작성한 게시글을 읽을 수 있도록 기능을 구현해보는 시간을 가져보겠습니다.
그리고 게시글을 읽었을 때 조회수가 늘어나게끔 만들어보겠습니다.
1. 글 읽기 화면 구현
게시판에 있는 글을 눌렀을 때 정보를 제공하는 화면을 먼저 구현해봅시다. read.php를 새로 만들고, write.php의 내용을 복사하여 붙여넣기 해준 후 수정을 진행하겠습니다.
<?php
include_once "./config.php";
include "./db/db_con.php";
include_once "./login_check.php";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width" initial-scale="1">
<!-- 스타일 시트 참조 / css폴더의 bootstrap.css 참조 -->
<title>PHP 게시판 웹 사이트</title>
<link rel="stylesheet" href="css/reply.css">
<link rel="stylesheet" href="css/bootstrap.css">
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="./js/login.js"></script>
<script src="./js/event.js"></script>
</head>
<body>
<!-- 표준 네비게이션 바 (화면 상단에 위치, 화면에 의존하여 확대 및 축소) -->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- Collapse : 제목을 클릭하면 해당내용이 펼쳐지고 다른내용은 접히는 특수 효과 -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.php">PHP 게시판 웹 사이트</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="main.php">메인</a></li>
<li><a href="list.php">게시판</a></li>
</ul>
<?php
if(!$userid){
?>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">접속하기<span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="active"><a href="login.php">로그인</a></li>
<li><a href="join.php">회원가입</a></li>
</ul>
</li>
</ul>
<?php
}else{
$logged = $username."(".$userid.")";
?>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false"><b><?=$logged ?></b>님의 회원관리<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="logout.php">로그아웃</a></li>
</ul>
</li>
</ul>
<?php
}
?>
</div>
</nav>
<div class="container">
<!-- 글 불러오기 -->
<div id="board_read">
<table class="table table-striped" style="text-align: center; border: 1px solid #ddddda">
<thead>
<tr>
<th colspan="2" style="background-color: #eeeeee; text-align: center;"><h3>게시판 글읽기</h3></th>
</tr>
</thead>
<tbody>
<tr>
<td>글 제목</td>
<td colspan="2"><?=$board['title']?></td>
</tr>
<tr>
<td>작성자</td>
<td colspan="2"><?=$board['name']?></td>
</tr>
<tr>
<td>작성일자</td>
<td colspan="2"><?=$board['date']?></td>
</tr>
<tr>
<td>내용</td>
<td colspan="2" style="min-height: 200px; text-align: left;"><?=$board['content']?></td>
</tr>
</tbody>
</table>
<!-- 목록, 수정, 삭제 -->
<a href="list.php" class="btn btn-primary">목록</a>
<?php
if($userid==$board['name']){
?>
<a href="update.php?idx=<?=$board['idx']?>" class="btn btn-primary">수정</a>
<a href="delete.php?idx=<?=$board['idx']?>" class="btn btn-primary">삭제</a>
<?php } ?>
</div>
</div>
예전의 내용과 중복되는 부분이 많아서 코드를 천천히 읽어보시면 화면이 어떤식으로 구성될 것인지 보이실겁니다. 따라서 그런 부분은 넘어가도록 하겠습니다.
<?php
include_once "./config.php";
include "./db/db_con.php";
include_once "./login_check.php";
?>
세션값을 이용, DB 정보 불러오기, 로그인 체크 기능을 위해서 다음과 같이 참조 코드를 작성해줍니다. 로그인 체크를 하는 이유는 회원가입한 회원들만이 글을 읽을 수 있게끔 권한을 부여하기 위해서입니다.
<!-- 목록, 수정, 삭제 -->
<a href="list.php" class="btn btn-primary">목록</a>
<?php
if($userid==$board['name']){
?>
<a href="update.php?idx=<?=$board['idx']?>" class="btn btn-primary">수정</a>
<a href="delete.php?idx=<?=$board['idx']?>" class="btn btn-primary">삭제</a>
<?php } ?>
</div>
다음 코드는 현재 세션아이디와 게시글을 작성한 아이디를 비교하여 일치할 때만 수정, 삭제를 하게끔 권한을 부여하는 코드입니다. 즉 자신이 쓴 글만 수정, 삭제 가능하도록 구현한 것입니다. 이해를 돕기 위해서 다음 결과를 참고하시길 바랍니다.
2. DB에서 게시글 정보 가져오기
<?php
include_once "./config.php";
include "./db/db_con.php";
include_once "./login_check.php";
$bno = $_GET['idx']; // $bno에 idx값을 받아와 넣음
/* 받아온 idx값을 선택해서 게시글 정보 가져오기 */
$sql = mq("select
*
from
board
where
idx='".$bno."'
");
$board = $sql->fetch_array();
?>
get방식으로 게시글의 번호를 받아 이를 만족하는 DB의 정보들을 가져오도록 구현했습니다.
★ 조회수 기능 구현
위의 코드에 다음과 같이 코드를 추가해줍니다.
<?php
include_once "./config.php";
include "./db/db_con.php";
include_once "./login_check.php";
$bno = $_GET['idx']; // $bno에 idx값을 받아와 넣음
/* 조회수 올리기 */
$hit = mysqli_fetch_array(mq("select * from board where idx ='".$bno."'"));
$hit = $hit['hit'] + 1;
mq("update
board
set
hit = '".$hit."'
where
idx = '".$bno."'
");
/* 조회수 올리기 끝 */
/* 받아온 idx값을 선택해서 게시글 정보 가져오기 */
$sql = mq("select
*
from
board
where
idx='".$bno."'
");
$board = $sql->fetch_array();
?>
해당 게시글이 읽힐 때 마다 조회수를 저장하는 변수 $hit이 값을 1 증가시키고, update 문을 통해서 DB의 조회수를 저장하는 속성인 hit에 $hit의 값을 갱신시켜주는 코드입니다.
위의 실습 결과를 확인해 본 결과 입니다. 글을 읽기 전에는 조회수가 2였는데 읽은 후 3으로 증가한 것을 확인할 수 있었습니다.
이렇게 작성된 게시글을 읽을 수 있도록 기능을 구현해보고 추가로 조회수도 증가하도록 실습을 진행해봤습니다. 이번 실습은 꽤 간단했기 때문에 이해하는데 어려움이 없으실거라고 생각합니다. 혹시 잘못된 부분이나 모르는 부분이 있으시면 언제든 질문해주시길 바랍니다. 따라와주셔서 감사합니다.
PHP 게시판 만들기 시리즈 👇
노력의 천재
Carpe Diem, Seize the day
transferhwang.tistory.com