웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
카운터를 만들어봅시다~ (수정본)
2000.03.08 03:39
드뎌 실전으로 들어갈려구 합니다.
첫번째 실습을 카운터 만들기 입니다.
현재 제 홈에서 사용중인겁니다.
전체, 최고, 최저, 오늘, 어제까지의 카운터가 표시가 됩니다.
그리고 카운터는 쿠키를 이용해서 접속자가 아무리 접속하고 리프레쉬 하더라도 하루에 무조건 한번만 올라가도록 했습니다.
IP를 이용한 방법을 생각해봤으나 모뎀이나 기타 유동 IP사용자들을 체크하기가 어렵고 또 IP 데이타를 갖고 있기 위해서 용량을 소비하는것보다는 쿠키가 낫다는 걍 저의 허접한 생각이 들어서 그랬습니다.
프로그램을 만들기 전에 어케 동작을 하는지 순서대로 알아봅시다.
지금 만들 카운터는 파일을 이용하지 않고 DB를 이용하여 사용을 하게 했습니다.
그래서 첫째로, 카운터 테이블이 만들어져 있는지 검사를 합니다.
만약 없으면 만들면 되고 있으면 넘어가면 되겠죠?
그리고 오늘의 날자를 구한다음 오늘 데이타가 없음 새로 만들죠.
그리고는 쿠키를 체크해서 이미 접속한 사용자면 그냥 카운터만 출력하고 만약 오늘 처음 접속한다면 update 쿼리를 이용해서 카운터를 1을 올리고 카운터를 출력하죠.
원리가 간단한 만큼 소스도 간단하니 걱정마세요.
자 이제 소스제작에 들어가봅시다..
(쩝, 20분만에 만든거라 소스가 허접해두 이해해 주세요~~)
우선 DB설정입니다.
당근 DB를 이용하는 넘이기 때문에 DB 설정을 해주어야 겠죠.
우선 DB설정에 관련된 사항들을 변수로 지정합시다.
<font color=blue>$host_name = "localhost";
$user_name = "계정아듸";
$user_password = "DB암호";
$db_name ="DB아듸";</font>
그리구 DB에 접속하구 자신의 db를 지정해주야 겠죠.
<font color=blue>$connect = mysql_connect($host_name,$user_name,$user_password);
mysql_select_db($db_name, $connect);</font>
그럼 카운터에 사용될 테이블 이름을 zerocount라고 합시다.
zerocount 테이블이 있나 없나 체크를 해야겠죠?
<font color=blue>$result = mysql_list_tables ($db_name);
$i = 0;
$tablelist="";
while ($i < mysql_num_rows ($result))
{
$tb_names[$i] = mysql_tablename ($result, $i);
$tablelist .= "/".$tb_names[$i];
$i++;
}</font>
만약 없으면 만들어야 됩니다.
schema 는 primary key인 id 와 count(접속수), date(날자)로 3개만 설정하면 됩니다.
<font color=blue> if(!eregi("zerocount",$tablelist))
{
$que = "CREATE TABLE zerocount (
id int(11) DEFAULT '0' NOT NULL auto_increment,
count int(11),
date varchar(8),
PRIMARY KEY (id))";
mysql_query( $que, $connect );
} </font>
위에서 보면 !eregi("zerocount",$tablelist) 는 zerocount라는 테이블이 없으면 다음 블럭을 실행하라는 겁니다.
creat 쿼리를 사용해서 id, count, date라는 3개의 스키마를 가진 테이블을 생성합니다.
다음은 오늘의 날자를 구해야죠.
<font color=blue>$td=date("Ymd");</font>
위와 같이 하면 $td 안에는 구분표시 없이 그냥 년도월일이 들어가게 됩니다.
2000년 3월 7일이면 20000307과 같이 입력이 되겠죠?
그리고 우선 id=1 인 행, 즉 젤 첫번째 행을 전체 카운터를 저장하기로 합니다.
이렇게 하지 않고도 전체 숫자를 구할수 있지만 나중에 데이타가 많아지면 느려지겠죠?
그래서 전체 숫자는 따로 지정한겁니다.
우선 id=1 인 행의 데이타를 가져오고, 만약 없으면 추가를 해야겠죠?
<font color=blue>$que="select * from zerocount where id=1";
$result=mysql_query($que, $connect );
$check=mysql_fetch_array($result);</font>
만약 $check의 값이 없다면 아직 id=1인 행이 만들어지지 않았다는 것이기 때문에 새로 만들어야 겠죠.
<font color=blue>if(!$check[count])
{
$que = "INSERT INTO zerocount VALUES ('', 0, '')";
mysql_query($que, $connect );
}</font>
우선 전체 카운터는 0으로 넣는겁니다.
그리고 오늘의 데이타가 있는지를 검사해서 역시 없으면 새로 만들어야 합니다.
<font color=blue>$que="select * from zerocount where date='$td'";
$result=mysql_query($que, $connect );
$check=mysql_fetch_array($result);
if(!$check[count])
{
$que = "INSERT INTO zerocount VALUES ('', 0, '$td')";
mysql_query($que, $connect );
} </font>
자 이제 DB에서의 카운터 테이블 준비는 끝났죠.
그럼 쿠키를 검사해서 한번 이상 접속한 사람인지 아니면 새로 접속하는 사람인지를 알아봅시다.
쿠키값을 알아낼때는 환경변수 $HTTP_COOKIE_VARS 를 쓰면 됩니다.
카운터에 쓰일 쿠키이름을 zerocount 라고 하고 값은 $td, 즉 오늘의 날자를 값으로 합시다.
<font color=blue>if($HTTP_COOKIE_VARS[zerocount]!=$td)
{
setcookie("zerocount",$td,time()+60*60*24);
$que = "update zerocount SET count=count+1 WHERE id=1";
$result=mysql_query($que, $connect );
$que = "update zerocount SET count=count+1 WHERE date='$td'";
$result=mysql_query($que, $connect );
}</font>
위에서 보면 만약 zerocount 쿠키가 오늘 날자랑 다르다면, setcookie() 함수를 이용해서 우선 zerocount라는 쿠키를 만듭니다.
그리고는 update 쿼리를 써서 id=0, 즉 전체 카운터행과 오늘의 카운터 행에 count라는 카운터를 하나씩 올려줍니다.
자 그럼 이제 DB에 테이블 생성과 기타 접속자수 올리는 부분이 끝났습니다.
그럼 카운터를 출력을 해야겠죠?
저는 이미지를 사용하지 않고 텍스트로 사용할수 있게 했습니다.
그리고 $count[] 라는 배열변수에 전체, 오늘, 어제, 최고, 최저의 순서대로 카운터 값을 넣도록 하겠습니다.
<font color=blue>$que="select * from zerocount where id=1"; // 전체
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[0]=$temp[count];
$que="select * from zerocount order by id desc limit 2"; // 오늘, 어제
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[1]=$temp[count]; // ---- 오늘꺼
$today_id=$temp[id];
$temp=mysql_fetch_array($result);
$count[2]=$temp[count];
$tempid=$temp[id]; // ------ 어제꺼
$que="select * from zerocount where id>1 order by count desc limit 1"; // 최고
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[3]=$temp[count];
$que="select * from zerocount where id<$today_id order by count limit 1"; // 최저
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[4]=$temp[count]; </font>
자 이제 원하는 카운터 자료를 $count 라는 배열변수에 카운터 값을 담았습니다.
echo"$count[0]"; 이라고 하면 전체 카운터수가 나옵니다.
쉽죠?
자료실에 올려놓을테니 잘 안되시는 분은 다운받아서 비교해보세요.
그리고 이 앞에 Study를 잘 읽으신 분이시라면 만드시는데 별 이상이 없을거라고 생각합니다.
잘 모르는것이 있으면 묻두 답하기 게시판에 글 남겨주세요.
첫번째 실습을 카운터 만들기 입니다.
현재 제 홈에서 사용중인겁니다.
전체, 최고, 최저, 오늘, 어제까지의 카운터가 표시가 됩니다.
그리고 카운터는 쿠키를 이용해서 접속자가 아무리 접속하고 리프레쉬 하더라도 하루에 무조건 한번만 올라가도록 했습니다.
IP를 이용한 방법을 생각해봤으나 모뎀이나 기타 유동 IP사용자들을 체크하기가 어렵고 또 IP 데이타를 갖고 있기 위해서 용량을 소비하는것보다는 쿠키가 낫다는 걍 저의 허접한 생각이 들어서 그랬습니다.
프로그램을 만들기 전에 어케 동작을 하는지 순서대로 알아봅시다.
지금 만들 카운터는 파일을 이용하지 않고 DB를 이용하여 사용을 하게 했습니다.
그래서 첫째로, 카운터 테이블이 만들어져 있는지 검사를 합니다.
만약 없으면 만들면 되고 있으면 넘어가면 되겠죠?
그리고 오늘의 날자를 구한다음 오늘 데이타가 없음 새로 만들죠.
그리고는 쿠키를 체크해서 이미 접속한 사용자면 그냥 카운터만 출력하고 만약 오늘 처음 접속한다면 update 쿼리를 이용해서 카운터를 1을 올리고 카운터를 출력하죠.
원리가 간단한 만큼 소스도 간단하니 걱정마세요.
자 이제 소스제작에 들어가봅시다..
(쩝, 20분만에 만든거라 소스가 허접해두 이해해 주세요~~)
우선 DB설정입니다.
당근 DB를 이용하는 넘이기 때문에 DB 설정을 해주어야 겠죠.
우선 DB설정에 관련된 사항들을 변수로 지정합시다.
<font color=blue>$host_name = "localhost";
$user_name = "계정아듸";
$user_password = "DB암호";
$db_name ="DB아듸";</font>
그리구 DB에 접속하구 자신의 db를 지정해주야 겠죠.
<font color=blue>$connect = mysql_connect($host_name,$user_name,$user_password);
mysql_select_db($db_name, $connect);</font>
그럼 카운터에 사용될 테이블 이름을 zerocount라고 합시다.
zerocount 테이블이 있나 없나 체크를 해야겠죠?
<font color=blue>$result = mysql_list_tables ($db_name);
$i = 0;
$tablelist="";
while ($i < mysql_num_rows ($result))
{
$tb_names[$i] = mysql_tablename ($result, $i);
$tablelist .= "/".$tb_names[$i];
$i++;
}</font>
만약 없으면 만들어야 됩니다.
schema 는 primary key인 id 와 count(접속수), date(날자)로 3개만 설정하면 됩니다.
<font color=blue> if(!eregi("zerocount",$tablelist))
{
$que = "CREATE TABLE zerocount (
id int(11) DEFAULT '0' NOT NULL auto_increment,
count int(11),
date varchar(8),
PRIMARY KEY (id))";
mysql_query( $que, $connect );
} </font>
위에서 보면 !eregi("zerocount",$tablelist) 는 zerocount라는 테이블이 없으면 다음 블럭을 실행하라는 겁니다.
creat 쿼리를 사용해서 id, count, date라는 3개의 스키마를 가진 테이블을 생성합니다.
다음은 오늘의 날자를 구해야죠.
<font color=blue>$td=date("Ymd");</font>
위와 같이 하면 $td 안에는 구분표시 없이 그냥 년도월일이 들어가게 됩니다.
2000년 3월 7일이면 20000307과 같이 입력이 되겠죠?
그리고 우선 id=1 인 행, 즉 젤 첫번째 행을 전체 카운터를 저장하기로 합니다.
이렇게 하지 않고도 전체 숫자를 구할수 있지만 나중에 데이타가 많아지면 느려지겠죠?
그래서 전체 숫자는 따로 지정한겁니다.
우선 id=1 인 행의 데이타를 가져오고, 만약 없으면 추가를 해야겠죠?
<font color=blue>$que="select * from zerocount where id=1";
$result=mysql_query($que, $connect );
$check=mysql_fetch_array($result);</font>
만약 $check의 값이 없다면 아직 id=1인 행이 만들어지지 않았다는 것이기 때문에 새로 만들어야 겠죠.
<font color=blue>if(!$check[count])
{
$que = "INSERT INTO zerocount VALUES ('', 0, '')";
mysql_query($que, $connect );
}</font>
우선 전체 카운터는 0으로 넣는겁니다.
그리고 오늘의 데이타가 있는지를 검사해서 역시 없으면 새로 만들어야 합니다.
<font color=blue>$que="select * from zerocount where date='$td'";
$result=mysql_query($que, $connect );
$check=mysql_fetch_array($result);
if(!$check[count])
{
$que = "INSERT INTO zerocount VALUES ('', 0, '$td')";
mysql_query($que, $connect );
} </font>
자 이제 DB에서의 카운터 테이블 준비는 끝났죠.
그럼 쿠키를 검사해서 한번 이상 접속한 사람인지 아니면 새로 접속하는 사람인지를 알아봅시다.
쿠키값을 알아낼때는 환경변수 $HTTP_COOKIE_VARS 를 쓰면 됩니다.
카운터에 쓰일 쿠키이름을 zerocount 라고 하고 값은 $td, 즉 오늘의 날자를 값으로 합시다.
<font color=blue>if($HTTP_COOKIE_VARS[zerocount]!=$td)
{
setcookie("zerocount",$td,time()+60*60*24);
$que = "update zerocount SET count=count+1 WHERE id=1";
$result=mysql_query($que, $connect );
$que = "update zerocount SET count=count+1 WHERE date='$td'";
$result=mysql_query($que, $connect );
}</font>
위에서 보면 만약 zerocount 쿠키가 오늘 날자랑 다르다면, setcookie() 함수를 이용해서 우선 zerocount라는 쿠키를 만듭니다.
그리고는 update 쿼리를 써서 id=0, 즉 전체 카운터행과 오늘의 카운터 행에 count라는 카운터를 하나씩 올려줍니다.
자 그럼 이제 DB에 테이블 생성과 기타 접속자수 올리는 부분이 끝났습니다.
그럼 카운터를 출력을 해야겠죠?
저는 이미지를 사용하지 않고 텍스트로 사용할수 있게 했습니다.
그리고 $count[] 라는 배열변수에 전체, 오늘, 어제, 최고, 최저의 순서대로 카운터 값을 넣도록 하겠습니다.
<font color=blue>$que="select * from zerocount where id=1"; // 전체
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[0]=$temp[count];
$que="select * from zerocount order by id desc limit 2"; // 오늘, 어제
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[1]=$temp[count]; // ---- 오늘꺼
$today_id=$temp[id];
$temp=mysql_fetch_array($result);
$count[2]=$temp[count];
$tempid=$temp[id]; // ------ 어제꺼
$que="select * from zerocount where id>1 order by count desc limit 1"; // 최고
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[3]=$temp[count];
$que="select * from zerocount where id<$today_id order by count limit 1"; // 최저
$result=mysql_query($que, $connect );
$temp=mysql_fetch_array($result);
$count[4]=$temp[count]; </font>
자 이제 원하는 카운터 자료를 $count 라는 배열변수에 카운터 값을 담았습니다.
echo"$count[0]"; 이라고 하면 전체 카운터수가 나옵니다.
쉽죠?
자료실에 올려놓을테니 잘 안되시는 분은 다운받아서 비교해보세요.
그리고 이 앞에 Study를 잘 읽으신 분이시라면 만드시는데 별 이상이 없을거라고 생각합니다.
잘 모르는것이 있으면 묻두 답하기 게시판에 글 남겨주세요.
댓글 181
-
토모
2001.11.21 21:11
= _ = ㆀ에효.... -
신상현
2001.12.01 18:09
오늘처음................ -
짜루
2001.12.14 22:23
에혀~~ 오늘 쉬운거 10개나 했는데 되는게 없었네... 머라 아포... 제가 디자인해줄테니 PHP 잘하는 사람없나?
에혀~~ 그림이나 그려야 겠다~~~근데 나 수학무지 못했는데..PHP못하는거 하고 관계있어여??%^& -
이희성
2001.12.26 18:48
모르겠써!!!! -
불티나
2001.12.30 18:15
끙............... ㅡ_ㅡㆀ -
조일환
2002.01.14 19:27
대부분 어느정도 이해가 가는데
아무래도 MySQL쪽이 아무래도 좀 딸리네요..
흑;;;; 데이타 베이스는 1개월간 전혀 성과가 없네염...ㅜㅜ -
유경식
2002.01.18 02:42
asp만 했었는데 금방 감이 오네요..
표현법이나 함수의 기능만 다르지 기본 로직은 똑같음.
특히나 SQL문법은 둘다 똑같으니 DB로 들어서서는 더 쉬워지는군여.. -
성은지
2002.01.24 20:50
휴~~ 넘 어렵다.. 기절 하겠서 -
블루~♪
2002.01.27 18:43
헉.. 욘나 길다 .하지만 넘 좋다 좋아~~제로님 파띵~! -
마니
2002.01.30 03:53
으으;;;
몰라몰라 아아 배워야지 배워야 남지;;;
내가 언젠간 내이름 걸고 보드를 만들고말리라;;;
크크크 언제!!? 과연 정말루 그럴까나?? -
김현석
2002.02.06 13:13
쉽죠?
한데 까고 싶네.. -
김현석
2002.02.06 13:16
그래두 되기는 되는 구만....................ㅋㅋ 이런 강좌가 많았으면 조케쑝. -
김현석
2002.02.06 13:18
echo"$count[0]"; //전체
echo"$count[1]"; //최고
echo"$count[2]"; //최저
echo"$count[3]"; //오늘
echo"$count[4]"; //어제
입니다............ -
박유원
2002.02.10 18:39
쉽기는.. 이해가 전혀 안가는데요.. ㅠ.ㅠ -
김영석
2002.02.19 13:43
뭔말 인지 원?
영어로 된건 어디서 써먹는건지?
htm은 메모장등에서 하면 되는데 요런건 어디서 어떻게 써먹나요.자세하게 설명된곳좀 갈켜주세여? -
Archi*
2002.05.03 07:26
이것도 메모장에서 써먹어요 확장자를 php로 하면 될걸요 -
임동준
2002.09.17 17:14
꼬리글들이 더 잼나군요 -_-+ -
∑버디킹카™
2002.10.31 15:59
이 소스들 맨 앞에 <? 이것과 맨끝에 ?> 이거 붙여야 소스가 그대로 나오질 않는다는..
ㅡㅡㅋ 위에 누가 왜 소스가 그대로 나오냐고 나와 잇길래; -
카게로
2002.11.09 12:32
도데체 자료실 어디에 있다는겁니까? 짱나네 -
☺BBeak!☺
2002.11.19 00:32
C 조금 공부해서 부분적으로 이해는 하겠는데;
그래도 좀 무리인걸요;
C++ 부터 공부해야겠어요; -
재영이천재
2002.11.29 13:53
휴~~~~~~~~~~~~~~~~~~~~~~~~~~~ -
김재석
2003.09.13 22:44
...-_-; 강좌를 비판하기 전에 자신이 문법 공부를 얼마나 해봤냐에 대해서는 생각해보셨습니까?
아래의 문법 강좌를 다 들으셨다면 이건 안봐도 짤 수 있습니다. -_- -
김재석
2003.09.13 22:45
강좌가 좋은 강좌이길 바라지 말고 자신이 강좌를 익히려고 노력하시길.. nzeo만큼 php강좌가 친절히 되있는 곳도 드뭅니다. -
FlyingSky
2003.09.16 18:31
제로님이 만드셨다는 카운터 파일은 도대체 어디에 있는건지... 자료실이라는 자료실 다 돌아봤지만... 아직도 못차은... ㅠ.ㅜ -
박경근
2003.12.02 00:45
Warning: main(dbconn.php3): failed to open stream: No such file or directory in /home/zoe/public_html/zoe/zoe1.htm on line 1
Warning: main(): Failed opening 'dbconn.php3' for inclusion (include_path='.:/usr/local/php/lib/php') in /home/zoe/public_html/zoe/zoe1.htm on line 1
Warning: main(zerocounter.php3): failed to open stream: No such file or directory in /home/zoe/public_html/zoe/zoe1.htm on line 2
Warning: main(): Failed opening 'zerocounter.php3' for inclusion (include_path='.:/usr/local/php/lib/php') in /home/zoe/public_html/zoe/zoe1.htm on line 2 -
박일광
2004.02.12 21:44
뭐라는지 도무지 이해가 안가네요!!!잘 아시는분 도움부탁!!!
piaoriguang@hotmail.com -
DBLE
2005.11.28 19:35
음...욜라 분석중.... -
정철명
2004.10.21 22:37
수업 들으면서 이해 안되는 부분도 해결되었구요.. 새로운걸 배웠습니다.. 강좌 감사합니다 -
함정희
2007.08.19 21:13
ㅎㅎㅎ이해는 가는데... 될란쥐~
잘돼야 될텐데~ 잘되겠죠^-^ 뭐! -
스칼라 듄
2007.12.28 23:23
제가 보기엔 그냥 적은 글로 보이는군요..
그냥도 아닌.. 막....... 적은 글같아요 -ㅅ-;;
뭔가 엉망이에요 -_ㅠ;
이해불능 -_-;
자세하지 않아... -
김도형846
2008.11.26 17:26
리플에서 많은 세월의 거리가 느껴집니다.
7년전에 쓴 글인데~!!! 많은 도움이 되네요. ^^
제목 | 글쓴이 | 날짜 |
---|---|---|
페이지 자동 이동 방법 3가지!!! [10] | zero | 2000.03.06 |
카운터를 만들어봅시다~ (수정본) [181] | zero | 2000.03.08 |
쿠키(cookie)의 활용 [44] | zero | 2000.03.06 |
Zend Optimizer 4 설치 (아파치와 PHP4 Zend도 같이..) (리눅스) [6] | zero | 2000.06.04 |
리눅스에서 APM 설치 [9] | zero | 2000.05.31 |
MySQL RPM으로 설치하자!! (리눅스) [5] | zero | 2000.06.04 |
MYSQL Query의 간단한 사용법 [82] | zero | 2000.03.06 |
웹서핑 동작 원리의 이해 [18] | zero | 2007.10.05 |
입력폼에 배경그림 넣기 [1] | 정낙훈(xynex) | 2008.12.23 |
구글 번역기 API | 유비키리 | 2008.10.29 |
전체크기로 새창 열기 [1] | ITBANK.kr | 2008.10.01 |
지정된 시간동안 강제로 보여지는 언론사에서 많이 사용하는 광고창 | ITBANK.kr | 2008.10.01 |
항상 같은곳에 있는 광고창 만들기 | ITBANK.kr | 2008.10.01 |
첨부파일 확장자 체크 [정규식] | arimaya | 2008.06.23 |
자파스크립트로 GET으로 넘어온 파라미터 가져오기 [1] | 중딩 | 2008.05.26 |
나만의 위지윅 웹에디터 만들기 - 기본 준비2 [2] | 예뜨락 | 2008.05.11 |
나만의 위지윅 웹에디터 만들기 - 기본 준비1 [3] | 예뜨락 | 2008.05.05 |
나만의 위지윅 웹에디터 만들기 - 글 쓰기에 앞서 [4] | 예뜨락 | 2008.05.05 |
프레임홈일때 부분프레임 무단링크 방지하기 [3] | gosoo99 | 2008.04.08 |
동적 INPUT | june44.myid.net/ | 2008.03.31 |