<% '데이터베이스(connection객체)의 인스턴스 생성 Set objDB = Server.CreateObject("ADODB.Connection") '데이터베이스 열기 objDB.open("dsn=my_database_dsn;uid=my_database_id;pwd=my_database_pwd;") '코드값 변수에 할당 code=Request("code") '넘겨온 코드값이 없으면 기본으로 ASP 저장 If code="" then code="asp" end If 'IP변수에 IP주소 할당 ip=Request("REMOTE_ADDR") '보여줄 페이지의 모양(월별, 요일별, 시간별)을 결정할 값을 할당 vMode=Trim(CStr(Request.QueryString("vMode"))) vYear=Trim(CStr(Request.QueryString("vYear"))) vMonth=Trim(CStr(Request.QueryString("vMonth"))) vDay=Trim(CStr(Request.QueryString("vDay"))) '모드값이 없을 경우 날짜별 접속통계를 보여준다. If vMode="" then vMode="month-day" nYear=Trim(CStr(year(date))) '연도저장 nMonth=Trim(CStr(month(date))) '월 저장 '데이터베이스에 저장된 연도와 월 값이 현재 연도, 월과 같을 경우, 월 값이 비어 있을 경우 실행 '이전 달의 정보가 있는가를 확인하는 부분. If (vYear=nYear and vMonth=nMonth) or vMonth="" then oldview="0" '변수에 0 할당 vYear=nYear '접속년도 할당 vMonth=nMonth '접속 월 할당 else oldview="1" '이전 달의 정보가 존재할 경우 end If '접속 일의 값이 없을 경우 일을 저장 If vDay = "" then vDay = Trim(CStr(day(date))) vDate=Trim(CStr(date())) '날짜 저장 vTime=Trim(CStr(hour(time))) '시간 저장 vWeek=Trim(CStr(weekday(date))) '요일 저장 '데이터베이스에서 number의 최소값에 있는 code 값을 불러온다. sqlna="SELECT Min(number) FROM my_statistic WHERE code='"&code&"' " Set lsna=objDB.Execute(sqlna) snum=clng(lsna(0)) lsna.close Set lsna=Nothing '데이터베이스에서 전체 접속 수 필드의 code 값과 number 값을 불러온다. sqlnav="SELECT avisit FROM my_statistic WHERE code='"&code&"' and number="&snum&" " Set lsnav=objDB.Execute(sqlnav) nav=lsnav("avisit") 'nav변수에 데이터베이스의 전체 접속 수를 할당 lsnav.close Set lsnav=Nothing '배열의 크기 지정 Dim tdvisit(31),ttvisit(24),wvisit(7),mvisit(12) '데이터베이스 각각의 접속 수 필드에서 최대 값을 가지는code, 연도, 월 값을 불러온다. sqlmd="SELECT Max(dvisit),Max(mvisit),Max(vday),Max(wvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' " Set lsmd=objDB.Execute(sqlmd) mday=clng(lsmd(0)) '일 mvweek=clng(lsmd(3)) '요일 mmonth=clng(lsmd(1)) '월 lday=clng(lsmd(2)) '방문객이 접속한 날짜. lsmd.close Set lsmd=nothing '이전 달의 정보 보기를 선택했다면 변수에 31을 할당 If oldview="1" and Request("vDay")="" then vDay=31 end If tday=clng(vDay) midday=mmonth/tday 'tday 값을 mmonth 값으로 나눈 값을 midday에 할당 midday=formatnumber(midday,0,-1) '월 평균 접속 값을 지정 '1일부터 현재일까지 실행 For i=1 to clng(vDay) iday=CStr(i) sqlm1="SELECT Max(dvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vday='"&iday&"' " Set lsm1=objDB.Execute(sqlm1) '첫번째 레코드의 값이 없을 경우 tdvist의 배열 값에 0을 할당 If lsm1(0)="" then tdvisit(i)=0 else tdvisit(i)=lsm1(0) end If lsm1.close Next '1월 부터 12월까지 반복 For m=1 to 12 m_Month=CStr(m) '월 접속 수의 최대 값을 가지는 레코드의 code, vYear, vMonth 값을 읽어온다. sqlm2="SELECT Max(mvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&m_Month&"'" Set rsMonth=objDB.Execute(sqlm2) '월 접속 수가 없을 경우 값에 0을 할당한다. If rsMonth(0)="" then mvisit(m)=0 else mvisit(m)=rsMonth(0) end If rsMonth.close Next '일요일(1)에서 토요일(7)까지 반복 For k=1 to 7 '요일별로 접속 수를 가지는 레코드의 code, vYear, vMonth, vWeek의 값을 읽어온다. sqlw0="SELECT wvisit FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vweek='"&k&"' " Set lsw0=objDB.Execute(sqlw0) '읽어온 값이 없을 경우 접속 수에 0을 할당 If lsw0.eof then wvisit(k)=0 else '읽어온 값이 있을 경우 요일별 접속 수의 최대 값을 가지는 레코드의 code, vYear, vMonth, vWeek 값을 검색 sqlw1="SELECT Max(wvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vweek='"&k&"' " Set lsw1=objDB.Execute(sqlw1) wvisit(k)=lsw1(0) '검색한 값을 요일별 접속 수에 할당. end If lsw0.close Next '변수 초기화. 시간대별 접속 수의 합을 가지는 레코드의 code, vYear, vMonth, vDay의 값을 읽어온다. mtime=0 sqltd = "SELECT sum(tvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vday='"&vDay&"'" set lstd = objDB.Execute(sqltd) '읽어온 값이 없을 경우 일별 접속 수의 값을 0으로 할당한다. If lstd(0) = "" then total_day = 0 else total_day = lstd(0) '일별 접속수에 할당 end If '0시부터 23시까지 반복 For j=0 to 23 'vMode값이 day-time일 경우 실행 '시간별 접속수의 합을 가지는 레코드의 값들을 읽어온다. If vMode = "day-time" then sqlvd="SELECT sum(tvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vday='"&vDay&"' and vtime='"&j&"'" else 'vDay값을 제외하고 검색 sqlvd="SELECT sum(tvisit) FROM my_statistic WHERE code='"&code&"' and vyear='"&vYear&"' and vmonth='"&vMonth&"' and vtime='"&j&"'" end If lsvd=objDB.Execute(sqlvd) If lsvd(0)="" then '시간별 접속 수가 없을 경우 0 할당 ttvisit(j)=0 else ttvisit(j)=lsvd(0) '시간별 접속수가 있을 경우 검색한 값을 시간별 접속 수에 할당 end If '시간대별 접속 수로 할당받은 접속 수가 현재 시간대별 접속 수보다 크면 읽어온 값을 할당. If mtime < ttvisit(j) then mtime=ttvisit(j) end If Next '연도별 접속 수의 최소 값을 가지는 레코드와 Number의 최소 값을 가지는 레코드의 code 값을 읽어온다. SQLstm = "SELECT Min(vyear),Min(Number) FROM my_statistic where code='"&code&"' " Set lsstm=objDB.Execute(SQLstm) syear=Trim(CStr(lsstm(0))) snumber=clng(lsstm(1)) lsstm.close Set lsstm=Nothing '월별 접속 수를 가지는 레코드의 code 값과 number 값을 읽어온다. SQLstm2 = "SELECT vmonth FROM my_statistic where code='"&code&"' and number="&snumber&" " Set lsstm2=objDB.Execute(SQLstm2) smonth=clng(lsstm2("vmonth")) lsstm2.close Set lsstm2=nothing objDB.Close Set objDB=nothing %> ASP 접속통계
ASP 접속 통계
날짜별 접속통계 | 월간 시간별 누적통계 | 요일별 누적통계 |
<% 'vMode의 값이 month-day일 경우 실행------------------------------------------------------------------------------- If vMode="month-day" then %>
<% for m=1 to 12%> <% else %> <%=m%> 월 <% End If next %> <% for m=1 to 12%> <% next %>
월통계 : <% if mvisit(m)>0 then %> <%=m%> 월
접속수 : <%=mvisit(m)%>
<% '1일에서 오늘 날짜까지 반복. 날짜별 접속 수의 값에 따라 이미지의 길이 할당 For i=1 to tDay iwidth=tdvisit(i)*10/mday %> <% next '오늘 날짜까지 반복했다면 종료하고 내일날짜부터 31일까지 반복 for i=tDay+1 to 31 %> <% next%>

Date

[ <%=vYear%> 년 <%=vMonth%> 월 날짜별 접속현황 ]

<%=i%> 일

<%=tdvisit(i)%>
<%=i%> 일

합 계

<%=mmonth%>
<% 'vMode가 day-time일 경우 실행 elseif vMode="day-time" then %>
<% '0시에서 23시까지 반복하고 접속 수의 크기에따라 이미지 크기 변수에 할당 for w=0 to 23 twidth=ttvisit(w)*10/mtime %> <% next%>

Hour

[ <%=vYear%> 년 <%=vMonth%> 월 <%=vDay%> 일 시간별 접속현황 ]

<%=w%> 시

<%=ttvisit(w)%>

합 계

<%=total_day%>
<% 'vMode가 시간 누적일 경우 실행 elseif vMode="sum-time" then %>
<% for w=0 to 23 twidth=ttvisit(w)*10/mtime %> <% next%>

Hour

[ <%=vYear%> 년 <%=vMonth%> 월 시간별 누적통계 ]

<%=w%> 시

<%=ttvisit(w)%>

합 계

<%=Mmonth%>
<% elseif vMode="sum-day" then%>
<% '일요일부터 토요일까지 반복 for w=1 to 7 select case w case 1 wname="일" case 2 wname="월" case 3 wname="화" case 4 wname="수" case 5 wname="목" case 6 wname="금" case 7 wname="토" end select '요일별 접속수에 따라 이미지 변수의 크기에 따라 이미지를 출력한다. iwidth=wvisit(w)*10/mvweek iwidth=formatnumber(iwidth,0,-1) %> <% next%>

Day

[ <%=vYear%> 년 <%=vMonth%> 월 요일별 누적통계 ]

<%=wname%>

<%=wvisit(w)%>

합 계

<%=mmonth%>
<% End If %>