NOTICE

시작하기 전에 일러둘 게 있습니다.
1. 페이징은 없습니다.
2. 문자열 자르기도 없습니다.

게시판의 꽃이라 불리우는 페이징의 경우는 상당한 노력을 기울여야 합니다.
누군가가 만들어 놓은 코드를 그대로 갖다 써도 되긴 하지만 아무래도 자기만의 게시판을 만드려면 페이징까지 하는 게 좋겠죠.
예~ 저는 할 줄 모릅니다. +_+
닥치고 갑니다.

list.php<?
mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("board"); $query = "select * from free";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
   echo $row['userName'];
}
?>

1, 2번째 줄은 앞에서 설명을 했으니 패스하겠습니다.
$query라는 변수는 글쓰기 페이지에서도 나왔었죠.
페이지가 다르니 상관 없습니다.
혹시나 저처럼 궁금해하실까 봐요(-_- 저는 처음에 궁금했음!).

select * from 테이블명
이 부분은 저장한 데이터를 갖고 오는 쿼리문입니다.
제가 만든 게시판 테이블명은 free였으니 free를 넣었습니다.

while(여기) {
   으하하
}

while문은 '여기'에 있는 조건에 맞춰서 으하하를 그만큼 보여줍니다.
한 번 끝나고 다시 한 번 또 하고 그런 후에 또 하고 또 하고 하다가 보면 언젠가 바닥이 보이죠.

echo $row['userName'];
연관배열이니 뭐니 하는 말은 빼겠습니다.
그냥 쉽게 바로 위에 $row라고 이름을 지었고 [] 안에 있는 userName은 board라는 디비에 있는 free 테이블의 칼럼 중에 하납니다.
만약 위에서 $row를 $babo = mysql_fetch_array($result)라고 했다면 여기는 $babo['userName']가 되겠죠.
userName은 칼럼명 그대로 이름을 갖고 오는 것이구요, $row['postTitle']이라고 하면 제목을 갖고 오겠네요.
일단 여기선 echo $row['userName']라고 했으니 결과값을 보겠습니다.



제가 구분자를 안 둬서 그냥 한 줄로 쭈욱 나왔네요.


이제 위 코드를 토대로 게시판(리스트)틱하게 만들어 보겠습니다.

list.php<?
mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("board");

$query = "select * from free";
$result = mysql_query($query);
?>
<table border="1" cellpadding="0" cellspacing="0">
   <tr>
      <td>이름</td>
      <td>제목</td>
      <td>날짜</td>
   </tr>
<?
while($row = mysql_fetch_array($result)) {
?>
   <tr>
      <td><?=$row['userName']?></td>
      <td><?=$row['postTitle']?></td>
      <td><?=$row['wDate']?></td>
   </tr>
<?
}
?>
</table>

위 코드엔 php뿐이 없었는데 여기는 html도 있네요.
그렇습니다.
php로는 html처럼 이쁘게(?) 꾸밀 수가 없습니다.
그래서 html, css, javascript의 힘을 빌리는 거죠.

닥치고 설명 들어갑니다.
6번째 줄을 보시면 ?> 이게 있습니다.
그 다음엔 <table이 시작되구요.
지난 편에 제가 설명을 잠깐 드렸을 겁니다.
html 코드 같은 게 짧은 경우엔 echo로 하되 길 경우엔 echo는 하지 말라고 했었죠.
제 아무리 php가 빠르다 해도 html의 파싱 속도는 따라올 수가 없습니다.
좀 길기 때문에 html 코드를 echo에 넣지 않고 합니다.
그리고 php문이 시작되는 부분은 다시 <? 이걸 넣고 시작을 하는 거구요.

잘 보시면 while() {여기 여기} '여기 여기'에 <tr>~생략~</tr>이 있습니다.
왜 그럴까요?
위에서 설명을 했듯이 (조건문)에 따라서 {여기 여기}가 반복적으로 실행이 됩니다.
만약 여기에 <table>~생략~</table>을 넣었다면??
화면 참 보기 좋게 변했겠죠.
나중에 시도를 해 보세요.

