japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
쉬. 기능붙이기 -2 글 목록보기
조회 : 2,665  


[강좌] php+mysql 게시판 만들기 #쉬-2

안녕하세요. 디망쉬입니다.

날씨가 덥죠? ^^; 더위 조심하세요.

아참. 2000년 7월 4일자로 '쉬'편이 모두 다시 올라왔습니다. 그 이전에 갈무리 하신 분은 새로 갈무리하세요.

------------------------------------------------------------------------------------------------
'쉬'편은 모든 편이 서로 약간씩 관련이 되어 있으므로 모두를 한꺼번에 받으셔서 이 편 저 편 이동하시며 같이
읽는것이 좋습니다.^^;

이유가 각 부분마다 사용하는 변수가 많기 때문에 하나 하나 보시면 이 변수가 뭐에 쓰이는건지 헷갈릴 수
있거든요. 그래서 '쉬-짠1'편에서는 각 부분마다 사용되는 변수를 설명해놓고 있지만, 역시나 더 좋은 방법은 다른 편들을 이동하시며 보는 것입니다. :) '쉬'편의 짠들은 다음과 같으니 별도로 준비하셔서 참조하세요. ^^;



쉬-짠1 : 게시판 만들면서 사용되는 변수 정리 문서
쉬-짠2 : 게시판 만드는데 필요한 약간의 html tag
쉬-짠3 : 게시판 만들면서 만든 사용자 정의 함수
쉬-짠4 : 게시판 만드는데 사용된 php 함수 정리
쉬-짠5 : 게시판 만들면서 필요한 SQL 명령어 정리
------------------------------------------------------------------------------------------------

쉬. 기능 붙이기

b. 글 목록 보기


자~ 이제 죽을 준비하세요. 가장 단순할 거 같은 게시물 리스트는 사실 게시판 중 가장 복잡하고
가장 귀찮은 부분이랍니다. 별로 한 거 없어 보이지만 정말 손이 많이 가는 부분이지요.
기술적으로(?) 손이 많이 가는 부분은 명령을 처리하는 run.php3 라면 잔손 및 편법으로
손이 많이 가는 부분은 바로 게시물 리스트를 보여주는 list.php3 랍니다. ToT

1. 게시물 리스트에 필요한 것들

일단 게시물 리스트에서 필요한 것들이 뭔지 알아야합니다.
여기서 벌써 눈치채신 분들이 계실지 모르겠지만 필요한 것들이란 곧 우리가 직접 만들 함수를 의미합니다. :] 물론 '망-1' 편에서도 거론했듯이 게시판 관련 함수는 function.php3 파일에서 관리하기 때문에
아래의 함수들은 모두 function.php3 에 있겠죠.

1-1. arti_list()
게시물을 입력된 역순으로 출력해주는 함수입니다.
어떻게 하면 글이 입력된 역순으로 글을
가져와서 화면에 뿌려줄 수 있을까요?

간단하죠? 바로 SQL 쿼리로 SELECT 명령을 하면 됩니다.

SELECT * FROM testboard ORDER BY idx DESC;

단지 이것이 전부입니다. 이렇게 하면 테이블의 idx attribute 를 기준으로 해서 데이터를 역순으로 정렬합니다. 물론 testboard 라는 테이블에서요.
여기서 ORDER BY 는 정렬할 기준 attribute 를 정해주고 DESC 는 역순으로 하라는 의미입니다.
정순은 ABC 던가. 긁적 --;

자 그럼 가져온 데이터를 $result 에 넣기로 하고.
이렇게 $result 에 들어온 값을 사용할 수 있게 분류해야겠죠? 그런데
$result 로 들어오는 데이터가 몇 개인지는 알 수 없습니다.
그러니 $result 에 들어간 데이터의 갯수만큼(?) 루프를 돌려서 화면에 반복 출력을 해줘야겠죠?
이해 안가신다구요?
그럼 일단 소스부터 보겠습니다. ^^;
소스를 볼까요?

<?
/*--------------------------
filename : function.php3
--------------------------*/
function arti_list() {
$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

global $board;

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

while($list = mysql_fetch_array($result)) {
echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";
}
}
?>

오호. 뭔가 있어보입니다! 일단 살펴보죠.

function arti_list() {

이건 arti_list 라는 이름의 함수를 사용하겠다고 선언하는 거랍니다. 에구.
생각해보면 프로그래밍 언어에는 뭐가 그리도 선언해주는게 많은지 원. ^^;
하지만 어쩔 수 없죠. 융퉁성 없는 컴퓨터는 사람이 알려주지 않으면 모르니까. ^^

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

이 부분은 이미 설명했으니 넘어가죠. ^^;

global $board;

board 라는 변수를 전역 변수라고 알려주는 겁니다. 이건 뭘 의미할까요?

list.php3 나 fill.php3 파일은 실행될 때 board=testboard 식으로 board 변수에 값을 직접 지정해줍니다.
하지만 function.php3 파일은 list.php3 파일이 내부적으로 가져와 사용하는 파일이죠.
그래서 function.php3의 함수 등은 $board 라는 변수가 있는지 없는지 알지도 못합니다.
그래서 $board 라는 변수는 전역 변수라고 선언해주면 function.php3 를 불러온 실행 파일의 해당 변수를 함께 사용하죠.
표로 볼까요?

: fill.php3 : function.php3:
---------------+-----------+--------------+--
$board 변수 선언 : 선언 했음 : 선언 안함 :
---------------+-----------+--------------+--
$board 사용 가능 : 가능함 : 존재하는지도모름:
---------------+-----------+--------------+--

즉 function.php3 에서는 global $board; 를 해주지 않으면 $board 라는 변수가 존재하는지도 모릅니다.
즉 사용을 못하죠.
global $board; 이 부분을 지우면 분명

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

이 근처에서 에러가 발생합니다. 해당 변수나 테이블을 찾지 못했다고 하죠. :]

