요기보드3   필수기초 선택과목 요기보드 그누보드 로그인

요기보드 Ver.3


bbs_view.php

이번에는 회원이 올린 게시글을 읽는 코드를 점검해 볼거야.
이미 전체적인 코드의 흐름을 배웠으니 비교적 쉽게 이해할 수 있겠지?

게시글보기는 notice.php 나 free.php 같은 게시판 메뉴에 들어 갔을때 게시글 리스트에 링크를 통해 들어 오게 돼.
즉 bbs.php 에서 리스트를 만들면서 제목에 아래와 같은 링크를 만들어서 제목을 클릭하면 게시글 보기 화면으로 들어 오게 되는 거야.

<a href="/free.php?mode=view&bno=9&page=1">방금 가입했어요..</a>
게시글 제목인 '방금가입했어요'를 클릭하면 a 태그에 따라 free.php 뒤에 GET변수로 mode=view 와 bno=9 를 넘겨 주잖아.
그러니 bbs.php 에서 case 'view' 자리로 이동하게 되겠지?
그 자리부터 한 번 보자구.


case 'view'   :
    if (!isset($_GET['bno'])) {
        echo '<script>alert("잘못된 글번호 입니다!"); </script>';
        echo '<script>location=" '. $_SERVER['PHP_SELF'] .' "</script> ';
        exit;
    }
    if ($_SESSION['sslevel'] < $read_level) {  // 사용자 레벨이 게시판 글읽기 권한 보다 작으면
        echo '글읽기 권한이 없습니다.';
        exit ;
    }
    $bno = $_GET['bno'];
    $mode = '?mode=view&bno='.$_GET['bno'].'&'.$pre_url ;
    //-- 댓글 입력저장(추가만)...
    if(isset($_POST["cmt-submit"])) {
        $action = 'cmt-add';
        save_bbs($action, $bno, $catno, $mode, $isAlbum); //-- 댓글 추가내용 저장함수 (수정은 위 $action = edit 에서..)
    }

    $bno = $_GET['bno'];
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die('DB 접속에러!');
    $query = "SELECT `datetime`, `subject`, `content`, `uno`, `linkfile`, `cmt`, `hit`, `writer` FROM yg_bbs WHERE bno = $bno" ;
    $result = mysqli_query($dbc, $query) or die('DB 쿼리에러-bbs.php');
    $row = mysqli_fetch_array($result) ;
    $uno = $row['uno'];
    $linkfile = $row['linkfile'];

    $hit = $row['hit'] + 1 ; // 조회수를 1 증가
    $query = "UPDATE yg_bbs SET hit='$hit' WHERE bno = $bno" ;
    $result = mysqli_query($dbc, $query) or die('DB 조회수 변경에러');
    //**************************************************************
    include_once(YOGI_DIR .'/bbs_view.php'); // 게시글과 댓글 보기
    //**************************************************************
    break;

먼저 인자로 bno 가 들어 왔는지 확인하고 없으면 알람 메시지를 주고 바로 빠져 나가.
그리고 이 게시판의 읽기권한이 사용자의 권한 보다 크면 역시 메시지를 주고 빠져 나가도록 했어.
그리고 $bno 변수에 GET 으로 받은 게시글 고유번호인 bno 를 받아서 저장했어.

