웹마스터 팁
카운터를 만들어봅시다~ (수정본)
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
-
유미영
2001.06.11 15:07
우왕... ㅠ0ㅠ... 머르겠당... 히잉... -
이연지
2001.06.12 20:01
?>이게 잘못됐다는건 머지?? -
현우석
2001.06.14 15:31
뭔 소린지 모르겠다. 머리 터진다. 악악악! -
zzini
2001.06.15 17:16
어그.....어케 된그시...웰케 골때려요..-_-; -
zzini
2001.06.15 17:17
17살의 나이로...도저히..이해가.. -
임연희
2001.06.20 15:41
헉,,,미안합니다~머리가아파서~차라리걍만들어진고다운바다쓰겠씀돠 -
임연희
2001.06.20 15:38
무슨말이지?? ㅡ.ㅡ;;; -
이보미
2001.06.19 09:28
어 이거 딱 두줄 읽고 막히네.. -
김양진
2001.06.26 21:34
휴 이제돼따 -
우주인
2001.06.27 20:00
좀 쉽게좀 써주면 안대여? 아씨..-ㅁ- 진짜 이젠 짜증이 팍팍 날라구 한돠...-ㅁ- -
박지호
2001.06.30 12:43
제로님 좀 쉽게... 하긴 내가 좀 어려서 함수가튼걸 모르징... 어케하냥 머리 깨지겠다 -
최혜리
2001.07.08 07:06
앙.. -0-;; 뭔말 이에여.. -
김동일
2001.07.12 11:31
좀 어렵넹~~ 다시 풀어서 설명해 주시면.... -
이길호
2001.07.12 22:29
아따요.너무ㅇ어려워요..으으으... -
조건희
2001.07.13 17:51
실전으로 들어갈려구 합니다. -
조건희
2001.07.13 17:52
헉,,,미안합니다~머리가아파서~차라리걍만들어진고다운바다쓰겠씀돠 -
슈lover
2001.07.16 13:17
이것을 어디다 적어여? -_-; -
안현주
2001.07.17 09:36
전 왕처번데... 쪔 쉽게 설명해 주실분 엄나??? -
이창택
2001.07.22 22:50
처음에는 쉬운데.. 쿼리 전송 땜시로..ㅡ_ㅡ -
박혜령
2001.07.23 02:18
너무 어려운거 아냐??ㅠㅠ머리에 똥만 찼나바ㅠㅠ -
김소정
2001.07.25 15:37
-_-ㆀ -
그레이
2001.07.25 16:38
에구에구~~ -
ns³jh
2001.07.25 16:46
먼말인지.. 내가 하고 싶은 말을 다른 분들이 다했당.. 으.. 내 머린.. 목위가 허전해서 달린것인가..?? -
tagfree
2001.07.25 17:32
난 12살의 머리로두 이해가 가는데 카운터 2개 만드러따 ㅎㅎㅎㅎㅎㅎ -
이동진
2001.07.25 19:18
난....26인데두 모르겠던데... ^^; -
이동진
2001.07.25 19:19
난 바버!!!! -
김지은
2001.07.27 11:47
여기는 설명이 너무 전문 용어라서 어렵다 문말인지... 그냥 소소만 만들어 주시면 안되낭?? -
오세흥
2001.07.28 11:20
맨처음 한말씀중 20분 많에 만들었다 했는데 제생각에 거짓말 갓군 -
서동진
2001.07.28 16:23
테이블 만드는 부분에서 $i++;는 뭐죠? 상수형 변수를 어쩌라는거져? -
김태훈
2001.07.28 22:11
sql안쓰고 파일db로 하니깐 넘 어렵; -
김태헌
2001.07.29 17:11
버그좀 고처 주세요. 카운터가 다만들어 졌느데...뒷자리가 빠지네여 예 10 =>1,31=>3 -
정기용
2001.08.14 18:27
ㅇㅋㅇㅋ 근데 이게 왜 파일DBㅡㅡ? -
정기용
2001.08.14 18:28
씨만 알면 PHP는 쉽지.. -
최수지
2001.08.21 15:42
미치겟다..ㅠ-ㅠ -
양승민
2001.08.21 19:08
먼말이여...더욱더더욱더 쉬운곳은 없는것인가...^^; -
김세진
2001.08.22 15:21
여기도 넘 어려워 첨에는 좀쉽나 했더니 결국엔...다 똑같잖아 -
김원식
2001.08.23 13:51
요즘 PHP 버전에서만 그런지, 아님 윈도용이라 그런지는 몰라두... -
김원식
2001.08.23 13:52
mysql_fetch_array()로 받아온 배열에서... $check[count] 이런식으로 쓰면... -
김원식
2001.08.23 13:53
미리 정의되지 않은 상수명을 써서 어쩌구 저쩌구 하는 경고가 뜹니다... -
김원식
2001.08.23 13:53
이젠 안전빵으루다 $check['count'] 이런 식으로 쓰는 습관을 들여야 될 것 같아요... -
최원혁
2001.08.26 11:28
헐.. 어렵다... -
최원혁
2001.08.26 11:32
폰트 칼라 블루 라는 건 뭐져? -
이보안
2001.08.27 21:04
만들었습니다.... ^^; 갈수록... 피에치피가 쉬워지내요... 방명록도 만들었고... 메모장도 만들었습니다... 흐흐... 그러나... 응용이 산너머 산이군요... -
우기
2001.08.28 03:34
어쩌까나 ㅡ.ㅡ? 하나같이 소귀에경읽기네 - _- -
★☆~*™
2001.09.03 15:23
zzzzzzzzzz -
김주성
2001.09.07 05:50
먼말인지..ㅡ,,ㅡ 알수가 없어영.. 왜케 어려븐거얌.. 흐미.. 열쉼히 이전강의 읽었는데..
이전강의내용 다 이저먹은거 가타여..
php간단한 문법가튼거도 다까먹고.. 에구 이머리로 멀해먹을수 있는지 몰라.. -
그네
2001.09.09 16:47
죠졌샤~~♡ -
김소영
2001.09.10 16:46
ㅠ.ㅠ 내가 터득한다고 해도 SQL도 아직은 지원되지않구... ㅠ,ㅠ -
하해춘
2001.11.03 02:23
소스 주루룩 나와 버리네요..왜 그런지 고수님 들 답좀 가르켜 주세요 -
스타
2001.11.19 19:10
성공^^
제목 | 글쓴이 | 날짜 |
---|---|---|
페이지 자동 이동 방법 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 |