웹마스터 팁

지난 시간에 공개한 소스 코드를 하나하나 설명합니다.
어느정도 주석이 있으니 최대한 스스로 이해를 하는 게 중요합니다.

오늘 다룰 1~27행은 mysql DB에 연결하는 부분과, 프로그램에 필요한 변수를 설정하는 부분, 그리고 bbs 테이블에서 목록을 뽑아내기 위해 sql 쿼리를 날리고(?) 그 결과를 변수에 저장하는 부분 등으로 구성되어 있습니다.

설명의 편의상 14행부터 볼까요. 6~11행에서 선언한 변수는 아래에서 실제 사용될 때 자세하게 설명하기로 하죠.

14행을 보면 $tablename즉 bbs 테이블의 레코드 수를 구하는 쿼리문을 $query변수에 저장한 것입니다.
15행에서 $query문을 실행하여 그 결과값을 $result 변수에 저장합니다.(실패하면 에러 메시지를 표시하고...)

24행의 쿼리문은 bbs 테이블에서 모든 것을 불러오되, number 필드(컬럼)를 기준으로 내림차순으로 정렬하여 표시하라는 문장입니다. 단 $offset행부터 $list_num 개만큼 불러오라는 뜻입니다.
여기서 $offset변수에는 한 페이지의 시작 글 번호가 저장되어 있고, $list_num에는 한 페이지에 표시할 목록의 개수가 저장되어 있습니다.

위 소스 9행을 보면 $list_num10으로 지정되어 있으므로, 한 페이지에 목록의 개수를 10개씩 표시한다는 뜻입니다.
11행에서 $offset에는 $list_num*($page-1)의 값이 저장되도록 되어 있습니다. 이는 현재 페이지 수에서 1을 뺀 값을 $list_num과 곱하여 구한 값입니다. 무슨 뜻일까요?!#$@!#$!@#$

만약 전체 글의 수가 55개라고 가정해 봅시다. 그리고 $list_num(한 페이지에 보여줄 목록의 수)가 10이라고 하면,
1페이지에는 0~9 행이,
2페이지에는 10~19행,
3페이지에는 20~29행,
4페이지에는 30~39행,
5페이지에는 40~49행,
6페이지에는 50~55행까지 표시될 것입니다. mysql 쿼리를 사용할 때 시작하는 레코드 행 번호는 0부터 시작됩니다. (실제 화면에 표시되는 숫자와는 다르죠...)
이것을 다시 표로 그리면 다음과 같습니다.

16행은 참 중요합니다. 이번에 첨 나오죠?
15행에서 쿼리의 결과값을 $result에 저장하였습니다. 그러나 이렇게 저장된 값을 그대로 사용할 수는 없습니다. php에서는 mysql 쿼리를 통해 얻은 결과를 다시 배열 형태로 저장하여 하나씩 불러내어 사용하게 됩니다.
mysql_fetch_row()함수는 쿼리 결과를 배열로 저장하는 기능을 합니다. 예를 들어 위에서와 같이
$row=mysql_fetch_row($result); 와 같이 하였다면,
$row[0]에 실행 결과의 처음 값이 들어가겠죠. 15행의 쿼리 결과는 전체 레코드 수를 구하는 것이므로 하나의 값만 리턴하게 되므로 결국 $row[0]의 값만 있으면 되는 겁니다. 만약 24행에서의 같은 쿼리라면 그 결과로 $row[0], $row[1], $row[2]... 와 같이 차례대로 저장이 될 것입니다. 단 이 함수는 하나의 레코드에에만 해당되므로 여러 레코드의 결과 값을 차례대로 얻을려면 레코드 수만큼 반복해야 합니다.63행은 보면 while 문을 사용하여 레코드 수만큼 반복하여 그 결과값을 배열로 저장하는 예가 되겠습니다.

mysql_fetch_row()와 비슷한 역할을 하는 함수로 mysql_fetch_array() 함수가 있습니다. 63행에서는 이 함수가 사용되었습니다. 다음 시간에 그 차이를 설명하죠.

17행에서 전체 레코드 수를 저장하고, 20~21행에서는 전체 페이지 수와 현재 글 번호를 구합니다.
17행은 위에서 이미 설명드렸으니 생략하고, 20행을 보죠.
17행에서 구한 전체 레코드 수(전체 글 수가 되겠죠)를 한 페이지당 출력될 목록 수 - 위에서 10이라고 정했었죠? 그 수로 나눈 값의 올림 값을 구하는 겁니다. 즉 전체 글 수가 55개라면, 55/10 = 5.5이므로 올림 수이니까 6이 되겠죠.
즉 55개의 글을 모두 표시하려면 6페이지가 필요하다는 겁니다. 왜 6페이지가 필요한 지 그래도 이해가 안되면 위의 도표를 다시 한번 봐주세요.

이번 시간에는 여기까지 설명드리죠.
SQL 문에 대해 자세히 설명드리지 않는 것은, SQL 자체만으로도 많은 설명이 필요하기 때문입니다. SQL 문에 대한 자세한 설명은, '재미로 배우는 오라클(SQL) 입문' 과정을 참조하시기 바랍니다.

이상, 동주아빠 손병목이었습니다.

제목 글쓴이 날짜
[동주아빠] PHP 게시판(27강) - 수정(modify_ok.php) 손병목 2003.01.11
[동주아빠] PHP 게시판(26강) - 수정(modify.php) 손병목 2003.01.11
웹서핑중 구했습니다. 조그만 달력.. [6] file 황선규 2003.01.10
[1분짜리 팁] 절대경로 알아내기! [14] 찐군 2003.01.09
access 자료(mdb) 를 MySQL로 변환하는 방법 [8] 황선규 2003.01.06
[동주아빠] PHP 게시판(25강) - 내용 보기 기능(3) 설명 [1] 손병목 2003.01.04
[동주아빠] PHP 게시판(24강) - 내용 보기 기능(2) view.php 소스 file 손병목 2003.01.04
[동주아빠] PHP 게시판(23강) - 내용 보기 기능(1) view.php 디자인 손병목 2003.01.04
국내 IP정보를 조회하는 클래스 [7] 행복한고니 2003.01.04
이미지를 HTML table tag로 변환. [7] file 민이 2002.12.31
SQL질의어를 DB에 입력하는 팁 [4] 최후의성전 2002.12.31
[동주아빠] PHP 게시판(22강) - 목록 보기(5) list.php 설명(下) [1] 손병목 2002.12.30
[동주아빠] PHP 게시판(21강) - 목록 보기(4) list.php 설명(中) 손병목 2002.12.30
[동주아빠] PHP 게시판(20강) - 목록 보기(3) list.php 설명(上) 손병목 2002.12.30
[동주아빠] PHP 게시판(19강) - 목록 보기(2) list.php 소스 [3] file 손병목 2002.12.29
[동주아빠] PHP 게시판(18강) - 목록 보기(1) list.php 화면 디자인 손병목 2002.12.29
[추천 강의] NZEO.COM 에서 쓰는 북마크 구현하기 [5] 東氣號太 2002.12.28
폼메일 --- 제로님 예전 폼메일 수정 변경.. [11] uropa™ 2002.12.27
[추천 강의] [설명] 304번 글에 대한 설명입니다. [5] [콜록]토끼군 2002.12.25
[동주아빠] PHP 게시판(17강) - 저장 후 페이지 이동 손병목 2002.12.25