▶ if(isset($_POST["cmt-submit"])) {
여기서 $_POST["cmt-submit"]는 게시글 보기 하단에 있는 댓글상자에 글을 쓰고 [댓글저장]을 클릭했을때 오게되는 자리야.
댓글을 입력했으면 우선 저장하고 아래쪽을 처리하도록 했어.
게시글과 댓글을 저장하는 것은 save_bbs() 라는 사용자 함수인데, 저 아래쪽에 가면 코드를 만날 수 있어.
(그 자리는 너무 복잡해서 일단 설명 보류야...ㅎ)

다음은 DB에 접속해서 $bno 에 해당하는 게시글을을 SELECT 문으로 가져오는 내용이야.
이제 이 부분들은 익숙해 졌지?
그리고 다음은 해당 게시글의 조회수에 + 1 을 한 값을 다시 SQL UPDATE 문을 사용해서 수정하고 있어.

$hit = $row['hit'] + 1 ; // 조회수를 1 증가
$query = "UPDATE yg_bbs SET hit='$hit' WHERE bno = $bno" ; // 게시글 수정

마지막으로 bbs_view.php 파일을 include 했는데, 이것이 화면에 출력하는 내용이야.

- bbs_view.php

<?php if (!defined('YOGI')) exit ; // 개별 페이지 접근 불가 ?>
    <div class="w3-right-align"><?php echo substr($row['datetime'],2,14) . '  ' . $row['writer']; ?></div>
    <hr>
        <h6 class="w3-left-align"><?php $subject = $row['subject']; echo $subject;?></h6>
    <hr>
    <?php if (!empty($linkfile)) {
      echo '<div class="w3-center w3-padding-24">';
      echo '<img id="img2" src="'.BBS_IMG_PATH . '/bbs_' . $linkfile.'" class="w3-image">'."\n";
      echo '</div>'; }
    ?>
    <div class="w3-margin w3-padding w3-left-align">
<?php
    echo nl2br($row['content']);  // 본문 내용 출력
    $cmtcnt = $row['cmt'];        // 댓글갯수
?>
    </div>
    <div class="w3-center w3-margin-bottom">
      <a href="<?php echo $_SERVER['PHP_SELF'] . '?'. $pre_url ;?>"><button>목록으로</button></a>
<?php
    if (isset($_SESSION['ssuno'])) {
      if ($uno == $_SESSION['ssuno'] OR $_SESSION['sslevel'] >= ADMIN_LEVEL) {
?>
      <a href="<?php echo $_SERVER['PHP_SELF'];?>?mode=edit&bno=<?php echo $bno;?>&<?php echo $pre_url;?>"><button>수정</button></a>
      <a href="<?php echo $_SERVER['PHP_SELF'];?>?mode=delete&bno=<?php echo $bno;?>&<?php echo $pre_url;?>" onclick="return confirm('삭제하시겠습니까?')"><button>삭제</button></a>
<?php
      }
    }
?>
    </div>
<?php
    if ($isComment == true) { include_once(YOGI_DIR . '/bbs_comment.php'); } //-- 댓글 보기 삽입
    if ($isList == true) { include_once(YOGI_DIR . '/bbs_list.php'); } //-- 하단에 리스트 추가
?>

우선 둘째줄에서 게시글 작성날짜와, 작성자 이름을 우측 정렬로 보여주고, 그 아래 줄에서는 제목을 출력했어.

▶ if (!empty($linkfile))
$linkfile 변수는 게시글 작성시 그림파일을 첨부했으면 이 그림파일의 이름이 저장되어 있어.
그러니 $linkfile 이 있으면 그림을 맨 위에 먼저 보여 주게 되겠지.

▶ echo nl2br($row['content']
본문의 내용을 echo 로 출력하면서 nl2br() 함수를 거쳐서 출력하고 있어.
nl2br() 함수는 게시글 내용에 사용자가 Enter를 쳐서 줄이 바뀌는 곳에 <br>코드를 삽입하는 함수야.
여러분도 알다시피 Html 에서는 <br>태그가 없으면 모든 줄이 붙어서 보이잖아.
그러니 그냥 내 보내면 작성자는 열심히 Enter 로 줄 띠워서 입력했는데 볼 때는 다 붙어 보이면 이상해 보일 것 아냐.
그때 이 함수를 통과하면 새 줄을 만나는 곳에는 자동으로 <br> 코드를 삽입해서 출력하게돼.
nl2br 이라는 이름은 NewLine to(2) <br>의 의미로 생각하면 기억하지 좋겠지?

그 아래 쪽에는 [목록으로] 버튼을 두고, 또 게시글 작성자 본인이거나 관리자면 [수정][삭제] 버튼도 보이도록 처리했어.
일반회원이 다른 사람의 게시글을 임의로 수정, 삭제하면 안되겠지?

▶ if ($isComment == true) { include_once(YOGI_DIR . '/bbs_comment.php')
마지막에 $isComment == true 이면 bbs_comment.php 를 불러 오라는 조건문이 있어.
요기보드의 기본설치 상태에서 자유게시판(free.php) 에는 bbs.php 를 불러오기 전에 $isComment = true 가 있었던거 기억나?
그러니까 이 자유게시판에서는 게시글을 볼때 이 변수 $isComment 때문에 본문 아래에 댓글이 보이게 되는거야.

맨 마지막 줄은 다시 if ($isList == true) 로 $isList 변수가 true 이면 댓글 아래쪽에 다시 게시판의 글리스트를 출력하라고 했어.
이 부분에 대해서는 전에 어디선가 설명했지?
bbs_comment.php 는 코드가 약간 되니 다음 장에서 공부해 볼거야.


목차제 목조회
741
481
382
408
417
361
300
300
242
297
321
319
329
182
235
260
208
277