15. PHP 게시판 만들기, view 제작 4

2015. 4. 26. 23:28
저자 : Kurien

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

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


이번에는 입력한 댓글을 view.php 페이지에 표시하는 부분을 만들었습니다.

만든건 이틀 전이지만 개인적인 일로 조금 늦어졌네요ㅠ


바로 파일과 코드 설명으로들어가겠습니다.


20150426_project.zip


파일을 받고 압축을 풀어주세요.


<?php

$sql = 'select * from comment_free where co_no=co_order and b_no=' . $bNo;

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

?>

<div id="commentView">

<?php

while($row = $result->fetch_assoc()) {

?>

<ul class="oneDepth">

<li>

<div>

<span>작성자: <?php echo $row['co_id']?></span>

<p><?php echo $row['co_content']?></p>

</div>

<?php

$sql2 = 'select * from comment_free where co_no!=co_order and co_order=' . $row['co_no'];

$result2 = $db->query($sql2);

while($row2 = $result2->fetch_assoc()) {

?>

<ul class="twoDepth">

<li>

<div>

<span>작성자: <?php echo $row2['co_id']?></span>

<p><?php echo $row2['co_content'] ?></p>

</div>

</li>

</ul>

<?php

}

?>

</li>

</ul>

<?php } ?>

</div>

<form action="comment_update.php" method="post">

<input type="hidden" name="bno" value="<?php echo $bNo?>">

<table>

<tbody>

<tr>

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

<td><input type="text" name="coId" id="coId"></td>

</tr>

<tr>

<th scope="row">

<label for="coPassword">비밀번호</label></th>

<td><input type="password" name="coPassword" id="coPassword"></td>

</tr>

<tr>

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

<td><textarea name="coContent" id="coContent"></textarea></td>

</tr>

</tbody>

</table>

<div class="btnSet">

<input type="submit" value="코멘트 작성">

</div>

</form>


짧지만 뭔가 복잡해 보이는건 기분탓일껍니다 ㅠ

이번 코드에서는 두번의 sql 쿼리를 사용해서 2차원 배열을 사용한 것처럼 출력을 했습니다.


이렇게 하는 이유는 1depth 댓글과 2depth 댓글을 함께 출력해야하기 때문입니다.

무슨 말인지 어려울 수 있으니, 이번에도 차근차근 설명드려보겠습니다.


<?php

$sql = 'select * from comment_free where co_no=co_order and b_no=' . $bNo;

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

?>


먼저 comment_free 테이블에서 co_no이 co_order와 같고, b_no이 $bNo인 댓글을 가져옵니다.

write_update에서 에서 co_order는 co_no의 값을 넣어줬는데요.


여기서 co_order는 1depth인 부분에서만 co_no과 같은 값을 갖도록 했습니다.

하지만 아직은 글쓰기 부분에서 2Depth 부분은 수정하지 않았으니 일단은 DB에 직접 데이터를 넣었습니다.



이미지에서 빨간색 부분은 co_order가 1, 초록색 부분은 co_order가 3입니다.

빨간색 부분에서 co_no가 1인 부분은 co_order도 1이므로 1Depth이고, co_no이 2, 5인 부분은 co_order와 다르므로 2Depth입니다.

초록색 부분도 3, 3은 1Depth 4, 3은 2Depth가 되겠죠?


일단은 위에 있는 쿼리로 sql에서는 1Depth 부분을 먼저 가져옵니다.


<div id="commentView">

<?php

while($row = $result->fetch_assoc()) {

?>

<ul class="oneDepth">

<li>

<div>

<span>작성자: <?php echo $row['co_id']?></span>

<p><?php echo $row['co_content']?></p>

</div>


여기서 div로 댓글 부분을 감싸주고, ul과 li 태그로 댓글 부분을 나타냈습니다.

여기서 $row['co_id']는 댓글을 남긴 사람의 id, $row['co_content']는 댓글 내용을 나타냅니다.


<?php

$sql2 = 'select * from comment_free where co_no!=co_order and co_order=' . $row['co_no'];

$result2 = $db->query($sql2);

while($row2 = $result2->fetch_assoc()) {

?>

<ul class="twoDepth">

<li>

<div>

<span>작성자: <?php echo $row2['co_id']?></span>

<p><?php echo $row2['co_content'] ?></p>

</div>

</li>

</ul>

<?php

}

?>

</li>

</ul>

<?php } ?>

</div>


그 아래는 또 하나의 sql이 있습니다.


이 부분은 2Depth의 댓글을 출력하는 부분입니다.

1Depth를 출력하는 while문 안에 한번 더 while문이 있는데요,

이번에는 co_order가 $row['co_no'](1Depth의 댓글 번호)와 같고 co_no이 co_order와 다른 것을 찾게됩니다.


sql을 통해서 찾은 결과는 ul li 태그를 한번 더 출력해줍니다.



순서대로 하면 먼저 댓글을 출력한 후, 그에 따른 댓글들을 출력합니다.

여기까지 댓글 뷰 부분이였습니다.


현재 상황은 http://kurien.dothome.co.kr에서 볼 수 있고,

어려운 부분은 댓글에 남겨주세요!