ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PHP] 게시판 만들기 - 글쓰기 기능 구현 ①
    프로그래밍/PHP 2020. 2. 10. 18:18

    이번 시간에는 글쓰기 기능을 구현해보겠습니다. 다음 실습으로는 '비밀 글' 기능을 추가하여 좀 더 심화학습을 해보도록 하겠습니다.

     

    정리하자면, 글쓰기와 관련된 실습은 다음과 같습니다.

    1. 글쓰기 화면을 구현하기 위한 write.php

    2. 글쓰기 기능을 위한 write_ok.php

    3. 비밀글에 접근하기 위한 ck_read.php

     

    1. 글쓰기 화면 구현

    코드는 다음과 같습니다. 게시판 화면을 구현했을때와 비슷합니다. 기존의 내용을 복사 붙여넣기 하고 다른 부분만 수정해주시면 될 거라고 생각합니다.

    <?php
    	include "./config.php";
    	include "./db/db_con.php";
    	include "./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/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/jquery-1.10.2.js"></script>
    		<script src="./js/login.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_write">
                    <form action="write_ok.php" method="post">
    					<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><span class="pull-left">&nbsp;&nbsp;&nbsp;아이디 : <b><?=$userid?></b></span></td>
    							</tr>
    							<tr>
    								<td><input type="text" class="form-control" placeholder="글 제목" name="title" id="utitle" required></td>
    							</tr>
    							<tr>
    								<td><input type="password" class="form-control" placeholder="글 비밀번호" name="pw" id="upw" style="width: 150px;"></td>
    							</tr>
    							<tr>	
    								<td><textarea class="form-control" placeholder="글 내용" name="content" id="ucontent" style="height: 350px" required></textarea></td>
    							</tr>
    						</tbody>
    					</table>
    					<input type="checkbox" value="1" name="lockpost">비밀글<br><br> 
    					<button type="submit" class="btn btn-primary">글쓰기</button>
    				</form>
    			</div>
    		</div>       
    	</body>
    </html>

     

    몇가지 코드 부분만 설명하고 넘어가도록 하겠습니다.

    <?php
    	include "./config.php";
    	include "./db/db_con.php";
    	include "./login_check.php";
    ?>

    위의 코드에서 login_check.php를 참조하는 이유는 로그인이 되지 않았을때는 게시글을 읽을 수 없게끔 하기 위해서입니다. 즉 회원만 글을 읽을 수 있습니다. 

     

    login_check.php의 내용은 다음과 같습니다. (수정된 부분) 

    <!-- 로그인 체크 -->
    <?php 
    	if(!$userid && !$username) {
    		echo("
    			<script>
    			alert('로그인 후 이용해 주세요! ');
    			location.href='login.php'; // login.php
    			</script>
    			");
    	}
    ?>

     

    config.php를 통한 세션관리 코드를 통해 다음과 같이

    <tr>
    	<td><span class="pull-left">&nbsp;&nbsp;&nbsp;아이디 : <b><?=$userid?></b></span></td>
    </tr>

    로그인을 해서 세션을 가지고 있는 상태이므로 작성자 아이디를 다음과 같이 설정할 수 있습니다.

     

    마지막으로 다음 코드는 다음에 실습할 비밀 글 작성을 위해 만든 것 입니다.

    <input type="checkbox" value="1" name="lockpost">비밀글<br><br> 

    체크박스를 만들어서 체크하면 value 값은 1이 되어서 DB의 lock_post에 1이 저장 되게끔 설정하는 역할을 합니다.

    체크를 하지 않는다면 lock_post 값은 0이 되게끔 설정해줍니다.

     

    다음은 글쓰기 화면을 구현한 결과입니다.

    게시판 글쓰기 화면 결과

     

    2. 글쓰기 기능 구현

    <?php
    	include "./config.php";
    	include "./db/db_con.php";
    	
    	$name = $userid;
    	$date = date('Y-m-d');
    	$userpw = password_hash($_POST['pw'], PASSWORD_DEFAULT); 
    	$title = $_POST['title'];
    	$content = $_POST['content'];
    	
    	mq("INSERT 
    			board
    		SET	
    			name = '".$name."', 
    			pw = '".$userpw."', 
    			title = '".$title."', 
    			content = '".$content."',  
    			date ='".$date."'
    	");
    ?>
    	<script>
    		alert("글쓰기 완료되었습니다.");
    		location.href = 'list.php';
    	</script>
    

    $name에는 세션으로 저장된 아이디 값을,  $date엔 date 함수를 통해 연-월-일 양식으로 저장되게끔 선언합니다. 

    $userpw에는 글 비밀번호가 저장되는데 이전 실습에서 나왔던 password_hash() 함수를 통해 입력받은 패스워드를 해쉬값으로 암호화 합니다. 좀 더 이해가 필요하시다면 이전 글을 참고하시면 됩니다!

    https://transferhwang.tistory.com/48

     

    [PHP] 게시판 만들기 - 회원가입 구현

    이번 프로젝트는 다음을 참고하였습니다. http://blog.naver.com/PostList.nhn?blogId=bgpoilkj&from=postList&categoryNo=60 S Writer의 IT NOTE : 네이버 블로그 군무원이 꿈이면서 개발도 하는 대학생의 공간 d..

    transferhwang.tistory.com

    $title과 $content에는 Form 태그 보낸 정보를 post 방식으로 받아와 저장합니다. 글쓰기가 완료되면 안내창을 띄우고 location.href 를 통해 게시판 화면으로 다시 돌아갑니다.

     

    실습 결과는 여러분들이 확인해보시길 바랍니다! 다음 시간에는 추가로 비밀 글 기능 구현을 위한 ck_read.php를 구현해보겠습니다. 부족한 글 봐주셔서 감사합니다 :)

     

    ※ 모르는 사항이나 오류 발견하시면 언제든 댓글 남겨주세요 

     

    PHP 게시판 만들기 시리즈 👇

     

    노력의 천재

    Carpe Diem, Seize the day

    transferhwang.tistory.com

     

    댓글

Designed by Tistory.