웹마스터 팁
카운터를 만들어봅시다~ (수정본)
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
-
zeno
2001.03.17 21:11
php배워볼까나~;; -
zeno
2001.03.17 21:11
하지만..시간이 음다.. -
황승민
2001.03.29 14:11
음화화화화...^^* -
최순임
2001.04.05 14:15
디비가 뭐여....... -
권윤택
2001.04.16 14:07
무무슨...말이여요...ㅡㅡ;; -
래쉬ㅡㅡ^
2001.04.16 17:56
아 사람 만타~ -
정상태
2001.04.18 16:46
훌..초보들의 설움.. 독학으루 끼적여볼래두 넘 어려워서말이져 쩝... -
정상태
2001.04.18 16:46
좀더 쉽게 설명하면 좋을텐데 어딜가나 어렵군요 용어만 들어두 머리가 지끈거리는데......... -
ZeroMoon
2001.04.19 20:31
저 정도면 쉽게 설명하신듯 싶네여 잘 모르시는 분들은 기초부터~ -
임용규
2001.04.26 20:34
제로님, 좋은 강의란 사람들의 "왜?"를 모조리 수용하는 강의입니다. -
뚜기
2001.04.28 13:58
휴..저기여..여기에..첨부터..초보부터배우는곳없나여?? -
뚜기
2001.04.28 13:58
있으면쩜갈켜주시징..ㅡㅡ;;헝~T^T기초가안대서그러나..ㅡㅡ;; -
뚜기
2001.04.28 13:59
기초를어데서배워여!!알려주셔요!! -
박혜진
2001.05.03 23:15
고맙습니다 -
김주환
2001.05.05 18:11
모라고 하는겨? -
박미연
2001.05.06 10:58
모라거 하시눈지..ㅡ_ㅡ++ -
박미연
2001.05.06 10:59
왜케 어렵게 말씀하시눈지..앙...ㅠ_ㅠ -
정성훈
2001.05.06 17:54
DB 안하구 할수 업나... 파일로 말야... 제로 담에 노디비강의부탁 -
종혁아이
2001.05.08 23:12
ㅁ ㅓㅇ ㅑ...;;;하나두 멀게써... -
라면 봉다리
2001.05.10 11:09
라면이나 끓여먹어야 겠따~~아.. -.- -
신성규
2001.05.11 12:37
mm;; -
전정선
2001.05.12 01:20
진짜 왕초보를 위해 기초부터...아주 맨 밑바닥 기초부터 알려주심 좋을듯 -
전정선
2001.05.12 01:21
특히 용어선택에 있어서도 웹을 몰르는 사람이 있짜나여.. -
전정선
2001.05.12 01:21
기왕 강좌 해주실꼬면 정말 웹이란걸 하나도 모르는 사람에게 알려주는것처럼 해주시면 어떨까여? -
곽재운
2001.05.13 05:33
쉽고 재밌네요. -
밀크호이㎖
2001.05.13 15:19
무슨 말인가?? -
박용섭
2001.05.15 02:53
하하 정말 쉽고 재밋어요!!!! 여러분도 다 읽을수 있을꺼예요.. -
박용섭
2001.05.15 02:53
난~! 드디어 한글과 영어를 섞어서 읽는법을 알았습니다!! -
박용섭
2001.05.15 02:54
ㅡ,.ㅡ; 죄송합니다... 너무 돌대가리인내가 화나서...... ㅡ,.ㅡ; -
배영준
2001.06.21 15:04
제로님 감사 합니다. 그대로 복사해 쓰니깐 되네요.. -
최충선
2001.05.18 13:18
역시 개념이 잡혀야 뭘하겠군영... 개념을 잡고 보면 쉬워엽... ^^;; -
최충선
2001.05.18 13:19
아참... phpschool에서 티셔츠 신청했는데.. 여러분은 신청했나 모르겠네용.. -
정재영
2001.05.18 17:21
강의가 넘 쉽다! 그리고 기초는 학원가튼데서 배우세요..ㅡ.ㅡ;; -
김주현
2001.05.20 23:13
학원..... 돈엄는데.... -
박찬
2001.05.21 00:17
자료실이 있다고 하는데..어딘지? -
송효종
2001.05.21 12:47
사람 만타... -
박찬
2001.05.22 09:03
카운트 source file 어디에 있니요...자료실이 어딘지? -
한슬기
2001.05.23 01:10
개념이고 뭐고.... 와악.-_- -
고구마귤
2001.05.27 16:46
-_-............ -
박재원
2001.05.27 18:52
도대체... 어디가 안되는거냐아앗!! 열받네..ㅠㅠ -
꼬마민우
2001.05.27 21:36
우에..먼말이지 ㅡ.ㅡ;; -
비
2001.06.01 17:47
이게 먼말인지 원... 머지머지?/ 엏케해야하는거야.. -
Phoo
2001.06.02 09:27
와~~`!! 사람 많당... ^^ -
Phoo
2001.06.02 09:28
에겅.. 뭔 말인지.. C랑 비숫한건 대충알아보겠는디.. 역쉬 정의방식이 쪼매 다르군.. -
멍한천사
2001.06.03 21:28
제로님 자료실 어디요? 없는데..;; -
구진영
2001.06.04 09:53
이거 메모장에다가 코딩하는 거여?? -
김형섭
2001.06.05 16:19
디비자 -
양지현
2001.06.09 01:21
무슨 말인지..--; -
d-a
2001.06.10 11:33
코멘트100개 채우기 -
d-a
2001.06.10 11:34
코멘트 100개 채우기
제목 | 글쓴이 | 날짜 |
---|---|---|
페이지 자동 이동 방법 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 |