레이블이 ASP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ASP인 게시물을 표시합니다. 모든 게시물 표시

2024년 6월 27일 목요일

ASP - DATE

 
'====================================
Description : 주의시작은 일요일이라 가정한다
'====================================
 '-- 해당날짜에 해당하는 날짜의 일요일과 토요일날짜 구해옴( 형식 chkdate : 2009-01-01)
 FUNCTION week_day(chkdate)
  SELECT CASE weekday(CDate(chkdate))
   CASE 1 : temp1 = CDate(chkdate) - 0 : temp2 = CDate(chkdate) + 6 '일
   CASE 2 : temp1 = CDate(chkdate) - 1 : temp2 = CDate(chkdate) + 5 '월
   CASE 3 : temp1 = CDate(chkdate) - 2 : temp2 = CDate(chkdate) + 4 '화
   CASE 4 : temp1 = CDate(chkdate) - 3 : temp2 = CDate(chkdate) + 3 '수
   CASE 5 : temp1 = CDate(chkdate) - 4 : temp2 = CDate(chkdate) + 2 '목
   CASE 6 : temp1 = CDate(chkdate) - 5 : temp2 = CDate(chkdate) + 1 '금
   CASE 7 : temp1 = CDate(chkdate) - 6 : temp2 = CDate(chkdate) + 0 '토
  END SELECT
  week_day = temp1 &"|"& temp2
 END FUNCTION

'-- 현재일의 주차
FUNCTION now_week(getdate)
  now_week = int((Day(getdate) - weekday(getdate)+13)/7)
 END FUNCTION

 '-- 해당달의 마지막일
 FUNCTION last_day(year,month)
  temp = CDate(LEFT(dateadd("m",1,year &"-"& month &"-01"),7) &"-01")-1
  last_day = Split(temp,"-")(2)
 END FUNCTION
 
 '-- 현재월의 주차( 형식 getdate : 2009-01-01)
 FUNCTION now_week(getdate)
  now_week = int((Day(getdate) - weekday(getdate)+13)/7)
 END FUNCTION
 
 '-- 해당년의 전달까지의 주차수
 FUNCTION month_week(year, month)
  week = 0
  FOR i = 1 TO month - 1
   week = week + now_week(year &"-"& i &"-"& last_day(year,i))
  NEXT
  month_week = week
 END FUNCTION
 
 '-- 해당년의 주차수의 일요일(안됨;;)
 FUNCTION week_sunday(year,week)
  week_sunday = CDate(year &"-01-01")+(week-1)*7+1-WEEKDAY(CDate(year& "-01-01")+(week-1)*7)
 END FUNCTION

 '-- 해당년의 주차수의 일요일(형식 now_month_week("2009","02","2") : 2009년2월2주차)
FUNCTION now_month_week(year,month,week_cnt)
  a = CDate(year &"-01-01") '-- 시작기준일
  b = Datepart("ww",year &"-"& month &"-01",1,3) '-- 해당월의 시작일의 주차
  c = 7 * b '--7에 주차를 곱하면 몇일 뒤 인지 나옴
  d = DateAdd("d",c,a) '--시작기준일에서 날짜를 c 만큼 더해준다
  '-- 해당월의 시작일이 일요일이면 첫주이므로 원하는주차에서 7을 빼준다.
  IF weekday(year &"-"& month &"-01") = 1 THEN
   d = CDate(d) + (7 * week_cnt) - 7
  ELSE
   d = CDate(d) + (7 * week_cnt)
  END IF
  now_month_week = d
 END FUNCTION

function num_Week(arg_num)
    Select Case arg_num
        Case 1
            we = "일요일"
        Case 2
            we = "월요일"
        Case 3
            we = "화요일"
        Case 4
            we = "수요일"
        Case 5
            we = "목요일"
        Case 5
            we = "금요일"
        Case 7
            we = "토요일"
    End Select
    num_Week = we
end function

function Now_Week() "오늘의 요일
    MyWeekDay = Weekday (Now())
    Now_Week = num_Week(MyWeekDay)
end function

function first_Week() "이번달 1일의 요일
    MyWeekDay = Weekday(DateAdd("d",1-day(now()), now()) )
    first_Week = num_Week(MyWeekDay)
end function

function Count_Week() "오늘이 몇주차?
        "2째주 일요일 찾기
        se_sun = 9 - Weekday(DateAdd("d", 1-day(now()), now()))
        "2째주 일요일보다 작은 경우 오늘은1주차
        if cint(se_sun) > cint(day(now())) then
                Count_Week = 1
        else "2주이상
                "남은 날짜 계산
                mod_day = cint(day(now()) - se_sun + 1)
                " 남은 날짜를 7로 나눈 나머지가 0이면 몫을사용 아니면 몫+1 한다.
                if (mod_day mod 7) = 0 then
                        Count_Week = (mod_day / 7) + 1 "1주차를 더한다
                else
                        Count_Week = int(mod_day / 7) + 2 "1주차와 마지막주를 더한다 합이 2주
                end if
        end if
end function

2023년 3월 22일 수요일

ASP - SQL Injection and XSS Cross

 
Function SQLInjection(str) 

Dim resultStr
resultStr = str 

