7. PHP 게시판 만들기, write 제작 3

2015. 4. 8. 00:15
저자 : Kurien

주의: 본 게시판은 보안을 생각하지 않고 만들어졌으므로 실제로 사용되어서는 안되는 코드입니다.

공부할 때 게시판이 이처럼 동작한다는 정도로만 이해해주세요.


오늘은 이미 적었던 글을 수정하는 부분을 제작했습니다.

일단 아래의 파일을 받아주세요.


20150407_project.zip


가장 먼저 수정된 부분은 view.php입니다.

기존의 내용에서 #boardView 내부에 아래의 태그를 추가했습니다.


<div class="btnSet">

<a href="./write.php?bno=<?php echo $bno?>">수정</a>

<a href="./delete.php">삭제</a>

<a href="./">목록</a>

</div>


이 .btnSet에 있는 a 태그 중 수정 부분이 오늘 만들 부분입니다.


새로운 파일을 생성 할 필요 없이 위에 있는 것처럼 write.php와 wrtie_update.php를 한번 더 이용했습니다.

수정된 부분을 확인해봅시다.


<?php

require_once("../dbconfig.php");


//$_GET['bno']이 있을 때만 $bno 선언

if(isset($_GET['bno'])) {

$bNo = $_GET['bno'];

}

 

if(isset($bNo)) {

$sql = 'select b_title, b_content, b_id from board_free where b_no = ' . $bNo;

$result = $db->query($sql);

$row = $result->fetch_assoc();

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>자유게시판 | Kurien's Library</title>

<link rel="stylesheet" href="./css/normalize.css" />

<link rel="stylesheet" href="./css/board.css" />

</head>

<body>

<article class="boardArticle">

<h3>자유게시판 글쓰기</h3>

<div id="boardWrite">

<form action="./write_update.php" method="post">

<?php

if(isset($bNo)) {

echo '<input type="hidden" name="bno" value="' . $bNo . '">';

}

?>

<table id="boardWrite">

<caption class="readHide">자유게시판 글쓰기</caption>

<tbody>

<tr>

<th scope="row"><label for="bID">아이디</label></th>

<td class="id">

<?php

if(isset($bNo)) {

echo $row['b_id'];

} else { ?>

<input type="text" name="bID" id="bID">

<?php } ?>

</td>

</tr>

<tr>

<th scope="row"><label for="bPassword">비밀번호</label></th>

<td class="password"><input type="password" name="bPassword" id="bPassword"></td>

</tr>

<tr>

<th scope="row"><label for="bTitle">제목</label></th>

<td class="title"><input type="text" name="bTitle" id="bTitle" value="<?php echo isset($row['b_title'])?$row['b_title']:null?>"></td>

</tr>

<tr>

<th scope="row"><label for="bContent">내용</label></th>

<td class="content"><textarea name="bContent" id="bContent"><?php echo isset($row['b_content'])?$row['b_content']:null?></textarea></td>

</tr>

</tbody>

</table>

<div class="btnSet">

<button type="submit" class="btnSubmit btn">

<?php echo isset($bNo)?'수정':'작성'?>

</button>

<a href="./index.php" class="btnList btn">목록</a>

</div>

</form>

</div>

</article>

</body>

</html>


먼저 write.php에서 수정된 부분에 대해서 설명드리겠습니다.


//$_GET['bno']이 있을 때만 $bno 선언

if(isset($_GET['bno'])) {

$bNo = $_GET['bno'];

}


이 부분은 <a href="./write.php?bno=<?php echo $bno?>">수정</a>에서 봤던 bno=(번호)를 변수로 받는 부분입니다.

if(isset($_GET['bno'])) {}을 사용한 이유는, 저는 개발할 때 모든 경고가 출력되게 하는데,

이럴 때 $_GET['bno']가 없는 상황(글쓰기 일 때)에는 notice라는 경고나 출력됩니다.


notice 오류는 무시하더라도 거의 정상적으로 동작하지만, 저는 모든 notice를 없애면서 하겠습니다.

어쨋든 이런 방식으로 $_GET['bno']이 존재할 때만 $bNo이라는 변수를 선언하게 됩니다.


if(isset($bNo)) {

$sql = 'select b_title, b_content, b_id from board_free where b_no = ' . $bNo;

$result = $db->query($sql);

$row = $result->fetch_assoc();

}


그 아래 부분을 보면 이번에는 if(isset($bNo)) {}으로 되어있습니다.

이 부분도 위와 비슷한데요, 만약 위에서 $bNo = $_GET['bno'];이 실행 되었다면 isset($bNo) 또한 TRUE이므로 정상적으로 실행됩니다.


여기서는 $bNo이 선언 되었을 때만 DB를 이용해서 기존의 b_title, b_content, b_id의 값을 가져오게 됩니다.


<?php

if(isset($bNo)) {

echo '<input type="hidden" name="bno" value="' . $bNo . '">';

}

?>


조금 내려가면 이 부분이 있습니다.

이번에도 isset($bNo)이니 이 부분은 생략하고 진행하겠습니다.

echo를 통해서 '<input type="hidden" name="bno" value="' . $bNo . '">';를 출력해줍니다.


이 부분을 넣은 이유는 form을 submit 할 때 현재의 bNo(게시판 번호)도 함께 전송하기 위해서입니다.

게시판 번호가 있어야 어떤 글인지를 알 수 있으니까요.


<?php

if(isset($bNo)) {

echo $row['b_id'];

} else { ?>

<input type="text" name="bID" id="bID">

<?php } ?>


여기서는 $bNo이 존재한다면 id만 표시하구요.

$bNo이 없다면 <input type="text" name="bID" id="bID">라는 input 태그를 출력합니다.


글을 수정하는데 글쓴이 아이디가 바뀔 필요는 없잖아요?


value="<?php echo isset($row['b_title'])?$row['b_title']:null?>"

<?php echo isset($row['b_content'])?$row['b_content']:null?>


다음은 이 두 부분입니다.

만약 input 태그에 값을 넣으려면 value="값"을 이용해야 하는데, 수정 시에는 전에 작성했던 내용이 들어가야 하기 때문에 위와같이 적습니다.

a == b ? a : b를 3항 연산자라고 하는데, 만약 a == b가 true 라면 a를, false라면 b를 출력하는 연산이죠.


여기서는 $row['b_title']이 있을 때와, $row['b_content']가 있을 때를 가지고 연산을 실행했습니다.

만약 "글쓰기" 라면 null이 출력될 것이고, "글수정"이라면 $row['b_title'], $row['b_content']가 출력되겠죠.


<?php echo isset($bNo)?'수정':'작성'?>


마지막으로 이 부분입니다.

별거 없이 그냥 $bNo이 있으면 수정, 아니라면 작성이라는 버튼으로 변경해주는 부분입니다.


아무래도 시간이 늦어져서 write_update.php 부분의 설명은 다음 포스팅으로 미뤄야 할 것 같네요.

어려운 부분은 댓글 남겨주시구요, 현재 진행 상황은 http://kurien.dothome.co.kr에서 보실 수 있습니다.


시간 나는대로 쓰고 있으니 기다려주세요^^