웹마스터 팁
카운터를 만들어봅시다~ (수정본)
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를 잘 읽으신 분이시라면 만드시는데 별 이상이 없을거라고 생각합니다.
잘 모르는것이 있으면 묻두 답하기 게시판에 글 남겨주세요.
댓글 181
-
hm.....
2000.08.31 21:58
-
안길용
2000.09.01 10:10
동감이요 -
구리구리
2000.09.01 20:51
머라카는지 하나도 몬알아 먹겠따..ㅡ.ㅡ;;
엄청 처버라서. -
b125
2000.09.03 13:06
차근 차근 읽어보시면 잘 됩니다. 정말 쉽게 설명이 되어 있네요..
앞의 강좌도 잘 보시기를.... -
덩규
2000.09.06 22:46
쩝.. 초보지만.. 꽤 쉽게 자세히 설명이 되어있네용 ^^
고마버요 제로님~~ ^^
전 함수그런것 잘몰라영 ㅡ.ㅡ;;
구러나! 깡으로! 무조건 깡으로! 맹그러 볼라구 합니다 ㅡ.ㅡ;;
나중에 머라구 하나 맹글면 사랑해주세영 ㅡ.ㅡ;; -
키로리
2000.09.14 23:19
머라고 하셨나요? -
양희석
2000.09.17 23:11
HANADO MOLA~ Y,Y -
ㅡㅡ;;
2000.09.22 08:12
기냥 카운터 다운받아서 설치하는 방법이나 자세히 갈켜 주세영..-_-;; -
덩진이
2000.09.27 17:45
Good!!!!!!!!!!!!!!!!!!!!!!!!!! -
맥심
2000.10.08 20:30
모가몬지 -
띠리빠빠
2000.10.09 22:12
이게 뭐하는 거예염?? -
우림
2000.10.18 15:09
초보한테는 설명이 좀 부족하네요....하지만, 일단 따라해 보면 이해가 갑니다. -
Mso
2001.08.21 11:08
마졍.... ^_^ -
안젤리카
2000.12.21 19:50
음. 첨으로 들어와서 보는건데요.. --;; 으음.. 모르겟다... -
안젤리카
2000.12.21 19:50
걍 앞 강좌나 열 -
안젤리카
2000.12.21 19:50
띠미 바야겠네엽.. 쩝.. -
알콜맨
2000.12.26 17:27
쩝..공부를 해야 쓰것는디.. -
anakii
2000.12.27 15:53
잼있어요!! -
anakii
2000.12.27 16:08
근데, 앞쪽의 $check 값이 Array 로 나오면 맞는 건가요? 뭔가이상해.. -
anakii
2000.12.27 16:52
if(!$check[0] 으로 하니까 됩니다. 왜 if(!$check[count] 로 하셨을까요??? -
정진교
2001.01.02 01:58
하나도 모르겠돠!!!읔 ㅠ.ㅠ -
혀기나꼬
2001.01.02 15:20
흐미~~~ 몬 말인지 몰것네... - - ;; -
홍슬기
2001.01.02 18:29
내..내 아이큐가 의심스럽다..ㅠ.ㅠ 아울~~~~~~~~ -
홍슬기
2001.01.02 18:30
아..길드원 애들이 홈페이지좀 이쁘게 하라고 보채고 있는데..클랏네..한번에 몽땅 다 이해할수 없을까..흑흑 -
홍슬기
2001.01.02 18:31
아..진짜 눈물 난당..어떠케 하지..ㅜㅜ -
♡그들의 촛불하나♡
2001.01.08 18:02
모라는거샤--ㆀ -
창
2001.01.16 16:50
저걸..어디에..쓰라는건지??메모장? -
온인선
2001.01.20 15:03
쿠헤헤...전구냥 제방식대루 살랍니데이,,,ㅠ,ㅠ 도저히 모가 몬지..ㅠ.ㅠ -
pww999r
2001.01.24 23:53
-_-; -
미향이..
2001.01.25 14:32
도대체 몰 어떠헤 어디다 하는건지.. ㅠ.ㅠ 꼭 알려주세여.. kkalgid@hanmail.net 꼭줌 -
미향이..
2001.01.25 14:33
또BD는 몬가여? 이거 어디다가 하는건지.. 도 알려주세여~~ -
이성종
2001.01.26 14:36
허접들 ㅋㅋㅋ 엄청 쉽다 -
문기환
2001.01.27 05:38
Q/A란에 올려놓으면 제로님이 답변해주시네요 -
zest
2001.01.27 10:38
야호 성공이당; -
정연
2001.01.29 17:49
............. 장난이 아니군.. -
정연
2001.01.29 17:49
너무 어려버!!! -
배진경
2001.01.30 16:58
이것이 뭔말일 끄낭?ㅡㅡㆀ나 같은 평민은 모르겠눈걸? -
철
2001.01.31 01:14
오케바리....가자가자... -
김준하
2001.01.31 15:27
이 미천한것에게 가르침을... -
BamTol
2001.02.01 09:38
스윽...뜯는중...설명때문에 다행...^^근데 계정두 없구...실제로 쓸때가 없음...ㅠㅠ -
BamTol
2001.02.01 09:41
아...그렇군...ㅡㅡ;;; -
tagnet
2001.02.02 15:57
사람들이 이 글은 많이 읽었나보구나.. 답글들이 많은 걸 보니. -
조휘천
2001.02.08 01:27
흐미 세상에 이런것두 다있었네.. 쩝 첨보는 거당.. 점다 꼬부랑글씨.. 쩝 게시판 하나만들려다 머리다빠지겠네...쩝 -
토리
2001.02.10 00:21
아.. 그냥 1씩 올라가는게 타운터인데 복잡하군요 ㅠㅠ -
김경진
2001.02.15 11:47
님은 20분만에........ 전 하루 내도록 이걸로 고생해야 하겠군요.. ㅠ.ㅜ -
김경진
2001.02.15 12:08
앞 강좌를 다시 보고 오니.. 이해가 쭉쭉 되는군여.. 역시.. 열심히 해야겠또.. *^^* -
규니
2001.02.27 10:25
위에 DB이름,DB암호,계정아뒤..를 어케 알져??제 컴에 A.P.M을 깔았는데... -
박대윤
2001.03.04 13:35
도라뿐다 -
당근호ⓞㅣ
2001.03.14 21:58
오늘첨갑해서 들어왔는데.. 역시나 어려버여~ @.@ -
한규웅
2001.03.15 22:25
나도역시
제목 | 글쓴이 | 날짜 |
---|---|---|
페이지 자동 이동 방법 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 |
참 한숨만 나오네...........................................