resultStr = Replace(resultStr, ";", " ")
resultStr = Replace(resultStr, "@variable", " ")
resultStr = Replace(resultStr, "@@variable", " ")
resultStr = Replace(resultStr, "+", " ")
resultStr = Replace(resultStr, "print", " ")
resultStr = Replace(resultStr, "set", " ")
resultStr = Replace(resultStr, "%", " ")
resultStr = Replace(resultStr, "<script>", " ")
resultStr = Replace(resultStr, "<SCRIPT>", " ")
resultStr = Replace(resultStr, "script", " ")
resultStr = Replace(resultStr, "SCRIPT", " ")
resultStr = Replace(resultStr, "or", " ")
resultStr = Replace(resultStr, "union", " ")
resultStr = Replace(resultStr, "and", " ")
resultStr = Replace(resultStr, "insert", " ")
resultStr = Replace(resultStr, "openrowset", " ")
resultStr = Replace(resultStr, "xp_", " ")
resultStr = Replace(resultStr, "decare", " ")
resultStr = Replace(resultStr, "select", " ")
resultStr = Replace(resultStr, "update", " ")
resultStr = Replace(resultStr, "delete", " ")
resultStr = Replace(resultStr, "shutdown", " ")
resultStr = Replace(resultStr, "drop", " ")
resultStr = Replace(resultStr, "--", " ")
resultStr = Replace(resultStr, "/*", " ")
resultStr = Replace(resultStr, "*/", " ")
resultStr = Replace(resultStr, "XP_", " ")
resultStr = Replace(resultStr, "DECLARE", " ")
resultStr = Replace(resultStr, "SELECT", " ")
resultStr = Replace(resultStr, "UPDATE", " ")
resultStr = Replace(resultStr, "DELETE", " ")
resultStr = Replace(resultStr, "INSERT", " ")
resultStr = Replace(resultStr, "SHUTDOWN", " ")
resultStr = Replace(resultStr, "DROP", " ")

SQLInjection = removeXSS(resultStr)

End Function


Function removeXSS(str) 

Dim resultVal
resultVal = str 

resultVal = Replace(resultVal, "&", "&amp;") 
resultVal = Replace(resultVal, "<xmp", "<x-xmo", 1, -1, 1) 
resultVal = Replace(resultVal, "javascript", "<x-javascript", 1, -1, 1) 
resultVal = Replace(resultVal, "script", "<x-script", 1, -1, 1) 
resultVal = Replace(resultVal, "iframe", "<x-iframe", 1, -1, 1) 
resultVal = Replace(resultVal, "document", "<x-document", 1, -1, 1) 
resultVal = Replace(resultVal, "vbscript", "<x-vbscript", 1, -1, 1) 
resultVal = Replace(resultVal, "applet", "<x-applet", 1, -1, 1) 
resultVal = Replace(resultVal, "embed", "<x-embed", 1, -1, 1) 
resultVal = Replace(resultVal, "object", "<x-object", 1, -1, 1) 
resultVal = Replace(resultVal, "frame", "<x-frame", 1, -1, 1) 
resultVal = Replace(resultVal, "grameset", "<x-grameset", 1, -1, 1) 
resultVal = Replace(resultVal, "layer", "<x-layer", 1, -1, 1) 
resultVal = Replace(resultVal, "bgsound", "<x-bgsound", 1, -1, 1) 
resultVal = Replace(resultVal, "alert", "<x-alert", 1, -1, 1) 
resultVal = Replace(resultVal, "onblur", "<x-onblur", 1, -1, 1) 
resultVal = Replace(resultVal, "onchange", "<x-onchange", 1, -1, 1) 
resultVal = Replace(resultVal, "onclick", "<x-onclick", 1, -1, 1) 
resultVal = Replace(resultVal, "ondblclick","<x-ondblclick", 1, -1, 1) 
resultVal = Replace(resultVal, "enerror", "<x-enerror", 1, -1, 1) 
resultVal = Replace(resultVal, "onfocus", "<x-onfocus", 1, -1, 1) 
resultVal = Replace(resultVal, "onload", "<x-onload", 1, -1, 1) 
resultVal = Replace(resultVal, "onmouse", "<x-onmouse", 1, -1, 1) 
resultVal = Replace(resultVal, "onscroll", "<x-onscroll", 1, -1, 1) 
resultVal = Replace(resultVal, "onsubmit", "<x-onsubmit", 1, -1, 1) 
resultVal = Replace(resultVal, "onunload", "<x-onunload", 1, -1, 1) 
resultVal = Replace(resultVal, "<", "&lt;")
resultVal = Replace(resultVal, ">", "&gt;")

removeXSS = resultVal

End Function


출처 : https://blog.minov.co.kr/entry/ASP-SQL-Injection-XSS-Cross-%EB%B0%A9%EC%A7%80-%EC%BD%94%EB%93%9C


2023년 3월 17일 금요일

HTML - 엑셀 다운로드 시 한글 깨짐 현상 (여러가지 처리 방법)


<ASP - euc-kr 기준>

