ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

    댓글

Designed by Tistory.