마지막에
<?
}
?>
이건 위에서 while() { 이렇게 열었으니 이제 닫아야겠죠.
만약 안 닫고 저장한 후에 실행을 하면 브라우져에서 이상한 욕을 막 합니다.
무엇이든 열었으면 닫아야 합니다.

이제 저장하고 실행을 하겠습니다.

* <?=~~~?> 여기에서 = 이게 보이죠?
이거는 echo와 같습니다.
<? echo ~~~~ ?> 이것과 <?=~~~~?> 이게 같다는 거죠.
대신 <?이것과 = 이거는 반드시 붙이셔야 합니다.



원했던 결과값이 나왔죠?
비록 리스트 모양이 전문가의 손길을 거치지 않아 러프하게 보이지만...쿨럭;

중요한 게 빠졌죠?
제목을 클릭하면 보기 페이지로 이동을 해야 하는데 링크가 전혀 없네요.

제목이 나오는 부분에 링크를 걸어보겠습니다.

list.php<?
mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("board");

$query = "select * from free";
$result = mysql_query($query);
?>
<table border="1" cellpadding="0" cellspacing="0">
   <tr>
      <td>이름</td>
      <td>제목</td>
      <td>날짜</td>
   </tr>
<?
while($row = mysql_fetch_array($result)) {
?>
   <tr>
      <td><?=$row['userName']?></td>
      <td><a href=""><?=$row['postTitle']?></a></td>
      <td><?=$row['wDate']?></td>
   </tr>
<?
}
?>
</table>

어라?
href="여기" 여기에 넣을 게 없네요.
분명히 링크는 걸어야 하는데 말이죠.
일반적인 게시판에서 리스트의 글을 클릭하면 대개 보기 화면으로 넘어가죠?
우리도 똑같이 만드는 겁니다.

<td><a href="view.php"><?=$row['postTitle']?></a></td>

이렇게 하라고 해서 했는데 view.php 페이지로 가게 되면 내가 어떤 걸 클릭했는지 어떻게 알까요?
링크는 단순히 view.php로 되어 있구요.
사람이라면 내가 몇 번째 제목을 클릭했으니 보기 페이지에서도 몇 번째 글의 정보를 갖고 오게 하면 되겠구나라고 생각을 하겠지만 컴퓨터는??

이제 앞에서 잠깐 언급했던 get을 떠올립니다.
http://localhost/view.php?넌=뭐냐&나는=천재다
꼬리를 잔뜩 달고 댕깁니다.
저 꼬리에서 우리는 필요한 정보를 떼서 쓰면 되구요.
그렇다면 좀 전에 그걸 필요한 정보를 달고 보내겠습니다.
여기서 idx라는 녀석을 하나 투입하겠습니다.
idx라는 녀석에게 우리가 클릭하는 제목의 idx(이 idx값은 우리가 처음에 만든 디비에 있는 idx라는 칼럼명입니다)값을 업혀서 보내겠습니다.

<td><a href="view.php?idx=<?=$row['idx']?>"><?=$row['postTitle']?></a></td>
신기한 게 들어갔죠? 안 신기하면 말구요.

list.php<?
mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("board");

$query = "select * from free";
$result = mysql_query($query);
?>
<table border="1" cellpadding="0" cellspacing="0">
   <tr>
      <td>이름</td>
      <td>제목</td>
      <td>날짜</td>
   </tr>
<?
while($row = mysql_fetch_array($result)) {
?>
   <tr>
      <td><?=$row['userName']?></td>
      <td><a href="view.php?idx=<?=$row['idx']?>"><?=$row['postTitle']?></a></td>
      <td><?=$row['wDate']?></td>
   </tr>
<?
}
?>
</table>

이제 저장하고 바뀐 게 뭔가 살펴 보겠습니다.



앗 상태 표시줄(좌측 하단)에 뭔가 이상한 게 나타났습니다.
http://localhost/view.php?idx=4
제가 asdfasdf에 마우스를 올렸거든요.
저런 제목이 정말 idx값이 4가 맞나 확인해 볼까요?
SQLyog를 켜서 해당 게시판 테이블로 가서 확인을 해 봅니다.



어때요?
맞죠?
여기까지 오셨다면 당신은 이미.....
죄송합니다.
마땅히 생각나는 게 없습니다.

다음 시간엔 보기 화면(view.php)에 대해서 알아보도록 하겠습니다.

* 오타, 틀린 부분은 코멘트로 지적해 주시면 감사하겠습니다.
  1. no picture Favicon of http://wisebody.net BlogIcon 멍충이 2008.11.12 11:41 신고

    정렬하는것도 알려주세요~~ +_+

    • no picture Favicon of http://nyaongnyaong.com BlogIcon 괄리자 2008.11.12 11:47 신고

      정렬 따윈 없습니다. ㅋㅋㅋㅋ
      가서 렙업부터 하세요. ㅋㅋㅋㅋ
      아웃랜드 멧돼지를 잡고 싶지 않으신가요?

  2. no picture Favicon of http://wisebody.net BlogIcon 멍충이 2008.11.12 12:13 신고

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    제대로 찌르시네;;
    빠른말부터 타고 싶어요!!

    • no picture Favicon of http://nyaongnyaong.com BlogIcon 괄리자 2008.11.12 13:39 신고

      빠른 걸 타시려면 열렙을 하셔야 한답니다. +_+
      ㅋㅋㅋㅋㅋ
      으하하~
      미친 듯한 렙업을 해 보아요~
      정말 이따가 제가 접속했을 때 레벨 앞자리가 5가 되어 있길 빕니다.
      후후후