[#1]

<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=euc-kr">
or
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 


[#2]

Response.Buffer = True
Response.CharSet = "euc-kr"
'Response.CacheControl = "public"
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment;filename=엑셀파일명.xls"


[#3]

Session.CodePage = 949



<ASP - utf-8 기준>

[#1]

<meta http-equiv="Content-Language" content="ko">

FileName = Server.urlEncode("한글깨짐방지")
or
FileName = Server.URLPathEncode("한글깨짐방지")




<C# 기준>


[#1]

<meta name="viewport" http-equiv="Content-Type" content="text/html; charset=utf-8" />
or
<meta name="viewport" http-equiv="Content-Type" content="text/html; charset=euc-kr" />


[#2]

Response.Charset = "euc-kr";   
Response.ContentType = "application/vnd.ms-excel"; 
Response.ContentEncoding = System.Text.Encoding.GetEncoding("euc-kr"); 


[#3]

Response.Clear();
Response.ClearHeaders();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=" + "파일명_" + DateTime.Now.ToString("yyyy_MM_dd") + ".xls");
Response.Charset = "utf-8";
Response.ContentType = "application/vnd.xls";
 
string table = @"<Table><tr><td>111</td></tr><tr><td>222</td></tr></Table>";
Response.Write(table);
Response.End();











2022년 5월 2일 월요일

ASP - 암호화/암호 해독 기능


' Encrypt and decrypt functions for classic ASP (by TFI)


'********* set a random string with random length ***********

cryptkey = "GNQ?4i0-*\CldnU+[vrF1j1PcWeJfVv4QGBurFK6}*l[H1S:oY\v@U?i,oD]f/n8oFk6NesH--^PJeCLdp+(t8SVe:ewY(wR9p-CzG<,Q/(U*.pXDiz/KvnXP`BXnkgfeycb)1A4XKAa-2G}74Z8CqZ*A0P8E[S`6RfLwW+Pc}13U}_y0bfscJ<vkA[JC;0mEEuY4Q,([U*XRR}lYTE7A(O8KiF8>W/m1D*YoAlkBK@`3A)trZsO5xv@5@MRRFkt\"


'**************************** ENCRYPT FUNCTION ******************************


'*** Note: bytes 255 and 0 are converted into the same character, in order to

'*** avoid a char 0 which would terminate the string


function encrypt(inputstr)

        Dim i,x

        outputstr=""

        cc=0

        for i=1 to len(inputstr)

                x=asc(mid(inputstr,i,1))

                x=x-48

                if x<0 then x=x+255

                x=x+asc(mid(cryptkey,cc+1,1))

                if x>255 then x=x-255

                outputstr=outputstr&chr(x)

                cc=(cc+1) mod len(cryptkey)

        next

        encrypt=server.urlencode(replace(outputstr,"%","%25"))

end function


'**************************** DECRYPT FUNCTION ******************************


function decrypt(byval inputstr)

        Dim i,x

        inputstr=urldecode(inputstr)

        outputstr=""

        cc=0

        for i=1 to len(inputstr)

                x=asc(mid(inputstr,i,1))

                x=x-asc(mid(cryptkey,cc+1,1))

                if x<0 then x=x+255

                x=x+48

                if x>255 then x=x-255

                outputstr=outputstr&chr(x)

                cc=(cc+1) mod len(cryptkey)

        next

        decrypt=outputstr

end function


'****************************************************************************


Function URLDecode(sConvert)

  Dim aSplit

  Dim sOutput

  Dim I

  If IsNull(sConvert) Then

         URLDecode = ""

         Exit Function

  End If

  'sOutput = REPLACE(sConvert, "+", " ") ' convert all pluses to spaces

  sOutput=sConvert

  aSplit = Split(sOutput, "%") ' next convert %hexdigits to the character

  If IsArray(aSplit) Then

        sOutput = aSplit(0)

        For I = 0 to UBound(aSplit) - 1

          sOutput = sOutput &  Chr("&H" & Left(aSplit(i + 1), 2)) & Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)

        Next

  End If

  URLDecode = sOutput

End Function


출처 : https://code-examples.net/ko/q/348e47



2020년 11월 2일 월요일

ASP - 에러 메세지 모음


---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a01a8' 

개체가 필요합니다.: 에러내용

/파일명.asp, line 에러라인번호
 

- 개체이름이 잘못되었을 경우 (option explicit 상태일때는 '변수가 정의되지 않았습니다')
Ex)  resopnse.write  "test" 

---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a000d' 

형식이 일치하지 않습니다.: 에러내용

/파일명.asp, line 에러라인번호 


- 알 수 없는 함수
- 알 수 없는 명령어
- 소스 중간에 임의의 문자가 들어간 경우 
- 데이터형식이 잘못됨(Ex. 매개변수에 배열이 들어가야하는데 배열이 아닌 변수가 들어감)
- 함수가 아닌 서브로 리턴값을 받으려 할때

---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a01f4'  

변수가 정의되지 않았습니다.: 변수명

/파일명.asp, line 에러라인번호


- 알 수 없는 명령어, 소스 중간에 임의의 문자가 들어간 경우, 변수선언이 안되어있을때(option explicit 상태일때)

---------------------------------------------------------------------------------

Microsoft VBScript 컴파일 오류 error '800a0400' 

문장이 필요합니다. 

/파일명.asp, line 에러라인번호

에러소스내용


- 소스중간에 숫자가 변수나 서브처럼 사용되었을 경우

---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a01c2' 

인수의 개수나 속성 할당이 잘못되었습니다.: 함수명 or 서브명

/파일명.asp, line 에러라인번호


- 함수나 서브의 매개변수 갯수가 다름

---------------------------------------------------------------------------------

Microsoft VBScript 컴파일 오류 error '800a0414' 

Sub를 호출할 때는 괄호를 사용할 수 없습니다. 

/파일명.asp, line 에러라인번호

에러소스내용


- 함수를 리턴값을 받지 않고 사용하거나 서브를 call 없이 단독으로 사용하였을 경우

---------------------------------------------------------------------------------

Microsoft VBScript 컴파일 오류 error '800a0408' 

유효하지 않은 문자입니다. 

/파일명.asp, line 에러라인번호

에러소스내용


- 소스 중간에 한글, 한문,  특수문자 등이 들어갔을 경우

---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a01b6' 

개체가 이 속성 또는 메서드를 지원하지 않습니다.: 해당개채 

/파일명.asp, line 에러라인번호


- 해당개체의 잘못된(없는) 메서드나 속성을 사용하려할때

Ex)
response.wtite "test"
response.write request.servervariable("REMOTE_ADDR")


- set 없이 변수에 리턴값이 오브젝트인 것을 넣으려할때
Ex) mail = Server.CreateObject("CDO.Message")      =&gt;    set mail = Server.CreateObject("CDO.Message")

---------------------------------------------------------------------------------

서버 개체 error 'ASP 0177 : 800401f3' 

Server.CreateObject 실패 

/파일명.asp, line 에러라인번호

잘못된 프로그램 ID입니다. 이 메시지에 대한 추가 정보를 보려면 다음 Microsoft 온라인 지원 사이트를 방문하십시오: http://www.microsoft.com/contentredirect.asp. 


- Server.CreateObject 로 알수없는 서버개체를 생성하려 할때
  (Ex. Windows 2000 Server 가 아닌 서버에서  Server.CreateObject("CDONT.Newmail") 등을 하려할때
- 서버컴포넌트를 서버에 등록하지 않고서 해당 서버개체를 생성하려할때

---------------------------------------------------------------------------------

Microsoft VBScript 런타임 오류 error '800a000b' 

0으로 나누기 

/파일명.asp, line 에러라인번호 


- 어떤값을 0으로  나누려 할때(0을 다른값으로 나누기는 가능)

---------------------------------------------------------------------------------

ADODB.Connection error '800a0e7a' 

공급자를 찾을 수 없습니다. 올바르게 설치되지 않았을 수 있습니다. 

/파일명.asp, line 에러라인번호


- DB연결문자열에서 지정한 공급자(provider)가 없는 경우 or 오타 (--;)
Ex)  sConnectionString  = "provider=SQLOELDB;Data Source=localhost;Initial Catalog=Northwind;User ID=sa;Password=12345;"

---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80004005' 

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server가 없거나 액세스할 수 없습니다. 

/파일명.asp, line 에러라인번호


- 지정한 DB서버 주소가 잘못되었거나 DB가 중지상태인 경우

---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80004005' 

'DB명' 로그인에서 요청한 데이터베이스를 열 수 없습니다. 로그인이 실패했습니다. 

/파일명.asp, line 에러라인번호


- DB연결문자열에서 지정한 Initial Catalog (시작DB)의 DB명이 잘못되거나 없는 경우.

---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80040e4d' 

'DB계정명' 사용자가 로그인하지 못했습니다. 

/파일명.asp, line 에러라인번호


- 해당 DB계정이 없는 경우
- 해당 계정의 패스워드가 잘못된 경우

---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80040e2f' 

'테이블명' 테이블, '컬럼명' 열에 NULL 값을 삽입할 수 없습니다. 열에서 null을 사용할 수 없습니다. INSERT이(가) 실패했습니다. 

/파일명.asp, line 에러라인번호


- NOT NULL 로 설정된 컬럼에 NULL 값을 넣으려고 할 경우( option explicit을 설정하지 않은 상태에서 해당 컬럼에 들어갈 변수명이 오타인 경우)

---------------------------------------------------------------------------------

ADODB.Parameters error '800a0e7c' 

매개 변수 개체를 잘못 정의했습니다. 제공된 정보가 일치하지 않거나 완전하지 않습니다. 

/파일명.asp, line 에러라인번호


- 파라메터 컬렉션의 매개변수의 형식을 잘못설정한 경우 
 (Ex.   Cmd.Parameters.Append = Cmd.CreateParameter("MEM_ID",  adnvarchar, adParamInput, 20, sMemId)

- 타입 라이브러리를 지정하지 않고 타입변수(adChar, adVarchar, adInteger, adParamInput 등등.. )를 사용한 경우
 (페이지 상단에    <!--METADATA type="typelib" file="c:Program FilesCommon FilesSYSTEMADOmsado15.dll"-->  이 지정되어 있어야 타입변수 사용가능)

---------------------------------------------------------------------------------

ADODB.Command error '800a0d5d' 

응용 프로그램이 현재 작업에 대해 잘못된 형식을 가진 값을 사용하고 있습니다. 

/파일명.asp, line 에러라인번호

 

- 입력된 값의 형식과 지정한 형식이 다른 경우

Ex) 

sAge = "23세"
Cmd.Parameters.Append = Cmd.CreateParameter("MEM_AGE",  adInteger, adParamInput, 4, sAge)


- 입력될 값의 길이가 지정한 길이보다 클 경우

Ex)

sMemId = "Administrator"
Cmd.Parameters.Append = Cmd.CreateParameter("MEM_ID",  advarchar, adParamInput, 10, sMemId)

---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80040e57' 

문자열이나 이진 데이터는 잘립니다. 

/파일명.asp, line 에러라인번호


- 입력될 값의 길이와 지정한 값의 길이가 실제 컬럼의 길이보다 클 경우

Ex) 'MEM_ID    varchar(20)   일 경우

sMemId = "ThisIsSuperAdministrator"
Cmd.Parameters.Append = Cmd.CreateParameter("MEM_ID",  advarchar, adParamInput, 30, sMemId)


---------------------------------------------------------------------------------

Microsoft OLE DB Provider for SQL Server error '80040e0c' 

명령 텍스트가 명령 개체에 대하여 설정되지 않았습니다. 

/파일명.asp, line 에러라인번호


- Command 객체에 대해여  CommandText 속성이 지정되지 않은 경우

Ex)

