웹마스터 팁

드뎌 실전으로 들어갈려구 합니다.

첫번째 실습을 카운터 만들기 입니다.

현재 제 홈에서 사용중인겁니다.

전체, 최고, 최저, 오늘, 어제까지의 카운터가 표시가 됩니다.

그리고 카운터는 쿠키를 이용해서 접속자가 아무리 접속하고 리프레쉬 하더라도 하루에 무조건 한번만 올라가도록 했습니다.

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를 잘 읽으신 분이시라면 만드시는데 별 이상이 없을거라고 생각합니다.

잘 모르는것이 있으면 묻두 답하기 게시판에 글 남겨주세요.