NOTICE

목록 페이지에서 링크를 건 부분 파일이 view.php라서 후다닥 보기 페이지도 진행합니다.
닥치고 ㄱㄱ

어제 리스트에서 링크를 클릭하면 아래와 같은 에러 페이지가 뜰 겁니다.


 
그래도 주소창을 보시면 idx=2라는 게 보이죠?
이제 저 값을 따오겠습니다.

/*
참고로 http://localhost/view.php?idx=2라고 된 부분에 2 말고 다른 거 넣어 보시면 브라우져에 다른 값들이 찍힐 겁니다.
한글을 넣어 보셔도 되고, 영어를 넣어 보셔도 되고~
신기하죠?
안 신기하면 말구요!
저는 처음에 신기했습니다. +_+
*/
 
view.php<?
echo $_GET['idx'];
?>

view.php 파일을 만들어서 그 안에 코드는 저걸 넣어서 다시 list.php 파일에서 제목을 클릭해 보겠습니다.

 

2라는 숫자가 찍혔습니다.
get 방식으로 전송했기 때문에 똑같이 get으로 받아야겠죠.
get으로 보냈는데 post로 받는다고 $_POST['idx'] 이렇게 하면 값이 당연히 안 찍히겠죠.
이제 2라는 값이 넘어왔으니 idx가 2에 해당하는 데이터를 디비에서 갖고 오면 됩니다.

디비에서 데이터를 갖고 오는 게 뭐랬죠?
그렇습니다. select

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

$que = "select * from free where idx = $_GET[idx]";
$res = mysql_query($que);
$row = mysql_fetch_array($res);

echo $row['idx']."<br />";
echo $row['postTitle']."<br />";
echo $row['userName']."<br />";
echo $row['memo']."<br />";
echo $row['wDate'];
?>

자, 완성이 되었습니다.
일단 select, insert 그리고 앞으로 보게 될 delete, update 등등의 쿼리문이 나오면 무조건 디비를 접속해야 한다는 사실 잊지 마세요.

여기서 디비에 접속을 하기 위해서 mysql_connect 함수를 썼고, 해당 디비를 선택하기 위해서 mysql_select_db 함수를 썼습니다(요건 이제 설명 않겠습니다).

$que = "select * from free where idx = $_GET[idx]";
어라?
몇 번 본 녀석 뒤에 못 보던 녀석이 보이네요.
분명 앞에 $que = "select * from free까지는 많이 본 녀석인데 그 뒤는 생소하죠?
where 갖고올테이블내의칼럼명 = 값
원하는 데이터만 꺼내올 땐 where를 써서 갖고 옵니다.
뭐 대충 어설프게 쿼리문을 해석을 하자면
free라는 테이블에서 idx=2에 해당하는 값을 갖고 와라!

왜 idx를 사용하냐구요?
나도 게시판 따위를 만들어 보자스라! - 02에서 제가 설명을 했습니다.

값을 갖고 올 때 제목으로 갖고 와도 됩니다.
다만 제목이 하나라도 같은 게 존재해선 안 됩니다.
근데 그게 가능할까요?
그리고 이름도 중복이 안 될 수가 있을까요?
내용은 같게 쓰는 사람들이 없겠지만 그래도 복사해서 그대로 넣어 버리면 그것도 중복이 될 수도 있죠.
물론 제목, 이름, 내용을 테이블 작성 시에 유니크하게 해 버리면 됩니다만 그렇게 한다면 글을 쓰는 데 있어서 상당히 제한적이겠죠.
그래서 해당 테이블 칼럼 중에서 하나만이라도 유니크한 값을 만드는 겁니다.
우리가 선택한 건 바로 idx였고 idx는 중복이 될 수가 없고 중복이 되어서 insert를 시도한다고 하더라도 에러만 뜹니다.

이제 왜 idx를 썼는지 이해가 조금이라도 가죠?

