[질답게시판 만들기] 08. write.php

08. write.php

 

게시판 글작성/수정을 담당하는 페이지입니다.

같은 페이지이지만 GET 패러미터로 idx 값을 가지고 넘어오면 수정, 없으면 신규작성 페이지로 사용합니다.

 

<?php
include_once "_head.php";

// idx 값이 넘어왓을경우엔 글 수정으로 처리한다.
if(isset($_GET['idx']) && $_GET['idx'])
{
	$post_idx = $_GET['idx'];
	
	// 해당 게시글의 정보를 가져온다.
	$query	= "SELECT * FROM `tbl_board_post` WHERE `post_idx` = '{$post_idx}' AND `post_status` = 'Y'";
	$result = $dbcon->query($query);
	$view	= $result->fetch_array();
	
	// 수정일경우엔 비밀번호를 체크해야하므로 세션을 확인하여 비밀번호 체크
	if( ! $_SESSION['post_check_'.$post_idx] ) 
	{
		// 현재 URL을 구해온다.
		$reurl = urlencode(current_url());  // 패스워드 입력후 다시 돌아올 URL
		header('Location: password.php?idx='.$post_idx.'&reurl='.$reurl, TRUE);	// 패스워드 입력폼으로 이동
	}
}
?>

PHP 부분입니다.

$_GET[‘idx’] 값이 넘어왓을때만 수정으로 인식하며,

수정일 경우엔 기존데이타를 가져옴과 동시에,

수정권한이 있는지 확인하기 위해 비밀번호 체크를 합니다.

 

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.css">

<form method="post" action="<?=BASEURL?>/write_ok.php" autocomplete="off" class="form-horizontal">
	<input type="hidden" name="post_idx" value="<?=$post_idx?>">
	<div class="panel panel-default">
		<div class="panel-heading">
			<h4 class="panel-title">글쓰기</h4>
		</div>
		<div class="panel-body">
			<div class="form-group">
				<label class="control-label col-xs-2">제목</label>
				<div class="col-xs-8">
					<input type="text" class="form-control" name="post_title" maxlength="255" required value="<?=$view['post_title']?>">
				</div>
				<div class="col-xs-2">
					<div class="checkbox">
						<label><input type="checkbox" value="Y" name="post_is_secret" <?=($view['post_is_secret']=='N')?'':'checked'?>>&nbsp;비밀글</label>
					</div>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-xs-2">작성자</label>
				<div class="col-xs-4">
					<input type="text" class="form-control" name="mem_nickname" maxlength="15" required value="<?=$view['mem_nickname']?>">
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-xs-2">비밀번호</label>
				<div class="col-xs-4">
					<input type="password" class="form-control" name="mem_password" required>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-xs-2">내용</label>
				<div class="col-xs-10">
					<textarea id="post_content" name="post_content"><?=$view['post_content']?></textarea>
				</div>
			</div>
		</div>
		<div class="panel-footer text-center">
			<button type="submit" class="btn btn-primary">작성완료</button>
			<button type="button" class="btn btn-default" onclick="history.back();">뒤로가기</button>		
		</div>
	</div>
</form>

<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/lang/summernote-ko-KR.min.js"></script>
<script>
$(function(){
	$("#post_content").summernote({
		height : '300px',
		lang : 'ko-KR'
	});
});
</script>
<?php
include_once "_foot.php";

View 부분입니다.

간단하게 사용하기 위해 summernote를 사용하였으며

validation 처리등은 생략하도록 하겠습니다.

한가지 유념히 보셔야 할부분은

<input type="hidden" name="post_idx" value="<?=$post_idx?>">

이부분입니다.

$_GET[‘idx’] 를 통해 값이 들어온다면 value 값에 값이 들어가겠지만

없다면 공백값이 들어가게 됩니다.

이부분을 이용하여 처리페이지에서 신규/수정 여부를 판별하게 합니다.

 

완성된 코드

<?php
include_once "_head.php";

// idx 값이 넘어왓을경우엔 글 수정으로 처리한다.
if(isset($_GET['idx']) && $_GET['idx'])
{
	$post_idx = $_GET['idx'];
	
	// 해당 게시글의 정보를 가져온다.
	$query	= "SELECT * FROM `tbl_board_post` WHERE `post_idx` = '{$post_idx}' AND `post_status` = 'Y'";
	$result = $dbcon->query($query);
	$view	= $result->fetch_array();
	
	// 수정일경우엔 비밀번호를 체크해야하므로 세션을 확인하여 비밀번호 체크
	if( ! $_SESSION['post_check_'.$post_idx] ) 
	{
		// 현재 URL을 구해온다.
		$reurl = urlencode(current_url());  // 패스워드 입력후 다시 돌아올 URL
		header('Location: password.php?idx='.$post_idx.'&reurl='.$reurl, TRUE);	// 패스워드 입력폼으로 이동
	}
}
?>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.css">

<form method="post" action="<?=BASEURL?>/write_ok.php" autocomplete="off" class="form-horizontal">
	<input type="hidden" name="post_idx" value="<?=$post_idx?>">
	<div class="panel panel-default">
		<div class="panel-heading">
			<h4 class="panel-title">글쓰기</h4>
		</div>
		<div class="panel-body">
			<div class="form-group">
				<label class="control-label col-xs-2">제목</label>
				<div class="col-xs-8">
					<input type="text" class="form-control" name="post_title" maxlength="255" required value="<?=$view['post_title']?>">
				</div>
				<div class="col-xs-2">
					<div class="checkbox">
						<label><input type="checkbox" value="Y" name="post_is_secret" <?=($view['post_is_secret']=='N')?'':'checked'?>>&nbsp;비밀글</label>
					</div>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-xs-2">작성자</label>
				<div class="col-xs-4">
					<input type="text" class="form-control" name="mem_nickname" maxlength="15" required value="<?=$view['mem_nickname']?>">
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-xs-2">비밀번호</label>
				<div class="col-xs-4">
					<input type="password" class="form-control" name="mem_password" required>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-xs-2">내용</label>
				<div class="col-xs-10">
					<textarea id="post_content" name="post_content"><?=$view['post_content']?></textarea>
				</div>
			</div>
		</div>
		<div class="panel-footer text-center">
			<button type="submit" class="btn btn-primary">작성완료</button>
			<button type="button" class="btn btn-default" onclick="history.back();">뒤로가기</button>		
		</div>
	</div>
</form>

<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/lang/summernote-ko-KR.min.js"></script>
<script>
$(function(){
	$("#post_content").summernote({
		height : '300px',
		lang : 'ko-KR'
	});
});
</script>
<?php
include_once "_foot.php";

 

[catlist id=76 numberposts=14 conditional_title=”PHP 질문과 답변 게시판 만들기” orderby=date]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.