더 쉽게 예를 들죠. 디망쉬가 방수르나라는 사람을 에로박과 빙컴에게 소개시켜 주려 합니다.
이때 디망쉬는 에로박에게 직접 방수르나를 소개시켜줘서 방수르나를 알게 되었지요.
그런데 빙컴이 일손이 필요하여 에로박의 집에 방문했습니다. 마침 새로운 일손이 들어왔다는 소식도 접했겠다. 그런데 가서 신참을 부르려하는데 소개 받은 적이 없으니 누군지를 알지 못합니다.
결국 빙컴은 집으로 되돌아가게 되었습니다.

하지만 그 이전에 디망쉬가 에로박에게 일손을 대쓰는(?) 사람들에게 방수르나라는 사람이 에로박의 휘하에(?) 들어가게 되었다고 전체 공지를 해주었다면 그 사람들은 그가 떻게 생긴지는 몰라도 에로박네 집에 가서
방수르나를 불러낼 수는 있을 겁니다.

이때 디망쉬의 전체 공지가 바로 전역 변수를 선언하는 것과 같습니다.
예가 적절치 않지만 그정도로 알아두시면 나중에 더 자세한 이해가
가능하게 되십니다. ^^;

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

이 부분은 $board 변수에 저장된 이름의 테이블에서 idx attribute 를 근거로 데이터를 가져오는데 역순(DESC) 으로 소트한 뒤 $result 에 넣으라는 내용입니다.