sSql = ""        ' 쿼리가 비어있다
set Cmd = server.createobject("adodb.command")
Cmd.activeconnection = sConnectionString
Cmd.CommandText = sSql     '변수명이 맞는지 확인 


---------------------------------------------------------------------------------
Microsoft OLE DB Provider for SQL Server 오류 '80004005' 
정밀도가 잘못되었습니다. 

- 파라메터 컬렉션의 매개변수의 형식을 잘못설정한 경우 
 (Ex.   Cmd.Parameters.Append = Cmd.CreateParameter("AGE",  AdNumeric, adParamInput, 10, age)
ADO type의 상수에서 일치를 하지 않을 경우 발생

상기에서는 AdNumeric를 adInteger로 변경하면 해결


2020년 10월 27일 화요일

ASP - 함수


1. 대소문자의 구분

  asp 에서는 다른 언어와는 달리 대소문자의 구분이 없다. 그냥 단지 알아보기 쉽게 하기 위해서 대소문자를 사용하는 것이다.
  예) dim strname 는 Dim strName 과 같은 구문이다. 


2. 변수 선언

- 변수나 배열의 변수 선언에는 dim 을 사용한다.
- Option Explicit 를 asp 맨 앞에 사용하여 변수를 꼭 선언하도록 하였으면 모든 변수는 dim 으로 선언하여 사용하여야한다.

