6. PHP 게시판 만들기, view 제작 1

2015.04.05 23:53
저자 : Kurien

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

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


이번에는 글을 보여주는 view.php를 제작할 차례입니다.


20150405_project.zip


먼저 위의 파일을 받아서 view.php 부분을 봅시다.


<?php

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

$bNo = $_GET['bno'];


$sql = 'select b_title, b_content, b_date, b_hit, 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="boardView">

<h3 id="boardTitle"><?php echo $row['b_title']?></h3>

<div id="boardInfo">

<span id="boardID">작성자: <?php echo $row['b_id']?></span>

<span id="boardDate">작성일: <?php echo $row['b_date']?></span>

<span id="boardHit">조회: <?php echo $row['b_hit']?></span>

</div>

<div id="boardContent"><?php echo $row['b_content']?></div>

</div>

</article>

</body>

</html>


view.php는 데이터베이스에 있던 데이터를 화면에 보여주는 간단한 코드입니다.

http://kurien.co.kr/project/board/ 에서 글을 하나 클릭해보면 알겠지만,

단순히 view.php로 끝나는게 아니라 http://kurien.co.kr/project/board/view.php?bno=43처럼 bno이라는 값이 존재합니다.

이 bno을 가지고 데이터베이스의 글을 검색, 출력하게 됩니다.


먼저 $bNo = $_GET['bno'];을 적어서 url 뒤의 bno의 값을 변수에 입력합니다.

그 다음 sql문을 만드는데, 여기서 $bNo의 값을 이용해서 하나의 데이터를 지정해줘야합니다.

여기서 b_no은 primary key(기본 키) 였으니 중복되는 값이 없을 것이고, 여기서 지정되는 번호는 단 하나의 게시물을 출력하겠죠?

$sql을 가지고 쿼리를 전송하고, fetch_assoc을 통해서 데이터를 받아옵니다.

여기서 mysqli_fetch_array(), mysqli_fetch_assoc(), mysqli_fetch_row()라는 세 가지의 방식이 있는데요.

세 가지의 차이를 알아봅시다.


먼저 fetch_array()를 통해서 $row라는 변수에 데이터를 받아오게 되면 $row['b_no'] 혹은 $row[0]으로 결과를 출력할 수 있습니다.

fetch_assoc()의 경우에는 $row['b_no']만 가능하고, fetch_row는 $row[0]으로만 출력이 가능합니다.


저는 주로 fetch_assoc()을 쓰는데, fetch_array()의 경우 쓸대없이 하나의 데이터를 두개의 결과로 표시해서 메모리가 낭비 되서 그렇구요,

또 하나의 이유는 fetch_row()를 사용할 경우엔 어떤 데이터를 가리키는지를 쉽게 알기 힘듭니다.


이 부분도 취향이니 원하는대로 사용하시면 되겠습니다.


데이터는 $row 변수에 받아 뒀으니 이제 출력만 남았습니다.

CSS 조금과 HTML을 이용해서 대충 폼을 만들고 거기에 <?php echo $row[키]?>를 통해서 출력했습니다.


입력을 해보신분이 있다면 textarea에서 엔터를 쳤을 때 이상한 점을 발견할 수 있을겁니다.

분명 엔터를 여러번 쳤는데도 view.php에서 보면 띄어쓰기만 한번 되어있는 것처럼 보일꺼에요.


이유를 설명해보자면, 혹시 html을 작성할 때 엔터를 여러번 쳐 본적이 있으신가요?

아무리 엔터를 쳐도 띄어쓰기 한번만 되는 걸 알 수 있습니다.

<br>을 쳐야만 브라우저에서 엔터를 친 것과 같은 효과를 얻을 수 있죠.


여기서도 마찬가지로 엔터를 치기 위해서는 <br>을 사용해야 하지만,

HTML을 모르는 사용자에게 엔터를 쓸 때마다 <br>을 사용하라고할 수 없겠죠.


이런 경우에는 PHP 함수 중 하나인 nl2br이라는 함수를 사용하면 됩니다.

이 부분은 아직 위에 올려둔 파일에는 적용하지 않았구요,

일단은 게시판 형태를 먼저 갖추고 난 뒤에 수정할 부분입니다.


오늘은 여기까지 적도록 하겠습니다!

진행사항이 궁금하시다면 http://kurien.dothome.co.kr로 접속해주세요~

궁금한 사항은 댓글에 남겨주세요!

