홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
아리랑가요(무료음악채널)
뽕짝아가씨(무료음악채널)
okTrot(무료음악채널)
전통가요(무료음악채널)
미스트롯(무료음악채널)

온라이브스토어(앱다운로드)

환상의뽕짝파티 무료음악
명작트로트메들리 무료음악
트로트메들리관광 무료음악
동영상노래방
가사검색

POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
자동러시 웹플레이어신청

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
mySQL자료꺼내오기
8년 전
자.....지난시간에....

메모입력창까지 만들고 입력까지 되도록 만들어 보았습니다...
근데 입력은 되는데 입력한 내용이 화면에 표시되지는 않았죠?

아직 꺼내오기를 안해서 그렇습니다...-_-;

(php my admin으로 exam_memo라는 테이블의 일반적리스트를 확인하시면 입력한 메모들이 보일겁니다....)

자 그럼 이제 꺼내오기를 해야 하는데.....
DB에서 꺼내오는 쿼리는 select라는 구문을 사용합니다...
sql의 기본구문이죠;;;

select [꺼내올항목] from [꺼내올테이블] where [조건] order by [정렬방법] limit [갯수]

위와 같은 기본형식입니다...
사실 좀더 복잡한 옵션이 더 들어가는데....일단 사용할 것들만 적어 놓아봤습니다...
아무래도 쿼리문에 대해서 따로 공부 하셔야 할것같은데....흠흠...

그럼 이제 우리가 만든 테이블에 적용해볼까요...

select * from exam_memo

위 구문에서 *란...모든것이란 뜻입니다...어디에서? from exam_memo
즉, exam_memo라는 테이블에서 모든것(*)을 꺼내 오라는거죠...

where절이 없는 이유는 아무런 조건이 없기 때문입니다....그야말로 있는대로 죄다 꺼내오는거죠...

select * from exam_memo order by no

order by절에서 no로 주었습니다......그래서 이쿼리로 꺼내오면 no순으로 꺼내옵니다.
우리가 테이블을 만들때 no라는 항목을 만들었었죠....
자동으로 증가되기 때문에 1,2,3,... 이런식으로 증가했을것입니다.
그런데 no순으로 꺼내오면 가장 오래전글 부터 불러오겠죠......

하지만 보통 메모장이나 그런것들은 가장 최근글부터 꺼내온다죠~
그래서 뒤에 desc라는걸 붙입니다....역순...이라는 얘기죠.......내림차순!

asc와 desc가 있는데 asc는 생략할수 있습니다. 그래서 order by no라고만 했다면
order by no asc와 같은 말입니다. no의 올림차순으로 꺼내온다는 거죠..
하지만 order by no desc라고 하면 no의 내림차순으로 꺼내옵니다.

select * from exam_memo order by no desc limit 10

limit 10이라는것은 no의 내림차순으로 10개만 가져온다는 것입니다.
메모가 100개가 있는데 한페이지에 모두 100개를 보여주는건 무리겠죠...
그래서 페이지를 나누고 한페이지에 들어갈 갯수만큼 가져오는 겁니다...일단 10개로 했는데...
처음 10개를 가져온다는 거겠죠?...그럼 다음 10개는 어떻게 가져오나요?....
이렇게 바꿔봅시다...

select * from exam_memo order by no desc limit 10,10

limit [시작위치],[갯수]
이렇게 하면 11번째 글부터 10개를 가져온다는것입니다. 그러니까 2번째 페이지가 되겠죠...
그럼 여기서 페이지 나누는 방법에 대해서 잠깐;;;

좀 @_@복잡하긴 하지만 차근차근 생각해보면.....그리 어렵진 않을겁니다...
-_-;저도 이 로직을 생각하느라 어찌나 많은 삽질을 했는지...

자 보시죠~

전체 39개의 글이 있습니다....
한페이지에 10개의 글이 보여진다면 총 몇페이지가 필요할까요? 계산해 보세요....