예) 변수 선언 : dim strName, strEmail
     배열 선언 : dim monthArry(11)

- Redim : 배열 크기의 재선언에 사용한다.
           redim 의 사용은 처음 배열 선언시에 배열의 크기를 정해 주지 않았을 때에만 가능하다.

- Preserve : 데이터를 저장한 채로 배열의 크기를 늘려준다. 즉, 기존의 들어가 있는 데이터는 그대로 아직 존재한다. 


3. 구분자

- 구분자로는 :(콜론) 이 쓰인다.
- 구분자는 실행할 문장을 한줄단위로 구분짓는 역할을 한다.
예) dim strName : strName = "mshout77" : response.write "
strName = " & strName


4. 연결연산자

- &
- &가 문자열에 쓰이면 문장과 문장을 연결해서 한 문장으로 만들어준다.
- &가 변수에 쓰이면 변수의 값을 & 다음의 값과 이어준다.
- 예) dim strName, strFName, all

       strName = "77"
       strFName = "mshout"
       all = strName&strFName
       response.write all

       결과값은 77mshout 이라고 출력된다.


5. 주석

- ASP에서 주석처리에는 '(작은 따옴표) 가 쓰인다.
- 행에서 ' 다음의 내용은 주석처리되어 해석이 되지 않는다.


6. 함수

1) cdbl(문자열) - 문자열을 소수점이하까지도 출력(큰 숫자에 사용한다)

2) round(숫자,반올림할 위치) - 지정한 소수점 자리에서 반올림한 값을 리턴

3) asc(문자열) - 문자열에서 첫번째 문자에 대한 ansi 코드 번호를 리턴

4) chr(아스키코드번호) - 지정된 번호와 일치하는 ansi 문자로 구성된 문자열을 리턴

5) hex(숫자) - 숫자의 16진수값을 나탸내는 문자열을 리턴

6) fix(숫자) - 숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 크거나 같은 첫번째 음의 정수 리턴

7) int(숫자) - 숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 작거나 같은 첫번째 음의 정수 리턴

8) sgn(숫자) - 숫자의 부호를 나타내는 정수를 리턴

9) cdate(숫자) - 날짜 형식의 인자값 리턴( 예:cdate(36890) , cdate("2001년 12월 10일") )

10) Clng(숫자) - Long 형식의 문자열 리턴

11) Cstr(숫자) - String 형식의 문자열 리턴

12) Csng(숫자) - Single 형식의 문자열 리턴

13) formatcurrency(숫자) - 숫자를 화폐형식으로 전환

14) formatdatetime(date,1) - date 함수의 표시형태를 바꿈
     - formatdatetime(date,2)
     - formatdatetime(date,3)


15) formatpercent(숫자) - 숫자를 백분율로 표시


16) strConv - 지정한대로 문자를 변환, strConv(문자열,conversion [,LCID])

    conversion 에 가능한 값
     - vbUpperCase 1 문자열을 대문자로 변환
     - vbLowerCase 2 문자열을 소문자로 변환
     - vbPropercase 3 문자열 단어의 첫글자를 대문자로 변환
     - vbWide 4 1바이트문자를 2바이트 문자로 변환
     - vbNarrow 5 2바이트문자를 1바이트문자로 변환
     - vbUnicode 6 시스템의 기본 코드 페이지를 사용하여 문자열을 unicode 로 변환
     - vbFromUnicode 128 unicode 문자열을 시스템의 기본 코드 페이지로 변환


17) Randomize - 난수 발생기를 초기화
    - 난수값 = Int((상한값 - 하한값) + 1) * Rnd + 하한값
    - 예로 1부터 100사이의 난수를 가져오려면, 난수값 = Int(100 - 1 + 1) * Rnd + 1