while($list = mysql_fetch_array($result)) {

일단 위를 잘게 나눠보죠.

$list = mysql_fetch_array($result)

가져온 값을 사용할 수 있게 해줘야겠죠?
그게 그게 바로 mysql_fetch_array 에요.
mysql_fetch_array() 함수는 '디-4' 에서 이미 설명했었습니다.
그런데 입력된 글, 즉 게시물의 수가 여러 개가 아닌 하나라면 상관이 없는데 여러 개라면 단지 위의 것은
문제가 됩니다. 왜냐하면 바로 하나의 게시물 데이터만 가져오기 때문이죠.
그러니 글 갯수만큼 $list = mysql_fetch_array($result) 부분을 반복시켜야겠죠.
그래서 while 문을 썼습니다.

while($list = mysql_fetch_array($result)) {

$result 의 모든 데이터를 다 읽을 때까지 무한으로 계속 반복되죠. 바로 아래의 내용이.

echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";

이건 단순한 출력문입니다. 일단 $list[num] 으로 글 번호를 출력합니다.
그런 뒤 $list[usrtitle], 즉 글 제목을 출력하고, 그 다음에 작성자명인 $list[usrname] 을
출력합니다.

글을 읽을 때 필요한 데이터가 게시판 이름과 (즉 테이블명) 게시물 절대 번호(no attribute)
입니다. 그래서 view.php3 를 앵커 tag 로 (<a>) 링크시킬 때

?board=$board&no=$list[no]

가 붙는거죠.


자 이것으로서 게시물 리스트를 출력시켜주는 함수 구현이 끝났습니다.
이걸 list.php3 가 function.php3 를 가져와서 사용할 수 있게 하면 됩니다.

<?
/*--------------------------
filename : list.php3
--------------------------*/
require "function.php3";

arti_list();
?>

일단 arti_list() 함수가 들어가있는 function.php3 파일을 require 함수로
읽어옵니다. 그런 뒤 arti_list(); 를
함으로서 함수를 실행시키지요. arti_list();
함수는 function.php3 에서 실행하겠죠?

자. 이제 서버상에서

 

list.php3?board=testboard

 

하면 testboard 게시판(테이블)에 저장된
게시물의 리스트가 출력됩니다. 물론 출력하기
전에 fill.php3 에서 이미 글을 저장했어야
했겠죠?


1-2. get_pagenum()

위에서 우리는 게시물을 단지 전부 가져와
역순으로 출력하기만 했습니다. 하지만 이건
문제가 있겠죠? 만약 글이 1천개라면 1천개를
모두 한 화면에 뿌릴 겁니다. 때문에 우리는
우리가 희망하는 갯수의 게시물만 출력해야
겠죠.

그것을 하려면 일단 전체 글의 갯수와 전체
페이지 수를 알아내야 합니다.

일단 전체 글 갯수부터 알아야합니다. 알아내는
방법은 두 가지입니다. DB 에게 전체 갯수를
구하는 명령어를 보내어 알아내는 방법이 있고
idx attribute 의 가장 마지막 번호를 알아내는
방법이 있습니다. 하지만 전자의 방법이 좀 더
신빙성이 높죠. 하지만 공부하는 강좌이니만큼
두 가지를 모두 알아보죠. ^^; (하지만 후자의
방법은 이미 거론되었었습니다)

1-2-1. COUNT(*)
간단합니다.

SELECT COUNT(*) FROM $board

 

하면 됩니다. 이것이 전체 갯수를 알아내는
방법입니다.

$result = mysql_query("SELECT COUNT(*) FROM $board",$connect);
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");

 

얻어진 전체 글의 갯수를 $tlpn 이라는 배열에서
num 이라는 방에 넣었습니다. 왜 배열로 했냐구요?
전체 갯수 관련은 글만 있는게 아니라 전체
페이지도 있거든요. 그래서 관리 편하게 배열로
한 겁니다. ^^;

1-2-2. idx
이미 run.php3 에서 글을 입력할 때 하는
방법이 나왔습니다.

 

$result = mysql_query("
SELECT MAX(num) AS num, MAX(idx) AS idx,
MAX(no) AS no FROM $board", $connect);

$ist[idx] = mysql_result($result, 0, "idx");
$ist[idx] += 1;

 

바로 이거. 이걸 사용하기 적당하게 고치면

 

$result = mysql_query("
SELECT MAX(idx) AS idx FROM $board", $connect);

$tlpn[num] = mysql_result($result, 0, "idx");

 

하면 되겠죠. 왜 idx 의 가장 큰 수가 전체
글의 갯수가 될까요? 이유는 글이 추가될 때마다
idx 가 1씩 증가되고 글이 삭제될 때마다 1씩
줄어들기 때문이죠. :)

우리는 전자의 방식을 사용하기로 했으니 이것을
정리해보죠.

<?
/*--------------------------
filename : function.php3
--------------------------*/
function arti_list($tlpn) {
$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

global $board;

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

while($list = mysql_fetch_array($result)) {
echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";
}
}

function get_pagenum() {
global $board, $perpage;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

$result = mysql_query("SELECT COUNT(*) FROM $board",$connect);
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");

return $tlpn;
}
?>

 

자~ 이제 전체 페이지 수를 알아내야 합니다.
그러기 위해서는 이용자가 한 페이지당 몇 개의
글을 출력할 것인지 정해야하죠. 일단 편하게
10 개로 하겠습니다. (이때 사용되는 변수는
$perpage 입니다)

전체 페이지 갯수를 구하려면 어떻게 해야할까요?
전체 글 갯수에서 페이지당 출력할 글 갯수를
나누면 되겠죠? 나눠서 나머지 값이 나오면
나눈 몫에 1을 더하고요.

전체 글 갯수는 $tlpn[num] 입니다. 전체
페이지 갯수는 $tlpn[page] 에 넣어보죠.

if($tlpn[num] % $perpage) {
$tlpn[page]= intval($tlpn[num] / $perpage) + 1;
}
else {
$tlpn[page]= $tlpn[num] / $perpage;
}

 

어래? 단지 6줄 만으로 끝나군요? 자. 설명~!

if($tlpn[num] % $perpage) {

이건 $tlpn[num] 을 $perpage 로 나눈 값,
즉 전체 글 갯수를 페이지당 출력할 글 갯수로
나눈 나머지 값이 0 인지 아니면 0이 아닌
값인지를 체크합니다. 만약 0 이라면 if 문은
거짓(0은 거짓, 0이 아닌 값은 참)으로
판단되기에 else 문으로 넘어가겠죠. 만약
나머지 값이 나온다면 if 문이 실행되구요.

예를 들까요? 전체 글 갯수가 10개라면

 

10 % 10 = 0

 

이 된답니다. 10을 10으로 나누면 1이라는
몫과 0이라는 나머지가 나오죠. 이때 나머지
값이 0 이므로 else { } 이 실행되죠.
어떻게 실행되냐구요?

$tlpn[num] 을 $perpage 로 나눕니다.
10 을 10으로 나누면 1이 나오죠? 즉
글이 10개이며 페이지당 출력될 글 갯수를
10으로 하면 전체 페이지수는 1 페이지가
됩니다.

그런데 만약 전체 글 갯수가 11개가 된다면
상황은 달라지죠.

 

11 % 10 = 1

 

이 됩니다. 11을 10으로 나누면 몫은 1이
되고 1이라는 나머지가 나오죠. 이때 나머지는
1, 즉 0이 아닌 값이 되므로 if 문의 조건은
참이 되어 if { } 내용이 실행됩니다.

즉 $tlpn[num] 을 $perpage 로 나눈 뒤
1을 더하는거죠. 왜 1을 더할까요? 글이
11개라면 11번부터 2번글 까지가 1 페이지
겠죠? 10개 단위로 글을 출력하니까. 그럼
남은 1번 글은 2페이지가 되야합니다. 그래서
나머지 값이 있을 경우는 1을 항상 한 번
더해줘야 하지요.

그런데 처음 본 함수가 나오는군요? 바로
intval(). 요건 '쉬-짠4' 에 나와있심다. ^^;

이렇게 해서 전체 페이지까지 알아봤습니다.
이제 전체 글 갯수와 전체 페이지 갯수를
알아내는 것이 적용된 funtion.php3 를
볼까요?

<?
/*--------------------------
filename : function.php3
--------------------------*/
function arti_list($tlpn, $perpage) {
$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

global $board;

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

while($list = mysql_fetch_array($result)) {
echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";
}
}

function get_pagenum() {
global $board, $perpage;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

$result = mysql_query("SELECT COUNT(*) FROM $board",$connect);
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");

if($tlpn[num] % $perpage) {
$tlpn[page]= intval($tlpn[num] / $perpage) + 1;
}
else {
$tlpn[page]= $tlpn[num] / $perpage;
}

return $tlpn;
}
?>

 

상당히 길군요. ^^; 이정도쯤되면 list.php3
도 약간 추가되고 변경되고 합니다. 소스보죠.

<?
/*--------------------------
filename : list.php3
--------------------------*/
require "function.php3";

$perpage = "10"; // 추가

$tlpn = get_pagenum(); // 추가
arti_list($tlpn, $perpage); // 변경
?>

 

$perpage 가 페이지당 몇 개의 글을 출력할
것인지 구분해주는 변수입니다. 화면에 게시물
리스트를 뿌려주는 함수가 arti_list 이기
때문에 arti_list 함수가 몇 개 단위로
글을 출력할 것인지 알 필요가 있겠죠. 물론
몇 개 단위로 글을 출력하는지는 전체 글 갯수
등이 필요하기 때문에 $tlpn 정보도 함께
보냅니다.

이제 한 번 화면에 제대로 뿌려볼까요? 그전에
전체 글 갯수가 10개가 되도록 글을 입력하세요.
아시죠?

fill.php3?board=testboard

 

^^; 저는 입력하고 list.php3?board=testboard
라고 하니까 아래처럼 나오는군요.

10- 테스트9-디망쉬

9- 테스트8-디망쉬

8- 테스트7-디망쉬

7- 테스트6-디망쉬

6- 테스트5-디망쉬

5- 테스트4-디망쉬

4- 테스트3-디망쉬

3- 테스트2-디망쉬

2- 테스트1-디망쉬

1- 에헤헤-디망쉬

 


케헤. ^^; 자. 이제 희망하는 페이지당
출력 글 갯수대로 글을 뿌려봅시다. 약간
집중하세요. ^^;

1-3. lpp ()

list per page 의 약자입니다. ^^;; 일단
소스부터 보도록 하죠.

function lpp($tlpn, $perpage, $page) {
global $board;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

if(($tlpn[page] > $page) && ($page > 1)) {
$lastpagelist = $tlpn[num] - (($page - 1) * $perpage);

$result = mysql_query("SELECT * FROM $board WHERE
idx <= $lastpagelist
ORDER BY idx DESC LIMIT $perpage", $connect);
}

elseif ($tlpn[page] == $page) { // 맨 마지막 페이지라면..
if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}
elseif ($tlpn[num] == $perpage) {
$lastpagelist = $perpage;
}
else {
$lastpagelist = $page;
}

$result = mysql_query("SELECT * FROM $board
WHERE idx <= $lastpagelist
ORDER BY idx DESC", $connect);
}

elseif ($page == "1") { // 첫 페이지라면..
$result = mysql_query("SELECT * FROM $board
ORDER BY idx DESC LIMIT $perpage", $connect);
}

else {
echo "잘못된 페이지";
exit;
}
return $result;

}

 

쿠헥. 상당히 길죠? 하나 하나 살펴보겠습니다.

 

if(($tlpn[page] > $page) && ($page > 1)) {
$lastpagelist = $tlpn[num] - (($page - 1) * $perpage);

$result = mysql_query("SELECT * FROM $board WHERE
idx <= $lastpagelist
ORDER BY idx DESC LIMIT $perpage", $connect);
}

 

이 부분은 사용자의 현재 페이지가 가장 첫
페이지도 아닌, 그렇다고 맨 끝 페이지도 아닌
중간 페이지일 때입니다. 좀 더 zoom in!

 

if(($tlpn[page] > $page) && ($page > 1)) {

 

난데 없이 변수 하나가 나타났죠? $page 이거요.
이건 list.php3?board=testboard&page=2
식으로 날라오는 값입니다. 이렇게 날라오는
$page 의 값에 의거하여 사용자가 현재 몇
페이지에 있는지 알아내는거죠.

$lastpagelist = $tlpn[num] - (($page - 1) * $perpage);

 

이건 현재 페이지에서 1을 뺀 뒤 페이지당
출력할 글 갯수를 곱한 값을 전체 글 갯수에서
뺀 것입니다. 에구 복잡하죠? 예를 들겠습니다.
페이지당 출력할 글 갯수는 10개이고 전체
글 갯수는 56개입니다. 그리고 사용자는
현재 3 페이지에 있습니다. 그러면 게시판은
몇 번부터 몇 번까지의 글을 출력해줘야
할까요? 1 페이지는 56번부터 47번까지,
2 페이지는 46번부터 37번까지, 그리고
3 페이지는 36번부터 27번까지겠죠.

자. 그럼 게시판은 36번이나 27번 중 하나만
알아내면 됩니다. 저는 여기서 36번을 택했심다.
36번은 어떻게 알아내면 될까요?

바로 위와 같이 하면 되죠. 현재 페이지에서
1을 빼고 페이지당 출력할 글 갯수를 곱한 뒤
나온 값을 전체 글 갯수에서 빼주면 됩니다.

한 번 해볼까요?

 

56 - ((3 - 1) * 10) = 36

 

나오죠? 이렇게 나온 값을 idx 에 기준하여
역순으로 10개 출력하면 36번부터 27번이
출력됩니다. 아참. $lastpagelist 변수는
위의 계산에서 나온 해당 페이지의 가장 끝
번호가 저장되는 변수입니다.

$result = mysql_query("SELECT * FROM $board WHERE
idx <= $lastpagelist
ORDER BY idx DESC LIMIT $perpage", $connect);

 

여기서 중요한 건

WHERE idx <= $lastpagelist

 

입니다. 36 이하의 idx 를 가진 게시물을
가져온다는거죠. 어떻게 가져오느냐.

ORDER BY idx DESC

 

idx 를 기준으로 역순시켜서 가져옵니다.
단 페이지당 출력할 글 갯수만큼만 가져와야
하죠.

LIMIT $perpage

 

$perpage 에 저장된 값만큼 LIMIT, 즉
제한시켜서 가져온다는 겁니다.

다음 부분을 볼까요?

 

elseif ($tlpn[page] == $page) {
if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}
elseif ($tlpn[num] == $perpage) {
$lastpagelist = $perpage;
}
else {
$lastpagelist = $page;
}

$result = mysql_query("SELECT * FROM $board
WHERE idx <= $lastpagelist
ORDER BY idx DESC", $connect);
}

 

위 부분은 사용자의 현재 페이지가 맨 끝
페이지일 때입니다.

 

elseif ($tlpn[page] == $page) {

 

$page 가 뭔지는 알죠? $page 변수의
페이지 번호가 $tlpn[page], 즉 전체
페이지 갯수와 같다면.. 이라고 합니다.
전체 페이지 갯수는 곧 끝 페이지 번호와
동일하겠죠?

 

if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}
else {
$lastpagelist = $perpage;
}

 

이것은 가장 끝 페이지에 글이 몇 개가
있냐에 따른 것입니다.

 

if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}

 

일단 가장 기본형. 전체 글 갯수에서
페이지당 출력할 글 갯수를 나눌 때
나머지 값이 나오면 그 나머지 값을
$lastpagelist 에 넣는겁니다.


else {
$lastpagelist = $perpage;
}

 

이건 그게 아닐 때입니다. 즉 예외
처리죠.

 

$result = mysql_query("SELECT * FROM $board
WHERE idx <= $lastpagelist
ORDER BY idx DESC", $connect);

 

이렇게 해서 얻은 $lastpagelist 를
근거로 값을 가져오면 됩니다. 맨 끝
페이지에서 가져오므로 글 갯수 제한은
굳이 할 필요는 없겠죠?

이젠 사용자의 페이지가 가장 첫 페이지일
때의 경우가 있군요.

 

elseif ($page == "1") {
$result = mysql_query("SELECT * FROM $board
ORDER BY idx DESC LIMIT $perpage", $connect);
}

 

간단합니다. 별도의 조건없이 맨끝에서부터
페이지당 출력할 글 갯수만큼만 글 데이터를
가져오면 끝입니다. :]

그 외의 경우는, 즉 사용자의 페이지가 1,
맨끝페이지 번호, 혹은 그 중간이 아닌 엉뚱한
수일 경우에는 에러를 발생시키면 되겠죠.
-1 이나 맨 끝 페이지 번호보다 더 큰
페이지 번호가 들어올 경우겠죠?


이렇게해서 최종적으로 얻어진 $result 값을
사용하도록 return 으로 반환시켜줍니다.

이제 lpp 함수를 arti_list 함수에서
사용하도록 function.php3 를 조금 고쳐
보죠. :]

<?
/*--------------------------
filename : function.php3
--------------------------*/
function arti_list($tlpn, $perpage) {
$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

global $board, $page; // 수정

$result = lpp($tlpn, $perpage, $page); // 추가

while($list = mysql_fetch_array($result)) {
echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";
}
}

function get_pagenum() {
global $board, $perpage;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

$result = mysql_query("SELECT COUNT(*) FROM $board",$connect);
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");

if($tlpn[num] % $perpage) {
$tlpn[page]= intval($tlpn[num] / $perpage) + 1;
}
else {
$tlpn[page]= $tlpn[num] / $perpage;
}

return $tlpn;
}

function lpp($tlpn, $perpage, $page) {
global $board;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

if(($tlpn[page] > $page) && ($page > 1)) {
$lastpagelist = $tlpn[num] - (($page - 1) * $perpage);

$result = mysql_query("SELECT * FROM $board WHERE
idx <= $lastpagelist
ORDER BY idx DESC LIMIT $perpage", $connect);
}

elseif ($tlpn[page] == $page) { // 맨 마지막 페이지라면..
if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}
else {
$lastpagelist = $page;
}

$result = mysql_query("SELECT * FROM $board
WHERE idx <= $lastpagelist
ORDER BY idx DESC", $connect);
}

elseif ($page == "1") { // 첫 페이지라면..
$result = mysql_query("SELECT * FROM $board
ORDER BY idx DESC LIMIT $perpage", $connect);
}

else {
echo "잘못된 페이지";
exit;
}
return $result;

}
?>

 


음냐아.

 

$result = mysql_query("SELECT
* FROM $board ORDER BY idx DESC",$connect);

 

이 부분이 삭제되고

 

$result = lpp($tlpn, $perpage, $page);

 

가 추가되었군요. ^^; 에구 간결해라.
물론 list.php3 도 약간 고쳐야합니다.

<?
/*--------------------------
filename : list.php3
--------------------------*/
require "function.php3";

$perpage = "10";

if ($page == "") { // 추가
$page = 1;
}

$tlpn = get_pagenum();
arti_list($tlpn, $perpage);
?>

 

간단하죠? 만약

 

list.php3?board=testboard

 

식으로 $page 값이 날라오지 않으면 임의로
$page 는 1 페이지로 해주는거죠. 약간 더
건드려보죠. 화면 하단에 전체 페이지 갯수와
전체 글 갯수를 출력해보겠습니다. 이건 아주
쉬워용. 이미 전체 글 갯수와 페이지 갯수를
구해놨으니께. ^^;

<?
/*--------------------------
filename : list.php3
--------------------------*/
require "function.php3";

$perpage = "10";

if ($page == "") {
$page = 1;
}

$tlpn = get_pagenum();
arti_list($tlpn, $perpage);

echo "전체 페이지 수 : $tlpn[page]
/ 전체 글수 : $tlpn[num]";
?>

 


에고오오. 드디어 마지막이군요. 페이지
번호를 출력시키고 희망 페이지 번호를
클릭하면 해당 페이지로 이동시키는 거.

제가 워낙 숫자 놀이에 약하다보니 (고교
시절 국어가 싫어 이과로 갔는데 수학이
더 싫어지더군요. 그 이후로는 관심 뚝)
이 부분에서 상당히 헤맸던 기억이 나내요.
어흑흑. 제발 다른 초보분들은 저처럼
이 부근에서 헤매느라 이마에 혹 생기도록
맨땅헤 헤딩하는 일 없기를 바랍니다. T_T

일단 어떤 식으로 출력할지 알아볼까요?
간단합니다.

 

[top] ... [3] [4] [5] ... [last]

 

식입니다. 우선 [top] 과 [last] 는
매우 쉽군요. [top] 은 page=1 로
링크시키면 되겠고, [last] 는 page 를
맨 끝 페이지 번호(전체 페이지 갯수)로
하면 됩니다. 문제는 중간이죠.

에. 소스를 보기에 앞서 [1] [2] .. 등은
5개만 출력하겠습니다. 즉

 

[top] [1] [2] [3] [4] [5] [last]

[top] [1] [2] [3] [4] [5] ... [last]

[top] ... [3] [4] [5] [6] [7] [last]

 

뭐 요런 모습이 되겠죠. 자아 소스 나갑니다!


1-4. movepage()


function movepage($page, $numpage) {
global $board, $tlpn;

if ($page == 1) { // 맨 처음 페이지
echo "<b>[Top]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=1">[Top]</a> ";
} // 맨 처음 페이지 끝

$topnear = $page - $numpage;
$lastnear = $page + $numpage;

if ($topnear <= 1) {
$pres = 1;
if ($tlpn[page] <= ($numpage * 2 + 1)) {
$nexs = $tlpn[page];
}
else {
$nexs = $numpage * 2 + 1;
}
}
elseif (($page == $tlpn[page]) && ($tlpn[page] <= ($numpage * 2))) {
$pres = 1;
$nexs = $tlpn[page];
}
elseif ($lastnear >= $tlpn[page]) {
$pres = $tlpn[page] - ($numpage * 2);
$nexs = $tlpn[page];
}
else {
$pres = $topnear;
$nexs = $lastnear;
}

// 이동할 페이지의 가장 처음이 1 페이지보다 클 경우 생략 기호 출력
if ($pres > 1) {
echo "<b> ... </b>";
}

for($i=$pres; $i <= $nexs; $i++) { // 중간
if ($i == $page) {
echo "<b>[$i]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=$i">[$i]</a> ";
}
} // 중간

// 이동할 페이지의 가장 끝이 마지막 페이지보다 작을 경우 생략 기호 출력
if ($nexs < $tlpn[page]) {
echo "<b> ... </b>";
}

if ($page == $tlpn[page]) { // 맨 끝 페이지
echo "<b>[Last]</b> ";
}
else {
echo "
<a href="list.php3?board=$board&page=$tlpn[page]">[Last]</a> ";
} // 맨 끝 페이지 완료
}

 


차근 차근 살펴보겠습니다. ^^;

function movepage($page, $numpage) {

 

여기서 $numpage 는

 

[top] [1] [2] [3] [4] [5] [last]

 

에서 [top] 과 [last] 를 제외한 중간 페이지
번호의 갯수를 지정합니다. $numpage 가 2일
때는 5 개가, 3 일 때는 7 개가 출력됩니다.
$numpage * 2 + 1 이거든요. 이건 소스를
계속 보다보면 설명이 나오니 일단 생략. ^^;
일단은 편의상 $numpage 를 2 로 하죠. (이미
5개 단위로 하기도 했고 ^^;)

 

if ($page == 1) { // 맨 처음 페이지
echo "<b>[Top]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=1">[Top]</a> ";
} // 맨 처음 페이지 끝

 

이건 [top] 관련이군요. 현재 페이지가
1 페이지, 즉 맨 첫 페이지 일 경우
[top] 은 그냥 <b> tag 속성을 먹여서,
에 그러니까 글씨를 굵게만 하여 출력합니다.

 

if ($page == 1) { // 맨 처음 페이지
echo "<b>[Top]</b> ";
}

 

이 부분이죠. 하지만 현재 페이지가 아닐
경우에는 [top] 에 링크를 걸어줘야
합니다. page=1 로요.

 

else {
echo "<a href="list.php3?board=$board&page=1">[Top]</a> ";
} // 맨 처음 페이지 끝

 


이번엔 순서를 살짝 바꿔서 [last] 부터
보겠습니다. (왜? 쉬우니까 ^^;)

 

if ($page == $tlpn[page]) { // 맨 끝 페이지
echo "<b>[Last]</b> ";
}
else {
echo "
<a href="list.php3?board=$board&page=$tlpn[page]">[Last]</a> ";
} // 맨 끝 페이지 완료

 


$page 페이지가, 즉 현재 페이지가
맨 끝 페이지(전체 페이지 갯수)와 같다면
[top] 과 마찬가지로 단지 글씨만 굵게하여
출력합니다.

 

if ($page == $tlpn[page]) { // 맨 끝 페이지
echo "<b>[Last]</b> ";
}

 

하지만 그게 아니라면 page 를
맨 끝 페이지로 하여 링크를 걸어줘야하죠.

 

else {
echo "
<a href="list.php3?board=$board&page=$tlpn[page]">[Last]</a> ";
} // 맨 끝 페이지 완료

 

헤구. 이제 죽었다. 이젠 [top] 과 [last]
중간 구현 방법을 보죠.

$topnear = $page - $numpage;
$lastnear = $page + $numpage;

if ($topnear <= 1) {
$pres = 1;
if ($tlpn[page] <= ($numpage * 2 + 1)) {
$nexs = $tlpn[page];
}
else {
$nexs = $numpage * 2 + 1;
}
}
elseif (($page == $tlpn[page]) && ($tlpn[page] <= ($numpage * 2))) {
$pres = 1;
$nexs = $tlpn[page];
}
elseif ($lastnear >= $tlpn[page]) {
$pres = $tlpn[page] - ($numpage * 2);
$nexs = $tlpn[page];
}
else {
$pres = $topnear;
$nexs = $lastnear;
}

 

이건 일단 화면 출력에 앞서 필요한 계산을
미리 하는 겁니다. $topnear 는 앞쪽
페이지의 첫 번호, $lastnear 는 뒤쪽
페이지의 끝 번호입니다. 에. 말이 굉장히
어색하군요. (흑. 국어는 어려워 T_T)

 

[top] [1] [2] [3] [4] [5] [last]

 

위와 같이 있다면 $topnear 는 1 이 되고
$lastnear 는 5 가 되는 거랍니다.

 

$topnear = $page - $numpage;
$lastnear = $page + $numpage;

 

그럼 이건 이해 되시겠죠? $numpage 는
이동 페이지 리스트의 갯수를 의미합니다.
현재는 $numpage 가 2 죠? 만약 현재
사용자의 페이지가 3 페이지라면 각 각의
계산은 다음처럼 되겠죠.

 

$topnear = 3 - 2;
$lastnear = 3 + 2;

 

즉 $topnear 는 1, $lastnear 는
5 가 됩니다. 만약 현재 페이지가 2
라면? $topnear 는 0, $lastnear 는
4가 되는군요. 물론 이걸 곧바로 사용해서는
안됩니다. 이걸 한 번 더 가공해야합니다.

 

if ($topnear <= 1) {
$pres = 1;
if ($tlpn[page] <= ($numpage * 2 + 1)) {
$nexs = $tlpn[page];
}
else {
$nexs = $numpage * 2 + 1;
}
}
elseif (($page == $tlpn[page]) && ($tlpn[page] <= ($numpage * 2))) {
$pres = 1;
$nexs = $tlpn[page];
}
elseif ($lastnear >= $tlpn[page]) {
$pres = $tlpn[page] - ($numpage * 2);
$nexs = $tlpn[page];
}
else {
$pres = $topnear;
$nexs = $lastnear;
}

 

바로 이거죠.

 

if ($topnear <= 1) {
$pres = 1;
if ($tlpn[page] <= ($numpage * 2 + 1)) {
$nexs = $tlpn[page];
}
else {
$nexs = $numpage * 2 + 1;
}
}

 

일단 $topnear 의 값부터 체크합니다.
$topnear 가 1 이하일 경우가 있겠죠.
예를 들어 사용자의 현재 페이지가 3 이하
일 때는 $topnear 가 -1, 0, 1 이
되니까요. 이럴 때는 $pres 는 1 을
넣어줍니다. 그리고 $nexs 는 한 번 더
체크를 해주죠. 만약 전체 페이지가
5($numpage * 2 + 1, 즉 2 * 2 + 1)
이하일 경우는 $nexs 를 전체 페이지의
수를 넣고, 그게 아니면 이동 페이지 갯수를
출력할 계산 루틴에 맡기는거죠.

이때 잠깐. $pres 와 $nexs 는 뭐죠?
$topnear 를 한 번 더 가공한 것이 $pres,
$lastnear 를 한 번 더 가공한 것이
$nexs 입니다. ^^;

자. 시뮬레이션 해보죠. 현재 전체 페이지
갯수는 4개이고, 사용자의 현재 페이지는
2 페이지입니다. 그러면 $pres 와 $nexs
는 어떻게 나올까요?

 

$topnear = 2 - 2 = 0
$lastnear = 2 + 2 = 4

 

$topnear 가 1이하죠? 그러니 if 문의
명령에 따라서 $pres 는 1 이 됩니다.

 

$pres = 1

 

전체 페이지 수가 4 페이지입니다. 그런데
4 페이지는 5 ($numpage * 2 + 1, 즉
2 * 2 + 1) 이하죠? 그러니 $nexs 는
4가 되겠군요.

 

$nexs = 4

 

이제 $pres 와 $nexs 에 근거하여 반복문을
돌리면 [1] [2] [3] [4] 까지만 출력이
될 겁니다. 즉

 

[top] [1] [2] [3] [4] [last]

 

가 되죠.

그런데 만약 전체 페이지의 수가 6이나 7처럼
5보다 크다면?

 

else {
$nexs = $numpage * 2 + 1;
}

 

의 계산이 적용되겠죠. 즉 $nexs 는
$numpage * 2 + 1 의 값인 5 가 되기에

 

[top] [1] [2] [3] [4] [5] [last]

 

과 비슷하게 출력될 겁니다. 자 다음 부분.

 

elseif (($page == $tlpn[page]) && ($tlpn[page] <= ($numpage * 2))) {
$pres = 1;
$nexs = $tlpn[page];
}

 

이건 사용자의 현재 페이지가 맨 끝 페이지이며
맨 끝 페이지가 4($numpage * 2)이하일 경우에
해당됩니다. 어떠한 경우일 까요?

사용자의 현재 페이지가 맨 끝 페이지인데,
전체 페이지의 갯수가 4개($numpage * 2) 이하일
경우겠죠. 즉 전체 페이지 갯수는 4개 이하이며
사용자의 현재 페이지가 4 페이지일 경우.

이럴 때도 마찬가지로 $pres 에는 1 을 넣어주고
(왜냐하면 전체 페이지가 출력될 이동 페이지 갯수보다
작으므로) $nexs 에는 전체 페이지 갯수를 넣어주면
됩니다.

 

elseif ($lastnear >= $tlpn[page]) {
$pres = $tlpn[page] - ($numpage * 2);
$nexs = $tlpn[page];
}

 

이건 $lastnear 가 전체 페이지 갯수 이상일 때
입니다. 만약 전체 페이지 갯수가 6 개이고
사용자의 현재 페이지가 5일 경우 $lastnear
변수는 7이 되기에 이런 경우에 해당되겠죠.

이경우 $pres 는 전체 페이지에서
4 ($numpage * 2)를 뺀 값이 들어가고
$nexs 에는 맨 끝 페이지가 들어가면 되겠죠.
이러면 아래와 비슷하게 출력될 겁니다.

 

[top] ... [2] [3] [4] [5] [6] [last]

 

계산해보면 $nexs 는 6, $pres 는 2가
됨을 알 수 있습니다.

 

else {
$pres = $topnear;
$nexs = $lastnear;
}

 

그 외의 경우입니다. 즉 사용자의 전체 페이지 갯수가
5개보다 크고, 사용자의 현재 페이지가 4 이상일
경우 정도? 예를 들어 전체 페이지 갯수가 10개이고
사용자의 현재 페이지는 5 페이지라고 한 다면

 

$topnear = 5 - 2
$lastnear = 5 + 2

 

가 되므로

 

[top] ... [3] [4] [5] [6] [7] ... [last]

 

가 될 것입니다.


자.. 여기서 눈치채신 분이 계실려나. 사용자가
이동하길 희망하는 페이지 번호는 항상 가운데에
위치합니다. 만약 사용자가 7 페이지로 이동하면

 

[top] ... [5] [6] [7] [8] [9] ... [last]

 

처럼 되죠. ^^; (전 이렇게 페이지 이동하는게
더 좋아서리 냠 ^___^);

이제 중간 출력하는데 필요한 계산이 끝났습니다.
이제 출력해볼까요?


if ($pres > 1) {
echo "<b> ... </b>";
}

for($i=$pres; $i <= $nexs; $i++) {
if ($i == $page) {
echo "<b>[$i]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=$i">[$i]</a> ";
}
}

if ($nexs < $tlpn[page]) {
echo "<b> ... </b>";
}

 


$pres 가 1 보다 크다면 보기 좋게 ... 정도를
출력하면 좋을 것입니다. 무슨 말인고하면

 

[top] [2] [3] [4] [5] [6] [last]

 

보다는

 

[top] ... [2] [3] [4] [5] [6] [last]

 

정도로 해줘서 [4] 앞에 [1] 이 있다는 걸
알려주자는거죠. 단지 ... 이거 출력입니다.

 

if ($pres > 1) {
echo "<b> ... </b>";
}

아주 간단하죠? 이제 중간 부분!

for($i=$pres; $i <= $nexs; $i++) {
if ($i == $page) {
echo "<b>[$i]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=$i">[$i]</a> ";
}
}

 

위의 계산에서 얻어진 $pres 와 $nexs 를
통해 for 문으로 명령을 반복시킵니다. for 문은
'쉬-짠4' 에 있구요.

그런데 반복 중에 $i 숫자가 현재의 페이지
번호와 같을 경우 [$i] 를 링크 안시키고 그냥
굵게만 출력시킨다고 했습니다. 이건 무슨 말인고
하면

$pres 가 3 이고 $nexs 가 7 이며, 사용자의
현재 페이지가 5일 경우

 

[top] ... [3] [4] [5] [6] [7] [last]

 

뭐 이런 식으로 출력이 됩니다. 그런데 사용자가
이미 현재 5 페이지인데 굳이 [5] 에 또 다시
페이지 번호를 링크 시켜줄 필요가 없죠. 오히려
[5] 를 링크대신 굵게 함으로서 사용자가 현재
몇 페이지에 있는지 알게 할 수 있습니다.

방금 전의 movepage() 함수는 function.php3
에 넣으시면 됩니다. 이제 function.php3 는
아래처럼 될 겁니다.

<?
/*--------------------------
filename : function.php3
--------------------------*/
function arti_list($tlpn, $perpage) {
$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

global $board, $page; // 수정

$result = lpp($tlpn, $perpage, $page); // 추가

while($list = mysql_fetch_array($result)) {
echo "$list[num]-
<a href="view.php3?board=$board&no=$list[no]">
$list[usrtitle]</a>-$list[usrname]<p> ";
}
}

function get_pagenum() {
global $board, $perpage;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

$result = mysql_query("SELECT COUNT(*) FROM $board",$connect);
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");

if($tlpn[num] % $perpage) {
$tlpn[page]= intval($tlpn[num] / $perpage) + 1;
}
else {
$tlpn[page]= $tlpn[num] / $perpage;
}

return $tlpn;
}

function lpp($tlpn, $perpage, $page) {
global $board;

$connect = mysql_connect("localhost","아이디","비번");
mysql_select_db("사용DB명",$connect);

if(($tlpn[page] > $page) && ($page > 1)) {
$lastpagelist = $tlpn[num] - (($page - 1) * $perpage);

$result = mysql_query("SELECT * FROM $board WHERE
idx <= $lastpagelist
ORDER BY idx DESC LIMIT $perpage", $connect);
}

elseif ($tlpn[page] == $page) { // 맨 마지막 페이지라면..
if ($tlpn[num] % $perpage) {
$lastpagelist = $tlpn[num] % $perpage;
}
else {
$lastpagelist = $page;
}

$result = mysql_query("SELECT * FROM $board
WHERE idx <= $lastpagelist
ORDER BY idx DESC", $connect);
}

elseif ($page == "1") { // 첫 페이지라면..
$result = mysql_query("SELECT * FROM $board
ORDER BY idx DESC LIMIT $perpage", $connect);
}

else {
echo "잘못된 페이지";
exit;
}
return $result;

}

function movepage($page, $numpage) {
global $board, $tlpn;

if ($page == 1) { // 맨 처음 페이지
echo "<b>[Top]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=1">[Top]</a> ";
} // 맨 처음 페이지 끝

$topnear = $page - $numpage;
$lastnear = $page + $numpage;

if ($topnear <= 1) {
$pres = 1;
if ($tlpn[page] <= ($numpage * 2 + 1)) {
$nexs = $tlpn[page];
}
else {
$nexs = $numpage * 2 + 1;
}
}
elseif (($page == $tlpn[page]) && ($tlpn[page] <= ($numpage * 2))) {
$pres = 1;
$nexs = $tlpn[page];
}
elseif ($lastnear >= $tlpn[page]) {
$pres = $tlpn[page] - ($numpage * 2);
$nexs = $tlpn[page];
}
else {
$pres = $topnear;
$nexs = $lastnear;
}

// 이동할 페이지의 가장 처음이 1 페이지보다 클 경우 생략 기호 출력
if ($pres > 1) {
echo "<b> ... </b>";
}

for($i=$pres; $i <= $nexs; $i++) { // 중간
if ($i == $page) {
echo "<b>[$i]</b> ";
}
else {
echo "<a href="list.php3?board=$board&page=$i">[$i]</a> ";
}
} // 중간

// 이동할 페이지의 가장 끝이 마지막 페이지보다 작을 경우 생략 기호 출력
if ($nexs < $tlpn[page]) {
echo "<b> ... </b>";
}

if ($page == $tlpn[page]) { // 맨 끝 페이지
echo "<b>[Last]</b> ";
}
else {
echo "
<a href="list.php3?board=$board&page=$tlpn[page]">[Last]</a> ";
} // 맨 끝 페이지 완료
}
?>

 


와우?! 소스가 길어졌습니다. 감당안서군요.
이제 게시물 리스트를 보면 화면 하단에
페이지 이동 부분도 출력시켜보도록 하죠.
list.php3 에 몇 글자만 타이핑하면 됩니다.

<?
/*--------------------------
filename : list.php3
--------------------------*/
require "function.php3";

$perpage = "10";

if ($page == "") {
$page = 1;
}

$tlpn = get_pagenum();
arti_list($tlpn, $perpage);

movepage($page, 2); // 추가

echo "<p>전체 페이지 수 : $tlpn[page]
/ 전체 글수 : $tlpn[num]"; // 수정
?>

 


에고고. 이번 편 끝! 기껏해야 화면 출력 소스라 간단히
넘어갈 거라 생각했는데 생각보다 강좌 분량이 많군요. @_@

일단 기초 부분만 하면 되기 때문에 화면이 이쁘지 않건
어쨌건을 모두 넘어가겠습니다. ^^; 중요한 건 개념을
깨우치는 거거든요. 개념을 잡으시면 이후부터는 매우
쉽게 기능을 붙이시겠죠. :]

요즘 칭찬과 격려의 소리를 많이 받는답니다. 감동이 주룩~
허접한 제 강좌가 도움이 되신다는 여러분들의 격려에
제법 빛을 발하는 기분이더라구요. ^^;

아. 그나저나 한가지 죄송한 말씀을. 7월 1~2일에
'쉬'편 모두를 한 꺼번에 올리려 했는데 제가 최근
일이 많이 주어지게 되어 모두 작성하지 못했습니다.
2일 안에 나머지 3 편을 모두 작성하여 올리겠습니다.
에. 정확히 말하자면 '쉬' 3~5, '쉬-짠' 1~5 니까
총 8편이겠군요. ^^; (도배되겠당 ..)

다음 강좌에서 뵈요.

----------------------------
함께하면 즐거운 사이트들 (-_-; 광고임 -_-;)
http://game.creple.com/delthia
http://creple.com
http://coco.st
----------------------------


- ?! 디망쉬

 

 


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=583


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
디망쉬
E-mail : dimanche@coco.st

Homepage : http://dimanche.coco.st

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.