네에 4페이지죠....39/10=3...9
3페이지를 쓰고 9개의 글이 남습니다....하지만 이 나머지 9개도 한개의 페이지를 쓰겠죠....
나머지가 1이어도 물론 한개의 페이지를 더 쓰게 됩니다...

결국 총 몇페이지인가를 구하는 식은....
전체페이지를 페이지당 갯수로 나눈몫을 무조건 올림 해준값이 됩니다.
php에서 올림값을 리턴하는 함수는 ceil()입니다
아래와 같은 식이 나오겠죠...

//페이지수 구하는공식
//$total  전체갯수
//$page   페이지당 게시물수
$pagesu = ceil($total/$page); //전체갯수를 페이지당 게시물수로 나눠서 올림

자 그럼 대입해볼까요?

$total=39;
$page=10;
$pagesu=ceil($total/$page);

결과는 $pagesu=4가 됩니다......맞죠?
그럼 전체 4개의 페이지가 나온다는 얘기겠죠....

그럼이제 페이지를 구분해 주는 변수를 하나 만들어 보죠...
$pagenum이라고 하겠습니다 (-_-쥔장맘대로)

$pagenum이 0이면...즉 값이 들어있지 않으면 첫페이지를 보여주게 하고....
1이면 두번째 페이지....2이면 세번째 페이지를 보여주게 해볼까요...

자 그럼 임의로 $pagenum을 정해 주어보겠습니다 @_@눈 크게 뜨시고...


$pagenum=2; //세번째 페이지를 보여줍니다.
$total=39; //전체갯수
$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4

전체 4개의 페이지가 나왔고 세번째페이지를 보기를 원합니다.
쿼리문에서는 limit [시작위치],[갯수]

시작위치를 잡아줘야겠죠...갯수는 $page입니다.(페이지당 갯수니까요)
시작위치는 아래와 같은 식으로 잡으면 되겠쬬~

$start=($page*$pagenum);

대입해 봅시다.....
최초....첫번째 페이지를 볼때는 $pagenum=0입니다. 위식에 대입해보면 $start=0이죠...
그래서 쿼리문은 limit 0,10이 됩니다.
맞죠? 첫번째글부터 10개.....

$pagenum=1일때......대입해보면 (10*1)=10
limit 10,10입니다.....11번째글부터 10개

$pagenum=2일때......대입해보면 (10*2)=20
limit 20,10입니다.....21번째글부터 10개

....

자 이런식으로 나오게 되겠쬬....
정리해봅시다....아래 소스를 보세요...


$pagenum=2; //세번째 페이지를 보여줍니다.
$total=39; //전체갯수
$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum); //가져올 시작위치를 결정합니다.

쿼리문=select * from exam_memo order by no desc limit $start,$page

위 식에서 게시물을 가져올 시작위치와 갯수를 $start와 $page로 받아서 쿼리에 넣어준것입니다.
이렇게 하면 $pagenum에 따라 페이지가 바뀌겠죠...헉헉.....
(이해가 안가시면 다시 잘 머릿속으로 암산을 하면서 보세요...)

그럼 페이지수 결정하는건 여기까지만 하고......
이제 글목록을 가져오는 부분에 대해서 해보도록 하죠....

우선 게시물의 전체갯수를 구해야겠죠....
구하는 쿼리는 아래와 같습니다...

select count(*) from [테이블이름]

count()라는 함수는 mysql에서 제공되는 함수입니다(php랑은 상관없습니다)
열의 갯수를 세는거죠.... 그러니까 총 열의 갯수를 구하고 그것을 select해줍니다.
대입해 볼까요?

select count(*) from exam_memo

이렇게 되겠죠....
그럼 php로 적용해보죠...

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

첫째줄에서 $query라는 변수에 쿼리문을 넣고 두번째 줄에서 mysql_query()함수로 mysql로 보냅니다.
그리고 여기서 mysql_fetch_array()라는 함수는 select된 값을 연관배열로 리턴합니다.
연관배열이란......지난번에 배열을 다룰때 나왔던 것이죠...