18) Atn() - 숫자의 아크 탄젠트 값을 리턴


19) Cos() - 각도의 코사인값을 리턴


20) Exp() - e(자연 로그의 밑)의 인자만큼의 제곱을 리턴


21) Log() - 숫자의 자연로그를 리턴


22) Sin() - 각도의 사인값을 리턴


23) Tan() - 각도의 탄젠트값을 리턴


24) InStr("문자열","찾을 문자") - 문자열의 위치 반환 (대소문자 구분하기 때문에 Lcase 또는 Ucase 로 변환하여 사용 권장)


25) InStrRev("문자열","찾을 문자") - 문자열의 위치를 뒤에서 부터 검색해서 반환


26) Lcase("문자열") - 문자열을 소문자로


27) Ucase("문자열") - 문자열을 대문자로


28) Len("문자열") -문자열의 길이 반환


29) Left("문자열",잘라낼 갯수) - 문자열을 왼쪽에서 지정한 갯수만큼 잘라냄


30) Right("문자열",잘라낼 갯수) - 문자열을 오른쪽에서 지정한 갯수만큼 잘라냄


31) Mid("문자열",시작위치,뽑아낼 갯수) - 문자열의 어느 부위를 뽑아냄


32) Yrim("문자열") - 문자열의 양쪽 공백을 제거


33) Ltrim("문자열") - 문자열의 왼쪽 공백을 제거


34) Rtrim("문자열") - 문자열의 오른쪽 공백을 제거


35) Split("문자열","분리자") - 분리자를 기준으로 문자열을 나눔


36) StrReverse("문자열") - 문자열을 뒤집음


37) IsArray() - 변수가 배열인지의 여부를 나타내는 Boolean 값을 리턴


38) IsDate() - 날짜로 변환될 수 있는지의 여부를 나타내는 Boolean 값을 리턴


39) IsEmpty() - 변수가 초기화 될 수 있는지의 여부를 나타내는 Boolean 값을 리턴


40) IsNull() - 유효한 데이터를 포함하고 있는지의 여부를 리턴


41) IsNumeric() - 숫자로 평가될 수 있는지의 여부를 리턴


42) IsObject() - 유효한 ActiveX혹은 OLE 자동화 개체를 참조하는지의 여부를 리턴


43) Vartype() - 변수의 하위 형식을 나타내는 숫자를 리턴한다.


44) now() - 시스템의 시간과 날짜


45) date() - 시스템의 날짜


46) time() - 시스템의 시간


47) year(now()) - 현재의 년도


48) month(now()) - 현재의 월


49) day(now()) - 현재의 일


50) weekday(now()) - 현재의 요일


51) hour(now()) - 현재의 시


52) minute(now()) - 현재의 분


53) second(now()) - 현재의 초


54) DateAdd - 지정된 날짜에 시간을 추가하거나 뺀 새로운 날짜를 반환

   사용법) DateAdd(interval, number, date) 
           - interval : 필수적인 인수로 interval을 추가한 날짜를 나타내는 문자식
                     yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초

           - number : 필수적인 인수로 추가할 간격 수의 수식
                     수식에서 양수는 미래의 날짜, 음수는 과거의 날짜이다. 

           - date : 필수적인 인수로 interval을 추가한 날짜를 나타내는 Variant 또는 리터럴

   예) DateAdd("m",3,Date)  <-- 현재의 날짜에서 3개월을 더함
       DateAdd("m",-3,Date)  <-- 현재의 날짜에서 3개월을 뺌


55) DateDiff - 주어지는 두 날짜의 간격을 반환

   사용법) DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) 
           - interval : 필수적인 인수로 날짜1과 날짜2 사이의 차이를 계산하는 데 사용할 interval의 문자식
                     yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초                 

           - date1, date2 : 필수적인 인수로 날짜식에서 계산에 사용할 두 날짜

           - firstdayofweek : 선택적인 인수로 요일을 지정하는 상수로 지정하지 않으면 일요일로 간주

                            vbUseSystem 0 NLS(National Language Support) API 설정 사용 
                            vbSunday 1 일요일(기본값) 
                            vbMonday 2 월요일 
                            vbTuesday 3 화요일 
                            vbWednesday 4 수요일 
                            vbThursday 5 목요일 
                            vbFriday 6 금요일 
                            vbSaturday 7 토요일 

           - firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수
                            지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다. 
                            vbUseSystem 0 NLS(National Language Support) API 설정 사용 
                            vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값) 
                            vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작 
                            vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작

   예) DateDiff("h", "2001년 12월 30일", Date) 
       DateDiff("n", "2001년 12월 30일 09:30:00", now) 
       DateDiff("s", "2001년 12월 30일 09:30:00", now) 


56) DatePart - 주어진 날짜의 지정된 부분을 반환한다. 

   사용법) DatePart(interval, date[, firstdayofweek[, firstweekofyear]]) 
           - interval : 필수적인 인수로 반환할 시간 간격의 문자식이다.
                     yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초

           - date : 필수적인 인수로 계산할 날짜식

           - firstdayof week : 선택적인 인수로 요일을 지정하는 상수로서 지정하지 않으면 일요일로 간주

                            vbUseSystem 0 NLS(National Language Support) API 설정 사용 
                            vbSunday 1 일요일(기본값) 
                            vbMonday 2 월요일 
                            vbTuesday 3 화요일 
                            vbWednesday 4 수요일 
                            vbThursday 5 목요일 
                            vbFriday 6 금요일 
                            vbSaturday 7 토요일

           - firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수
                            지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다. 
                            vbUseSystem 0 NLS(National Language Support) API 설정 사용 
                            vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값) 
                            vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작 
                            vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작

   예) DatePart("q", now)


