웹마스터 팁
[동주아빠] PHP 게시판(21강) - 목록 보기(4) list.php 설명(中)
2002.12.30 12:39
지난 시간에 이어 계속 설명합니다.
29행부터 60행까지는 그냥 HTML 코드입니다. 보면 아시겠죠?
아래와 같이 테이블의 제목 부분에 해당되는 코드입니다.
여기에 이제 글번호, 제목, 작성자 이름, 작성 날짜, 조회수 등의 데이터를 쓰되,
테이블 형식에 맞춰서 써야 합니다.
따라서 62행부터의 코드는 HTML과 PHP 코드가
섞여 있습니다. 눈여겨 보시면서 헤깔리지 않도록 주의하시기 바랍니다.
63행부터 88행까지 하나의 while 제어 블록입니다. while( )
안의 조건이 참인 동안 계속됩니다.
괄호 안의 조건을 보면 $array=mysql_fetch_array($result)
으로,
전 시간에 다뤘던, 24행의 쿼리문을 실행한 25행의 $result값을 배열
형태로 다시 불러와 화면에 표시하는 역할을 합니다.
24.$query="select * from $tablename order by number desc limit $offset,
$list_num"; // SQL 쿼리문
25. $result=mysql_query($query) or die (mysql_error()); //
쿼리문을 실행 결과
mysql_fetch_array()함수는 전 시간에 다루었던
mysql_fetch_row()와 마찬가지로 쿼리의 결과를 배열 형태로 <u>한 줄씩</u>
리턴하는 기능을 합니다.
여기서 중요한 건 <u>한 줄씩만</u>리턴한다는
것입니다.(mysql_fetch_row 함수도 한 줄씩 리턴합니다.)
만약 select * from $tablename; 과 같은 쿼리문을 사용하여 $tablename
테이블의 모든 행을 조회해서 그 결과를 불러들이더라도, 단 한줄씩만 저장한다는
뜻입니다.
따라서 63행부터 88행까지는 24행의 쿼리문을 실행한 결과를 한줄씩
불러내서 화면에 표시하게 됩니다.
쿼리의 결과로 100개의 레코드(행)가 돌아왔다면,
이 함수를 100번 반복해서 하나씩 불러들여야 한다는 것입니다.
while 의 괄호 안의 조건절을 보면 $array=mysql_fetch_array($result)입니다.
즉, <u>쿼리의 결과값이 있을 때까지</u>반복한다는 것이죠.
만약 mysql_fetch_array($result)의
값이 없다면 이 함수는 flase 값을 돌려주면서 $array 역시 false가 되면서
while문이 종료되는 것입니다. (혹시 설명이 어렵더라도 더 이상 쉽게 설명하기 힘드니
그러려니 하고 받아들이시길....)
이렇게 mysql_fetch_arry() 함수의 결과는 배열 형태로 저장됩니다. 따라서 $array[xxx]와
같은 식으로 되겠죠. 여기서 xxx 자리에 무엇이 들어갈까요?
바로 필드(컬럼)
이름이 들어가게 됩니다. 65, 73, 76, 82행에서와 같이 $array[writedate],
$array[subject], $array[name], $array[count] 식으로 쓰면 되는 것입니다.
만약
mysql_fetch_row() 함수를 사용했더라면 $array[0], $array[1],... 등과 같이 숫자를
사용했어야 합니다. 어느 것이 더 편리할지는 쉽게 알 수 있겠죠?
이제 그 차이를
아시겠죠? mysql_fetch_row를 사용해 얻은 배열값을 사용하려면 배열 첨자로 숫자를
써야하고, mysql_fetch_array를 사용해 얻은 배열값을 사용하기 위해서는 실제 컬럼
이름을 사용한다는 것.
65행에는 date() 함수를 볼 수 있습니다. 정해진 형식에 맞게 날짜를 표시해주는
역할을 합니다.
date("Y/m/d",
$array[writetime])는 $array[wirtetime]의 값을 년(Y)/월(m)/일(d)의 형태로
표시하라는 뜻입니다.
67행의 echo 문은 이미 앞에서도 몇 번 나왔으니 아실테고... 단, 여기시 실수하기 쉬운 것이 바로 인용 부호(" ")입니다. 67행에서 " 로 시작한 내용이 84행의 " 로 끝나는 것입니다. 84행에서 " 를 빠뜨리는 실수를 자주하게 되는데 조심하세요. 참, " 뿐만 아니라 ; 역시 빠뜨리기 쉽습니다. 주의!
70행은 현재의 글번호가 저장된 $cur_num를 표시하는 행입니다. 그런데,
앞 시간에 $cur_num에 대한 설명을 빠뜨린 것 같네요.
21행을 봅시다.
21. $cur_num=$total_no - $list_num*($page-1); //현재 글번호
아래의 테이블을 보면서 설명드리는 게 쉽겠네요. 아래와 같이 세 개의 글이 있다고 가정해 봅시다.
그러면
처음으로 표시할 행은 글번호 3번이 되겠지요. 이 3에 해당되는 것이 바로 $cur_num입니다.
그럼,
다시 21행을 보면, 전체 글 수($total_no)에서 $list_num*($page-1)을 뺀
값을 저장합니다. 전체 글 수가 만약 3이라면,
3 - 10*(1-1)이 되겠지요.
지난 시간에 $list_num은 10으로 했고, $page의 기본값이 현재 1인 상태이기 때문입니다.
그러면 결과는 3이 됩니다.
그런데 86행을 보면.
$cur_num -- ;
이것은 $cur_num = $cur_num
- 1 ; 과 동일한 식입니다. 즉 기존의 $cur_num의 값에서 1을 뺀 값이 저장되는
것입니다.
즉 while 문을 한 바퀴 돌 때마다 숫자가 1씩 줄어드는 것입니다.
(반대로
$cur_num ++ ; 라고 했다면 이는, $cur_num = $cur_num + 1; 과 같은 뜻이 됩니다.)
그렇게 되면 위의 테이블과 같이 3, 2, 1과 같이 숫자가 줄어들게 됩니다. (그러나 화면에 표시되는 글 번호는 실제 레코드 번호와는 다릅니다. 실제 레코드 번호는 0부터 시작합니다.)
나머지 행들은 보면 이해가 되시죠?
73행에는 글 제목이, 76행에는 작성자
이름이, 79행에는 65행에서 구한 날짜가, 82행에는 조회수가 표시됩니다.
설명이 좀 부족했나요?
while 문에 대한 기본 설명은, PHP 문법의 기초(3) - 제어문(上)을
참조해 주세요.
이상, 동주아빠 손병목이었습니다.