보통 배열처럼 $a[0],$a[1]이 아니라 $a[name],$a[title] 과 같이 배열안에 숫자 대신 임이의 단어로 구분하게 해줍니다.
mysql_fetch_array()를 사용하면 select된 항목이 연관배열로 들어갑니다.
select * 로 해주었다면 연관배열에는 우리가 exam_memo를 만들때 넣어주었던...
no,name,memo등이 들어가겠죠...

하지만 select count(*)로 했기때문에 열의 총갯수가 $total["count(*)"]라는 연관배열의 변수로 들어갑니다
일단 이해가 안가실텐데......글 목록 꺼내올때 다시 한번 다루도록 하겠습니다.

암튼 위 문장으로 우리는 입력된 메모의 총 갯수를 $total에 집어 넣었습니다.
그다음으로는 아까 사용했던 식을 이용하여 $start를 구해야겠죠.... 보시죠~

<?
include"connect.php";//DB에 접속

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum); //가져올 시작위치를 결정합니다.
?>

요기까지 입니다.
게시물을 가져올 준비가 다 된거죠?
시작위치($start)와 페이지당 갯수($page)가 정해졌으니 그대로 아래와 같이 쿼리문을 써주면 됩니다.

$query="select * from exam_memo order by no desc limit $start,$page";

$query라는 변수에 다음과 같은 쿼리문을 넣어준것이죠

select(골라라)
*(모든것을)
from(어디에서?)
exam_memo(exam_memo테이블에서)
order by(정렬을)
no(no로해서)
desc(내림차순으로)
limit(제한을)
$start(시작위치부터)
$page(페이지당갯수만큼)

이해가시죠?^^;

$query="select * from exam_memo order by no desc limit $start,$page";
$result=mysql_query($query,$connect);

$result에 mysql_query()함수를 사용한 결과물을 집어 넣었습니다.
그러니까 select한 결과가 $result에 들어가있는거죠....
이제 mysql_fetch_array()를 사용해서 연관배열로 만들면 되겠죠?
그런데 아까랑 다른점이 있습니다. 아까는 한개의 열만 받아들이는 것이고...
이번엔 열이 몇개인진 몰라도 최대한 10개죠....
그래서 최대 10번까지는 반복을 해야 합니다.
때문에 while이라는 반복문을 사용하기로 합니다.....

$query="select * from exam_memo order by no desc limit $start,$page";
$result=mysql_query($query,$connect);
while($data=mysql_fetch_array($result))
{ }

@_@점점 복잡해지죠?....
while($data=mysql_fetch_array($result)) 이부분에서 속 부분부터 볼까요

mysql_fetch_array($result) : 결과물을 연관배열로 만듭니다.
$data=mysql_fetch_array($result) : 연관배열을 $data라는 배열로 정의합니다.
while($data=mysql_fetch_array($result)) : while문으로 반복합니다.

여기서 while문은 무한루프가 아닙니다.
while문이 루프되면서 연관배열에는 가져온 데이터를 한행씩 리턴해줍니다.
그러니까 글이 3개가 있었으면.....while문이 처음 돌때에는 1번글에 대한 연관배열 $data를 보내주고
두번째 돌때는 2번글에 대한 연관배열 $data를 보내주고....세번째에는 3번글.....
이렇게 돌아가겠죠....

for문을 쓸수 있는데도 while을 사용한것은.....while은 종료지점을 정해 주지 않아도
자동으로 모든 행을 리턴하고 나면 종료되기 때문입니다.
그래서 아까의 경우라면 3행까지 리턴하고 종료되겠죠......

자....이해 안되시죠-_-? (외우세요....;;;)

<?
include"connect.php";//DB에 접속

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum); //가져올 시작위치를 결정합니다.

$query="select * from exam_memo order by no desc limit $start,$page"; //꺼내올 쿼리문
$result=mysql_query($query,$connect); //mysql에 요청
while($data=mysql_fetch_array($result)) //결과를 꺼내옴
{ }
?>

이부분 까지 되었습니다.
그럼 이제 { } 에 출력문을 간단하게 넣어볼까요?