57) DateSerial - 지정된 년, 월, 일의 Date 하위 형식인 Variant를 반환한다. 
               즉, 임의의 숫자를 입력받아 날짜 형식으로 반환하는 함수이다. 

   사용법) DateSerial(year, month, day) 
           year : 100에서 9999까지의 수 또는 수식 
           month : 모든 수식 
           day : 모든 수식 
   예) DateSerial(2001, 12, 25) 


58) DateValue - Date 하위 형식의 Variant를 반환한다. 

   사용법) DateValue(date)
   예) DateValue("2000년 12월 25일") 


59) Replace - 문자열 변경

Replace("[문자열]", "[변경할 문자열 패턴]", "[새로운 문자열]")
(예) Response.Write Replace(str, "문자열", "String") & Replace(str, "문자열", "String")

Str = "오늘은 12월 24일 크리스마스 이브입니다"
replace_Str = replace(Str, "이브", "오브")

2020년 9월 22일 화요일

ASP - IP, 브라우저, OS 정보 등 확인 (Request.ServerVariables)



'요청을 한 클라이언트의 아이피(IP) - 자신의 컴퓨터 IP 

Response.write Request.ServerVariables("REMOTE_ADDR") 



'요청을 한 클라이언트 호스트 명 - 정보가 없으면 REMOTE_ADDR과 같음 

Response.write Request.ServerVariables("REMOTE_HOST") 



'요청을 받은 서버 호스트 명( 도메인 명 ) 

Response.write Request.ServerVariables("HTTP_HOST")



'이전페이지

Response.write Request.ServerVariables("HTTP_REFERER")



'현재페이지 경로 

Response.write Request.ServerVariables("URL")



'요청을 받은 서버 호스트의 (아이피) 

Response.write Request.ServerVariables("LOCAL_ADDR")



'요청을 한 클라이언트에서 입력한 문자열의 총길이 

Response.write Request.ServerVariables("CONTENT_LENGTH")



'요청과 응답에 사용되는 PORT ( 웹서버의 기본포트는 80 ) 

Response.write Request.ServerVariables("SERVER_PORT") 



'요청과 응답에 사용되는 프로토콜 버전 

Response.write Request.serverVariables("SERVER_PROTOCOL") 



'요청을 받은 서버의 웹서버 버전 

Response.write Request.serverVariables("SERVER_SOFTWARE") 



'브라우저 정보 및 OS정보 

Response.write Request.serverVariables("HTTP_USER_AGENT") 



'사용하고있는 언어 

Response.write Request.serverVariables("HTTP_ACCEPT_LANGUAGE") 



'현재 참조한 페이지 주소 

Response.write "http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("SCRIPT_NAME")


2018년 12월 14일 금요일

ASP - 웹서비스 연동 방식 (Soap, Get, Post)




const PrivacyService_Real_Addr = "http://도메인/페이지.asmx?WSDL"

Function fn_AuthCheckSoap
Dim objSoap, ip
Set objSoap = Server.CreateObject("MSSOAP.SoapClient30")
objSoap.ClientProperty("ServerHTTPRequest") = True
objSoap.MSSoapInit(PrivacyService_Real_Addr)       
ip = Request.ServerVariables("REMOTE_ADDR")
fn_AuthCheckSoap = objSoap.AuthCheck(ip) ' 호출 메소드
'fn_AuthCheckSoap = 1
End Function







프로젝트를 진행 하다가보면 경우에 따라서 웹 서비스를 호출 하는 일이 많이 있습니다.
이번에는 ASP 에서 Web Service 호출 하는 3가지 방법에 대해서 샘플 중심으로 정리해 보겠습니다.


1. Soap 방식의 Request 샘플 (XMLHTTP)
<%
szSoapServer  =  "http:// test .wsc.com/TEST.asmx "

szSoapMessage =                 "<?xml version='1.0' encoding='utf-8'?>"
szSoapMessage = szSoapMessage & "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"
szSoapMessage = szSoapMessage &   "<soap:Body>"
szSoapMessage = szSoapMessage &      "<GetUserInfo  xmlns='http://" & WEB_SVC_HOST & "/'>"
szSoapMessage = szSoapMessage &         "<intUserSeq>" & nUserNo & "</intUserSeq>"
szSoapMessage = szSoapMessage &      "</GetUserInfo >"
szSoapMessage = szSoapMessage &   "</soap:Body>"
szSoapMessage = szSoapMessage & "</soap:Envelope>"

'다른 웹 서버 간에 서버의 안전한 HTTP 액세스를 위한 메서드와 속성을 제공, XML 데이터 교환 가능
Set objXmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
'파라미터 1.POST / GET 메소드  2.요청을 전달할 URL 3. 비동기식(True) / 동기식(False)
objXmlHttp.open "POST", szSoapServer, False
objXmlHttp.setRequestHeader "Host"          , “test .wsc.com”
'메시지 Body안에 포함된 컨텐츠의 형식을 표시, Charset ? 문자 인코딩 방식 Ex) EUC-KR 한국어, UTF-8 유니코드(8비트)
objXmlHttp.setRequestHeader "Content-Type"  , "text/xml; charset=utf-8"
'헤더메시지 Body의 길이를 알려준다
'objXmlHttp.setRequestHeader "Content-Length", "1000"
'URI를 사용하여 원격 프로시저 호출
objXmlHttp.setRequestHeader "SOAPAction"    , "http:// test .wsc.com/GetUserInfo "
objXmlHttp.send szSoapMessage

