Information Security

12 게시글 목록 출력 본문

Web Hacking/Web 기초

12 게시글 목록 출력

leeeeye321 2017. 11. 29. 13:09

★ main.php에서 게시글 목록 출력

-메인 페이지에 게시글 목록을 출력해 볼 것이다.

-일단 DB에서 board 테이블의 모든 데이터를 가져오는 쿼리를 sql 변수에 저장한다.

-> 그리고 mysql_fetch_array() 함수를 사용해서 쿼리의 실행 결과 중 한 행을 배열 형태로 가져온다.

 

※ mysql_fetch_array() 함수

msql_fetch_array  Fetch row as array

http://php.net/manual/en/function.msql-fetch-array.php

 

현재 board 테이블에 저장되어 있는 게시글은 위와 같다.

 

main.php 페이지의 소스를 보면 select * from board;의 결과 중 한 행만 배열 형태로 가져온 것을 확인할 수 있다.

 

mysql_fetch_array() 함수를 한번 더 호출하면 다음 행을 가져온다.

 

$row 배열을 사용하여 게시글의 목록 중 한 행을 출력한다.

 

 

-게시글은 수십 수백개가 될 것이므로 while 문을 사용하여 게시글 목록을 출력해야 한다.

-$row 변수를 조건문에 넣으면 mysql_fetch_array() 함수로 인해 한 행(한 게시글)씩 출력하다가 DB에 저장된 게시글을 모두 출력하여서 $row 변수에 아무 값도 들어가지 않을 때 false로 동작하여 while 문을 빠져나올 것이다.

 

게시글을 더 작성했다. 모두 출력되었다.

 


 

☆ 게시글 목록 10개씩 출력하기

-게시글을 한 화면에 10개씩 출력하고, 목록 아래에 링크를 추가하여 다음 페이지로 넘어갈 수 있도록 구현할 것이다.

 

-일단 select 문 실행 결과의 행 수(게시글 수)를 tmp 변수에 저장한다.

-> 게시글 수를 10으로 나눈 결과를 정수(int)로 형 변환한다. 

-게시글 수를 10으로 나눈 나머지가 0이 아니라면 if 문에 참으로 동작하여 total_cnt(페이지 수) 값이 증가할 것이다.

ex) 만약 게시글이 35개라면 total_cnt에 35/10=3이 저장되고, 나머지는 5이므로 if 문에 참으로 동작하여 값이 3+1=4가 될 것이다.

 

-위에서 변수를 정의해 줬으니 이제 페이지를 넘길 링크를 설정해야 한다.

-for 문을 통해서 total_cnt 변수의 값만큼 링크를 생성한다.

 

-메인 페이지의 $_GET[no]에 i 변수의 값을 전달한다.

-for 문이 수행되면서 제일 먼저 i의 값 0이 전달되고 if 문에서는 거짓으로 동작된다.

$sql = "select * from board order by no desc limit 10";

-> 해당 select 문이 sql 변수에 저장된다.

-> 최근에 쓴 글이 맨 위에 위치해야 하므로 order by desc(내림차순 정렬)을 쿼리에 추가한다.

 

-그리고 i의 값이 증가하면서 if 문에서 으로 동작할 것이다.

$offset = $_GET[no] * 10;
$sql = "select * from board order by no desc limit $offset, 10";

-> 전달받은 i의 값을 10에 곱해서 offset 변수(출력하는 결과의 시작점)에 저장한다.

-> offset 변수의 값부터 10개의 글을 반환하는 쿼리이다.

 

위에서 설명한 코드의 전체는 위와 같다.

i=0

-> $_GET[no]=0

-> if(isset($_GET[no])) -> False

-> $sql = "select * from board order by no desc limit 10";

 

i=1
-> $_GET[no]=1

-> if(isset($_GET[no])) -> True

-> $offset = 10 * 1 = 10

-> $sql = "select * from board order by no desc limit 10, 10";

 

i=2

-> $sql = "select * from board order by no desc limit $20, 10";

 

.....

.....

for 문은 위와 같이 동작한다.

-> sql 변수에 쿼리가 저장되고 해당 쿼리의 실행 결과가 ret 변수에 저장된다.

-> 이 ret 변수는 또 mysql_fetch_array() 함수에 들어간다.

-> while 문에 의해 게시글을 10개씩 출력한다.

 

지금 board 테이블에 저장되어 있는 게시글은 총 11개이다.

 

1페이지

 

2페이지

-> main.php 페이지에 접속한 결과 게시글이 11개이므로 1페이지에 10개, 2페이지에 1개 출력된 것을 확인할 수 있다.

※ 이렇게 게시글 목록 출력을 완료했고, 이제 게시글 수정, 삭제만 구현하면 게시판이 완성된다. to be continued....