$row = mysql_fetch_array($res);
"어? list.php에서도 같은 걸 봤는데 거기선 while(여기)에 있었는데 왜 여긴 없나요?"라는 의문을 가질 수가 있습니다(예~~~ 제가 그랬습니다. -_- 제가 좀 멍청하거든요).

list.php에서는 하나의 레코드만 갖고 오는 게 아니라 정해진 조건에 맞춰서 마구 마구 갖고 와야 합니다.
그래서 while이라는 반복문에 넣은 거죠.
그러나 우린 idx=2에 해당하는 값 하나만 갖고 오면 되기 때문에 while이라는 반복문을 쓸 필요가 없다는 거~


수많은 echo 중에 하나만 갖고 설명을 드립니다.
echo $row['postTitle']."<br />";

$row <- 얘가 왜 row냐고 묻지 마세요. 앞에서 설명했습니다.
그리고 왜 자꾸 row로 하냐고 따지신다면 제가 아는 단어가 row뿐이 없어서 그렇습니다.
postTitle은 board라는 디비 내에 free라는 테이블 안에 있는 칼럼명이란 거 아시죠?

근데 뒤에 ."<br />"; 이건 뭔가 궁금하시죠?
.(이하 쩜)의 쓰임새는 대개 변수와 변수를 연결할 때 많이 사용합니다.

<?
$a = "바보";
$b = "오다리";
echo $a.$b;
?>

$a라는 변수와 $b라는 변수를 연결했습니다.
결과값이 어떻게 나오냐구요?
바보오다리 이렇게 나옵니다. 둘이 사이좋게 붙어서~

그냥 echo $a$b;라고 하면 안 되냐고 저처럼 실험 정신이 투철한(-_-) 분들은 테스트를 하실 겁니다.
에러가 튀어나올 겁니다. 후후후
왜 그러냐고 묻진 마세요.
php가 날 때부터 그랬습니다.


그리고 지금 저기처럼 php 구문에 php 구문이 아닌 걸 사용할 때 씁니다.
앞에 $row['postTitle']까지는 php 구문이란 걸 아실 겁니다.
근데 뒤에 있는 <br /> 얘는 html이죠.
html을 그대로 써 보세요.
parse error가 나올 겁니다.
저렇게 쩜 안 쓰고 그냥 하겠다 하시면

echo $row['postTitle'];
echo "<br />";

이렇게 해야겠죠.

설명이 끝났으니 이제 실행을 해 보겠습니다.



우핫!
정상적으로 idx=2에 해당하는 값들이 나왔습니다.
이제 이걸 전문가의 손길이 느껴지게 디자인을 해 볼까요?

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

$que = "select * from free where idx = $_GET[idx]";
$res = mysql_query($que);
$row = mysql_fetch_array($res);
?>
<table border="1" cellpadding="0" cellspacing="0">
   <tr>
      <td>제목 : <?=$row['postTitle']?></td>
   </tr>
   <tr>
      <td>글쓴이 : <?=$row['userName']?></td>
   </tr>
   <tr>
      <td>날짜 : <?=$row['wDate']?></td>
   </tr>
   <tr>
      <td>내용 : <?=$row['memo']?></td>
   </tr>
</table>
<a href="list.php">list</a>




정상적으로 나오나요?
비달사순처럼 그러한 전문가까지는 아니지만 아주 세세한 부분까지 디자인을 신경쓴 듯한 느낌이 나타나지 않나요?
예~ 안 나타날 겁니다.
그래도 저는 list도 넣었습니다.
저걸 누르게 되면 목록 페이지로 이동을 합니다! 으하하

위에서 설명을 드렸듯이 주소창에 idx=2라고 된 부분에 2를 다른 숫자로 넣어 보세요.
물론 디비에 해당 idx값을 가진 레코드가 있어야 합니다.


다음엔 내용 수정하는 부분을 보도록 하겠습니다.


* 오타, 틀린 부분은 코멘트로 지적해 주시면 감사하겠습니다.