프로그래밍/PHP

[PHP] 게시판 만들기 - 읽기 기능 구현

노력의천재 2020. 2. 26. 17:42

이번 시간에는 글쓰기 기능을 통해 작성한 게시글을 읽을 수 있도록 기능을 구현해보는 시간을 가져보겠습니다.

그리고 게시글을 읽었을 때 조회수가 늘어나게끔 만들어보겠습니다.

 

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>

다음 코드는 현재 세션아이디와 게시글을 작성한 아이디를 비교하여 일치할 때만 수정, 삭제를 하게끔 권한을 부여하는 코드입니다. 즉 자신이 쓴 글만 수정, 삭제 가능하도록 구현한 것입니다. 이해를 돕기 위해서 다음 결과를 참고하시길 바랍니다.

 

test로 로그인 후 test의 글 읽기
test로 로그인 후 gildong의 글 읽기

 

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