TAG ,
  1. jaenna 2015.04.07 09:52 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 잘보고 있어요 ^^ 게시판 수정은 언제쯤 볼 수 있을까요?

  2. 2015.05.21 11:23  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  3. 질문이여;; 2015.07.03 10:34 신고  댓글주소  수정/삭제  댓글쓰기

    이게 1번글 2번글 3번글 이런식으로 있는데
    3번글을 지우고 하나의 글을 새로 올리면 다시 3번이 되는게 아니라 4번으로 올라가서 1번 2번 4번 이런식으로 진행되는데 .. 이거 어떠하나여 ??

    • Kurien 2015.07.03 10:39 신고  댓글주소  수정/삭제

      그 방식으로 숫자가 나오게 하려면 코드를 수정하셔야합니다.
      현재 페이지가 1일 때는 (모든 게시물 수 - ((한 페이지에 출력되는 수 + 페이지) - (한 페이지에 출력되는 수 + 페이지))를 해서 현재 페이지 최상단의 번호를 구하셔야 하고,

      for문을 통해서 최상단의 번호부터 한 페이지에 출력되는 수만큼 반복하시면 됩니다.

  4. 55555 2015.07.29 17:36 신고  댓글주소  수정/삭제  댓글쓰기

    금칙어때문에 글을 못남기겠습니다...

  5. bbi9l 2015.08.19 15:39 신고  댓글주소  수정/삭제  댓글쓰기

    여쭤볼게있습니다.. 뷰단에서 에러가나는지..글쓰기 목록 누르기 이벤트 처리는 다 잘되는데 뷰단에서 꼭 에러가나네여; 이번에 올려주신 zip파일에잇는 index write write_update다 수정안된거죠?

  6. 튼튼 2015.10.18 13:35 신고  댓글주소  수정/삭제  댓글쓰기

    $_GET['bno'] 여기에서 bno는 어디서 가지고 온건가요?;;

  7. su 2016.06.28 12:08 신고  댓글주소  수정/삭제  댓글쓰기

    DB 테이블에 정상적으로 들어갔는데요. 왜 no가 no=%2030 이라고 주소창에 이렇게 뜹니다. 넘버 뒤에 %도 붙고 넘버도 엄청 큰 숫자구요. 사실 제가 다음 에디터를 추가했는데, 그것 때문에 그렇다고 생각은 들지 않습니다. 이런 이유에 대해 알고 계신게 있으실까요? 뷰 페이지에서 넘버를 GET 하지 못하고 있습니다. 이유를 모르겠습니다. 일단 컴을 껐다가 켜볼게요.

  8. su 2016.06.28 15:06 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 문제점을 찾았습니다. 그리고 저의 정신나간 컴퓨터 때문에 한동안 골머리를 썩었고요. ㅋㅋ

    다시 한번 감사합니다.

  9. JNH 2016.08.29 14:00 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세여
    $result = mysql_query($sql, $dbconnect);
    $row = $result->fetch_assoc(); 이부분을 혹시

    $result = mysql_query($sql, $dbconnect);
    $row = mysql_fetch_array($result);
    이런식으로 변형줘봤는데
    $row = $result->fetch_assoc(); 이쪽이 계속 에러가나는데.. 혹시
    $row = $result->fetch_assoc(); 이내용을 -> fetch_array 함수로 바꾸려면 어떤식으로하나요ㅠㅠ

    • Kurien 2016.09.06 17:25 신고  댓글주소  수정/삭제

      제가 만든 프로그램은 mysqli를 이용하여 제작되었습니다.

      말씀하신 mysql로 제작하기 위해서는 $row = $result->fetch_assoc();과 같은 부분을 $row = mysql_fetch_assoc($result); 과 같은 mysql 방식으로 변경해주셔야합니다.

  10. 궁그매요 2016.10.24 15:17 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 항상 좋은 자료 너무 잘보고있습니다^^
    다름이 아니오라, 혹시 게시판에서 글을 지우면 번호매기는게 좀 이상한데..
    원래 1234로 있다가 2번째 글을 지우면 134로 나오는데... ㅠㅠ 어떻게 코드를 수정해야하는지..
    혹시 직접 짜주실 수 있으신가요?ㅠㅠ

  11. 안녕하세요 2017.07.18 00:27 신고  댓글주소  수정/삭제  댓글쓰기

    저도 저 부분 메일좀 부탁드려도 될까요??? cnwlcjf1@naver.com 입니다 도움 정말 많이 되는데 시작한지 얼마 안돼서 모르는 부분이 많네요 ㅎㅎ 덕분에 많이 배우고 있습니다!!!

  12. 안녕하세요! 2017.11.22 15:45 신고  댓글주소  수정/삭제  댓글쓰기

    만약 bno=500 이런식으로 주소창을 수정해서 입력했을 때 게시글이 없다고 보여주고 싶은데 빈 제목 빈 아이디 빈 내용 이런식으로 나오네요 ㅠㅠㅠㅠ 혹시 어떻게 코드 수정을 해야하는지 알려주실 수 있나요?
    b_eloved_@naver.com 메일 주소 입니다 ㅎㅎ

    • Kurien 2017.11.22 18:29 신고  댓글주소  수정/삭제

      코드 상단에서 sql을 통해 bno이 500인 게시물이 존재하는지 확인합니다.

      존재하지 않는다면 alert 창을 이용해서 존재하지 않는 글이라는 문구를 띄워준 후, 이전화면으로 이동하게끔 해주시면 될 것 같습니다.