BLOG main image
분류 전체보기 (65)
JSP (6)
Android (1)
ASP.NET (0)
MSSQL (4)
PHP (18)
ASP (11)
ASP My Library (2)
오픈 API (1)
HTML (2)
JavaScript (0)
Windows Programming (8)
컴퓨터교양 (14)
객체 지향 (0)
리뷰 및 생각 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
'ASP/ASP My Library'에 해당되는 글 2건
2013. 10. 4. 02:51

개요

HTML 태그에 설정하는 값과 DB에 저장하는 값이 일치 하지 않을 때는

짝을 이루는 함수를 만들어 사용하면 수월 합니다.

 

 

내용

보통 input type="text" 이 넘은 DB text 타입 컬럼에 그대로 저장 해주면 됩니다.

그런데 <input type="checkbox" name="isSMS" checked /> 이건 어떻습니까?

체크박스의 값을 저장하기 위해 DB에 어떤 컬럼을 만드시나요?

보통은 bit 또는 char(1) 로 만드실 껍니다. 어떤 DB는 true, false도 되었던거 같은데....

여튼 여기서는 bit 또는 char(1) 타입의 컬럼에 저장한다고 칩시다.

 

HTML을 SUBMIT() 하여 저 체크박스의 값을 뽑아 보면,

isSMS = Request.Form("isSMS") 으로 뽑겠죠?

checked 일때는 "on" 이라고 설정 됩니다.

 

그럼 "on" 을 그대로 DB에 저장 할 수 없으니,

"on" 일 때는 "1"로 바꿔주고, 아닐 때는 "0"으로 바꿔준 다음 DB에 저장하면 됩니다.

 

여기까지는 저장하는 방법이구요, 이제는 불러올때를 살펴봅시다.

DB에 "1" 또는 "0" 이라고 저장했으니, select 하여,

isSMS= rs("isSMS") 이렇게 뽑아 보면,

"1" 또는 "0"이라고 나올 껍니다.

 

그럼 "1"을 태그에 그대로 먹일 순 없으니,

 "1"은 "checked"로 바꿔주고, "0"이면 ""(빈칸)으로 바꿔주고 나서 먹이면 됩니다.

 

이 내용을 실제 코딩으로 하면, 매번 If .. Else .. End If 문장을 수도 없이 써야 합니다.

이런 경험한적 있으실 껍니다. 아마 수백 수천번씩은 경험하는 내용이 아닌가 싶습니다.

 

 

짝 함수

전 아래와 같이 짝을 이루는 함수를 만들어 사용합니다.

 

'tagValue를 DB에 저장 가능한 형태로 변환한다.

'tagValue는 사실 Request.Form("isSMS") 으로 뽑은 값이다.
Function toDBValue_checkbox(tagValue)
    If tagValue = "on" then
        toDBValue_checkbox = "1"
    Else
        toDBValue_checkbox = "0"
    End If
End Function

 

'dbValue를 태그에 적용 가능한 형태로 변환한다.

Function toTagValue_checkbox(dbValue)
    If dbValue = "1" Then
        toTagValue_checkbox = "checked"
    Else
        toTagValue_checkbox = ""
    End If
End Function

 

 

사용법
Tag에서 값을 받아, DB에 저장하려 할 때

isSMS= Request.Form("isSMS")
isSMS= toDBValue_checkbox(isSMS)  '"1" 또는 "0"

 

DB에서 불러와, Tag에 값을 적용할 때

isSMS= rs("isSMS")
isSMS= toTagValue_checkbox(isSMS)  '"checked" 또는 ""(빈칸)

<input type="checkbox" name="isSMS" <%=isSMS%>>

 

 

참고

3항 연산자가 지원되는 언어에서는 쌍 함수 만드는 것 보다

3항 연산자를 사용하는 것이 더욱 유리할 지도 모릅니다.

코딩 속도 때문인데요. ASP.NET의 경우 tag를 DB에 저장할 때,

isSms.Checked ? "1" : "0"

이래 주면 되거든요. 구지 함수를 만들 필요가 없지요.

꺼낼 때에는 바인딩 개념을 쓰니깐 Checked='<%# (bool)Eval("isSms") %>' 이딴 식으로 하지요.

2013. 10. 1. 00:06

개요

쿼리문 작성 어떻게 하나요?

그냥 막코딩 하면 되지요~~

가독성 따윈 필요 없으니

", name=" + name + ", nick=" +

이런 식으로 해도 되지요.

열맞추고 줄맞추고 해서 가독성 높일 수도 있습니다.

저도 전에 그렇게 했었어요.

 

하지만 잠깐 시간을 내어 아래 함수 사용법을 익히면,

가독성이 높은 쿼리문을 작성 할 수 있습니다.

가독성이 높아지면 실수할 확률이 적어지고, 디버깅 횟수가 줄게 되어

결과적으로 빠른 코딩이 가능해 집니다.

 

가장 중요한 함수는 가독성을 위한 stringFormat()과 보안을 위한 toDbString() 입니다.

 

 

함수들

<%

'닷넷의 String.Format을 흉내낸 함수 입니다.
Function stringFormat(sVal, aArgs)
    Dim i
    For i=0 To UBound(aArgs)
        sVal = Replace(sVal,"{" & CStr(i) & "}",aArgs(i))
    Next
    StringFormat = sVal
End Function

'아래와 같이 결과를 변수에 무조건 대입해야 합니다. 아니면 문법 오류가 발생 합니다.
'Dim result
'result = stringFormat("this {0} a tes{1} string containing {2} values", _
'             Array("is", "t", "some"))

 


'PHP의 eregi_replace 를 흉내낸 함수 입니다.
Function eregi_replace(pattern, replace, text)
    Dim eregObj
    Set eregObj = New RegExp
    eregObj.Pattern = pattern   '패턴 설정
    eregObj.IgnoreCase = True   '대소문자 구분 여부
    eregObj.Global = True       '전체 문서에서 검색
    eregi_replace = eregObj.Replace(text, replace): 'Replace String
End Function

 


'문자열을 쿼테이션으로 감싸주는 것을 기본으로 하여,
'사용자가 입력한 ' 에 대한 지원과
'SQL 인젝션 방지 그리고 자바스크립트 삽입 방지를 지원합니다.
Function toDbString(str)
    str = Replace(str, "'", "''")
    str = "'" + str + "'"
    str = eregi_replace("<script", "< script", str)
    str = eregi_replace("</script", "< /script", str)
    toDbString = str
End Function
%>

 

 

사용법

<%

    query = stringFormat("update bbsCon set title={0}, content={1}, ip={2} where id={3}", _
                            Array(toDbString(title), _
                                  toDbString(content), _
                                  toDbString(Request.ServerVariables("REMOTE_ADDR")), _
                                  id _
                            ) _
            )

    query = stringFormat("insert into bbsCon (title, content, nick, ip) values ({0}, {1}, {2}, {3})", _
                            Array(toDbString(title), _
                                  toDbString(content), _
                                  toDbString(Session("nick")), _
                                  toDbString(Request.ServerVariables("REMOTE_ADDR")) _
                            ) _
            )

 

    query = stringFormat("delete from bbsCon where id={0}", _
                            Array(id))

 

    query = stringFormat("select id, dtReg, title, nick, readCnt, ip from bbsCon order by id desc", _
                            Array())

 

    query = stringFormat("select * from bbsCon where id={0}", _
                            Array(id))
%>

prev"" #1 next