%>


2. Post 방식의 Request 샘플 (XMLHTTP)
<%
szServer  =  "http:// test .wsc.com/TEST.asmx "

'다른 웹 서버 간에 서버의 안전한 HTTP 액세스를 위한 메서드와 속성을 제공, XML 데이터 교환 가능
Set objXmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
objReqParam = ""
objReqParam = objReqParam & "?pram1="    & Server.URLEncode(pram1)  & ""
objReqParam = objReqParam & "&pram2="   & Server.URLEncode(pram2)  & ""
objReqParam = objReqParam & "&pram3="   & Server.URLEncode(pram3)  & ""
'파라미터 1.POST / GET 메소드  2.요청을 전달할 URL 3. 비동기식(True) / 동기식(False)
objXmlHttp.open "POST", szServer, False
objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXmlHttp.send objReqParam
%>


3. Get 방식의 Request 샘플 (XMLHTTP)
<%
szSoapServer  =  "http:// test .wsc.com/TEST.asmx?param1=param1&param2=param2&param3=param3 "

'다른 웹 서버 간에 서버의 안전한 HTTP 액세스를 위한 메서드와 속성을 제공, XML 데이터 교환 가능
Set objXmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
'파라미터 1.POST / GET 메소드  2.요청을 전달할 URL 3. 비동기식(True) / 동기식(False)
objXmlHttp.open "GET", szSoapServer, False
objXmlHttp.send()

%>


4. Response Sample (XMLDOM)
<%
If objXmlHttp.status = 200 Then
  'XML 문서를 읽고수정하고생성하고조작
Set objXmlDom = Server.CreateObject("Microsoft.XMLDOM")
  '비동기식으로 동작하는 지를 설정해주는 불(Boolen) 파라미터
  objXmlDom.async = False
objXmlDom.setProperty "ServerHTTPRequest", True
'responseBody ? 응답으로 받은 데이터의 Body 부분을 Unsigned Byte 형식의 배열로 나타낸다.
'responseText - 응답으로 받은 데이터의 Body 부분 string 형식으로 나타낸다.
'responseXML ? 응답으로 받은 데이터의 Body 부분을 MSXML을 이용하여Parsing 하여 나타낸다.
  objXmlDom.Load objXmlHttp.ResponseBody

  'TagName을 가진 태그들의 노드 객체를 찾아 배열로 반환
Set objXmlNode   = objXmlDom.getElementsByTagName("GetUserInfoResult")(0)
' GetUserInfoResult TagName 하위의 태그들의 노드 객체를 찾아 배열로 반환
nUserNo         = objXmlNodeUserInfo.getElementsByTagName("UserNo")(0).Text
szUserID        = objXmlNodeUserInfo.getElementsByTagName("UserID")(0).Text
End If
%>





2018년 6월 27일 수요일

vb/asp - vb or asp 에서 다른 웹페이지 호출하기



vb or asp 에서 다른 웹페이지 호출하기


vb 또는 asp에서 다른 웹페이지를 호출하고 싶어질때가 있다.
물론 C#과 같은 언어는 httpRequest 와 같은 객체가 있어 손쉽게 받을수 있지만
vb or asp에서는 WinHttp.WinHttpRequest.5.1 의 객체를 생성하여 사용할수 있다.

GET 방식으로 페이지를 호출할경우
Function getSiteSourceGet( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "GET", siteURL & "?" & params, False

 httpObj.Send()
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
 Else
  getSiteSourceGet = null
 End If
End Function



POST 방식으로 페이지를 호출할 경우

Function getSiteSourcePost( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , siteURL, False
 httpObj.SetRequestHeader "Content-Type""application/x-www-form-urlencoded"
 '포스트 방식시 위의 라인을 추가해 주어야 한다.

 httpObj.Send params
 '포스트의 파라미터는 Send 호출시 같이 값을 넘겨 주어야 한다.
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourcePost = httpObj.ResponseText
 Else
  getSiteSourcePost = null
 End If
End Function


POST를 이용할시 약간 수정행 주어야 할것이 있는데 Content-Type을 위와 같이 변경해주어야 하며 파라미터를 GET방식과는 다르게 Send 시 값을 넘겨주어야 파라미터값들이 전달되다.

위와 같이 함수를 만들어 사용하면 될것이다.

추가된글 파라미터를 넘길때 GET 방식이던 POST 방식이던 URLEncode 를 해주어야 한다. 그것때문에 한참 헤맸다. 그리고 VB Script로 호출시에는 Server 객체를 사용할수 없음으로 URLEncode 함수를 직접 만들어 사용해야 했다. URLEncode 함수는 쉽게 구할수 있다.

출처: http://solskjaer.tistory.com/71



MSSQL - Cursor vs Temp Table

#테이블 변수사용의 예 use pubs go declare @tmptable table (     nid int identity(1,1) not null,     title varchar (80) not null ) -- 테이블 변수 선언 inse...