echo "$data[memo] <br>";

이런 문장을 넣어보죠....
$data라는 연관배열에서 $data[memo]라는 것은 exam_memo의 memo라는 항목을 꺼내온다는 것입니다.
예를들어 글이 아래와 같이 입력되어 있다고 해볼까요...

[exam_memo테이블]
no name memo
-- ---- ---------
01 test 테스트
02 navy 움하하
03 babo 바보
04 navy 우헤헤

이렇게 4개의 글이 있습니다. -_-a;;;
위의 echo문을 반복문에 넣어서 실행을 하면......
행이 4개니까 4개 모두 출력합니다. limit에서 꺼내올갯수($page)가 10으로 되어있지만...
10보다 작은 4개가 있으므로 4개 모두 꺼내옵니다.....(14개라면 10개만 꺼내오겠죠?)

결과는 아래와 같이 나올겁니다.


우헤헤
바보
움하하
테스트

역순으로 나왔죠?....order by no desc 즉, no의 내림차순이니까...4,3,2,1순으로 나온거죠
$data[memo]를 출력한거니까....memo부분만 출력되었습니다.

좀 눈치빠르신분들은 지금 이 예제로 대충 감을 잡으셨을것 같습니다....
자 그럼~ 좀더 제대로 한번 만들어 볼까요?...

테이블을 구성해 봅시다...

<table border=1>
<tr><td>번호</td><td>이름</td><td>메모</td><td>시간</td></tr>
</table>

위와 같이 각 항목을 셀로 만들어 한행에 4개의 열을 생성했습니다.

번호 이름 메모 시간
---- ---- ---- -----

이렇게 나오는거겠죠?
그럼 DB에서 꺼내오는 echo문을 어떻게 해야 할까요?

echo "<tr><td>번호</td><td>이름</td><td>메모</td><td>시간</td></tr>";

이렇게 해서 돌려주면 되겠죠...물론 안에 들어가는 항목들은 각 변수로 채워줘야 합니다.

echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";

이렇게 해주면 되겠죠....
번호에 $data[no]
이름에 $data[name]
메모에 $data[memo]
시간에 $data[date]
라고 넣어줬습니다.........

그런데 시간은 우리가 DB에 넣을때 유닉스 타임스탬프로 넣어뒀죠...
그래서 알아보기 쉽게 가공해 주어야 합니다.

(년-월-일)로만 가공해 봅시다...

$data[date]=date('y-m-d',$data[date]);

date()함수를 사용해서 $data[date]를 y-m-d형식으로 변경하였습니다.
그럼 이제소스를 정리해 볼까요;;

<?
include"connect.php";//DB에 접속

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum); //가져올 시작위치를 결정합니다.

echo"
<table border=1>
<tr><td>번호</td><td>이름</td><td>메모</td><td>시간</td></tr>
"; //테이블시작

$query="select * from exam_memo order by no desc limit $start,$page"; //꺼내올 쿼리문
$result=mysql_query($query,$connect); //mysql에 요청
while($data=mysql_fetch_array($result)) //결과를 꺼내옴
{
$data[date]=date('y-m-d',$data[date]);//시간가공
echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";//꺼내온것출력
}

echo"</table>";//테이블끝
?>


우리가 write.php라는 파일을 만들때.....
DB에 넣기전에 name과 memo에 addslashes()라는 함수를 적용해줬던 것이 기억나실겁니다.
특수문자에 를 붙여서 DB에 넣었었죠......
이제 꺼내올때는 를 제거해야 겠죠?^^
꺼내올때는 반대로 stripslashes()라는 함수를 사용해 줍니다.

이제 while문 속 {}에만 보도록 하죠;;

{
$data[date]=date('y-m-d',$data[date]);//시간가공
echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";//꺼내온것출력
}

자 여기에 stripslashes()함수를 사용해 줄까요~

{
$data[date]=date('y-m-d',$data[date]);//시간가공
$data[name]=stripslashes($data[name]);//이름에서 제거
$data[memo]=stripslashes($data[memo]);//메모에서 제거
echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";//꺼내온것출력
}

이렇게 해주면 입력할때 "나 '등을 사용했더라도 그대로 이상 없이 꺼내올수 있게 됩니다.
아래 전체 소스를 한번더 보여드리겠습니다.

<?
include"connect.php";//DB에 접속

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum)+1; //가져올 시작위치를 결정합니다.

echo"
<table border=1>
<tr><td>번호</td><td>이름</td><td>메모</td><td>시간</td></tr>
"; //테이블시작

$query="select * from exam_memo order by no desc limit $start,$page"; //꺼내올 쿼리문
$result=mysql_query($query,$connect); //mysql에 요청
while($data=mysql_fetch_array($result)) //결과를 꺼내옴
{
$data[date]=date('y-m-d',$data[date]);//시간가공
$data[name]=stripslashes($data[name]);//이름에서 제거
$data[memo]=stripslashes($data[memo]);//메모에서 제거
echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";//꺼내온것출력
}

echo"</table>";//테이블끝
?>

위 소스를 list.php의 form태그 밑 부분이나 윗부분에 편하신대로 넣어주시면 됩니다.
전 밑에 넣겠습니다.

>>> list.php소스

<form method=post action=write.php>
이름 <input type=text name=name size=10 maxlength=10>  
메모 <input type=text name=memo size=30 maxlength=50>
<input type=submit value=입력>
</form>

<?
include"connect.php";//DB에 접속

$query="select count(*) from exam_memo"; //쿼리문저장
$total=mysql_fetch_array(mysql_query($query)); //쿼리문입력
$total=$total["count(*)"]; //갯수저장

$page=10; //페이지당 갯수
$pagesu=ceil($total/$page); //페이지수를 구합니다. 결과:4
$start=($page*$pagenum); //가져올 시작위치를 결정합니다.

echo"
<table border=1>
<tr><td>번호</td><td>이름</td><td>메모</td><td>시간</td></tr>
"; //테이블시작

$query="select * from exam_memo order by no desc limit $start,$page"; //꺼내올 쿼리문
$result=mysql_query($query,$connect); //mysql에 요청
while($data=mysql_fetch_array($result)) //결과를 꺼내옴
{
$data[date]=date('y-m-d',$data[date]);//시간가공
$data[name]=stripslashes($data[name]);//이름에서 제거
$data[memo]=stripslashes($data[memo]);//메모에서 제거
echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[memo]</td><td>$data[date]</td></tr>";//꺼내온것출력
}

echo"</table>";//테이블끝
?>

>>> list.php소스끝

자 이소스를 실행하시고.......
글을 마구잡이로 넣어줍니다......
많이 넣을수록 좋겠죠~~~;;;
추천추천 : 229 추천 목록
번호 제목
3,020
 [HTML5] <video> - DOM으로 제어하기
3,019
 HTML5 video 태그에서 영상 좌우반전
3,018
 PHP - 특정 태그 및 문자열 추출, 제거
3,017
 [PHP] define과 defined의 차이
3,016
 우클릭 완벽차단 스크립트
3,015
 iframe 높이 100% 맞추기
3,014
 curl 함수를 이용한 HTTP REFERER 변경
3,013
 윈도우10 시스템 파일 및 Dism 검사
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
2,991
 [CSS] - Input clear `X ` 버튼 제거 ( IE, Chrome, Firefox )
2,990
 [Mobile] - 모바일웹 Href 태그속성들
2,989
 [JqueryMobile] - 현재화면의 가로세로 사이즈 구하기
2,988
 [JqueryMobile] - 화면의 가로, 세로 사이즈 구하는 방법
2,987
 jquery로 가로 넓이(width), 세로 높이(height) 자동 조절
2,986
 iframe 높이 jquery로 자동조절하기
목록
추억의가요방(가사포함)
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
세월따라노래따라
가슴시린트로트
트로트쌍쌍파티
7080추억속으로
종합성인가요방
못잊을옛날노래
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
POP TOP BEST

최신인기가요특집
추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.