전산실짬밥/ASP2013. 7. 31. 18:34

 

<%

    dim isIE7

 

    If InStr(UCase(request.ServerVariables("HTTP_USER_AGENT")), "MSIE 7") then
        isIE7 = "Y"
    Else
        isIE7 = "N"
    End If

%>

 

<div id="ㅇㅇㅇ" <%If isIE7 = "Y" then%>style="z-index:-1;"<%End if%>>

    어쩌구 저쩌구~~~

</div>

 

 

position속성이 relative이거나 없을 경우에는 z-index를 안써야 정상이다.

하지만 IE7에서는 이게 필요할 경우가 있다.

되게 복잡한 소스코드를 가진 페이지의 경우

온갖 absolute타입의 div들이 여기저기 껴있는 경우

 

absolute타입의 div가 아닌데 자꾸 상위에 나타나버려서 정작 상위에 나와야되는 div들이 안보이는 경우가 있다.

그럴 경우 z-index에 -1을 주면 해결되는데 이게 IE7에서만 작동이되고

다른 브라우저나 다른 IE버전에서는 작동이 안된다는 문제가 있다.

 

그래서 제일 간단한 방법

if문으로 해결해버리는 것이다.

 

asp기준으로 써놨지만, jsp나 php도 같은 방법으로 처리하면 된다.

 

javascript에서 브라우저 속성을 가져와서 if문으로 해서 className 속성을 바꿔주거나 style.zIndex 속성을 바꿔줘도 되지만

위에처럼 그냥 서버측언어로 if문 쓰는게 제일 간단하다.

 

IE7이 젤 싫다.

그냥 강제로 IE8이상으로 업그레이드 되었으면 좋겠다.

Posted by 정훈승
전산실짬밥/ASP2013. 3. 6. 16:15
function fnStrLength(str)
    Dim strLen, strByte, strCut, strRes, char, i
    strLen = 0
    strByte = 0
    strLen = Len(str)
    for i = 1 to strLen
        char = ""
        strCut = Mid(str, i, 1)
        char = Asc(strCut)
        if Len(char) = 1 And char = "1" then
            strByte = strByte + 2
        else
            strByte = strByte + 1
        end if
    next
    fnStrLength = strByte
End function

 

 

function fnStrLengthCut(str, x)
    Dim strLen, strByte, strCut, strRes, char, i, strRtn
    strLen = 0
    strByte = 0
    strLen = Len(str)
    strRtn = ""
    If fnStrLength(str) > x then
        for i = 1 to strLen
            char = ""
            strCut = Mid(str, i, 1)
            char = Asc(strCut)
            if Len(char) = 1 And char = "1" then
                strByte = strByte + 2
            else
                strByte = strByte + 1
            end if
            strRtn = strRtn & strCut
            If strByte = x-2 Then
                Exit for
            End if
        next
        fnStrLengthCut = strRtn & ".."
    Else
        fnStrLengthCut = str
    End if
End function

 

 

첫번째 fnStrLength 함수는

말그대로 글자수를 반환한다.

한글은 2글자로 반환하고, 영문 및 기호는 1글자로 반환한다.

 

두번째 fnStrLengthCut 함수는 글자수만큼 짜르는 거다.

예를들어 fnStrLengthCut("정훈승만세",10)

라고 한다면 정훈승만.. 이렇게 나온다. "정훈승만"이 8글자로 인식되기 때문이다.

뒤에 ..(쩜쩜)까지 포함해서 10글자가 완성된다.

 

네이버에 검색을 좀 해보니 똑바로된 함수를 너무 찾기 힘들더라

정말 어처구니가 없는건

틀린 함수인데도 불구하고 그걸 좋다고 가져다 배껴서 지들 블로그에 써놨다는 것이다.

 

누가 틀린거 올려놓으면 틀린 그대로 배껴서 올려놓는 사람들이 의외로 너무 많다.

적어도 해보고 되는지 안되는지 검사는 해보고 배껴야 되는 것 아닌가

 

어쨋든 내가 해놓은 위 함수들은 백프로 검증되었으니 맘껏 보고 배워가길 바란다.

 

몇몇 의견에 너무나도 쉽게 선동되는 오늘날 흐리멍텅한 좌좀들의 한 단면을 보는 것같아

괜히 일하다가 혼자 화가 나서 좀 끄적여봤다.

 

좌좀들은 남 잘되는 꼴을 못본다.

그걸 보고 배울 생각을 안하고 그저 배가 아프다.

열심히 노력해서 그것을 따라잡을 생각을 안하고 끌어내릴 생각만 한다.

Posted by 정훈승
전산실짬밥/ASP2013. 2. 20. 10:29
Sub checkCreateDir(path, dir)

 

    Dim fso

 

    Set fso = Server.CreateObject("Scripting.FileSystemObject")

 

    If Not fso.FolderExists(path & dir) then

        fso.CreateFolder(path & dir)
    End if

 

    Set fso = nothing

 

End sub

 

Call checkCreateDir("D:\WWW\Images\", "Temp")

 

우선 서버에서 로컬 경로를 알아야 한다.

모른다면 Server.Mappath("\") 명령어로 알 수 있다.

 

위 소스코드는

/images/temp/ 디렉토리(폴더)가 있는지 체크하는 것이고

있으면 그냥 내비두고, 만약 없다면 생성하라는 것이다.

 

어쨋든 위와같이 쓰면된다.

Posted by 정훈승
전산실짬밥/ASP2012. 11. 1. 17:47

오늘 : <%=Date%>

 

이번 달 마지막 날 : <%=DateAdd("d" , -1 , Left(DateAdd("m",1,date),7))%>

 

출력방식은 yyyy-mm-dd

 

 

switch문이나 if문 써서

1월은 31

2월은 현재 년도를 4로 나눈 나머지값 가지고 28인지 29인지 골르고

3월은 또 31

4월은 30....

이 짓거리 할 필요없이

그냥 위에 처럼 써주면 된다.

Posted by 정훈승
전산실짬밥/ASP2012. 4. 19. 11:07
<%

    dim aaa, bbb, ccc

 

    aaa = "<font color='red'>aaa</font>"

 

    bbb = "<font color=" & chr(34) & "red" & chr(34) & ">bbb</font>"

 

    ccc = "<font color=^red^ size=^3^ id=^ccc^>ccc</font>"

    ccc = replace(ccc, "^", chr(34))

%>

 

위 aaa변수와 같이 작은따옴표를 쓰면 사나이답지 못한 코딩이다.

사나이는 위에 bbb변수처럼 웹표준을 준수하여야 한다.

아니면 위에 ccc변수처럼 보기좋게 코딩을 일단 하고 마지막에 리플레이스를 해주면 된다.

 

수많은 사람들이 aaa변수처럼 코딩해놓고 웹표준을 준수했다고 자부하는데

월드와이드웹 사이트에서 웹표준검사해보면 개판이다.

나 스스로도 예전엔 그저 귀찮아서 aaa변수처럼 사나이답지 못한 코딩을 했었다. 부끄러운 과거다.

 

asp뿐만 아니라 jsp, php도 위와 같은 방법으로 하면 된다.

 

 

 

번외로 자바스크립트

var aaa = "<font size='2'>aaa</font>"; 틀린 방법

var bbb = "<font size=\"2\">bbb</font>"; 옳은 방법

자바스크립트는 C언어와 같아서 \(역슬래시)를 하고 따옴표를 찍어주면 된다.

 

 

 

사나이의 길은 멀고도 험하지만, 우리는 사나이의 길을 가야 한다.

Posted by 정훈승
전산실짬밥/ASP2011. 12. 23. 14:26
<%
    if session("visited") = "on" then
        response.write ""
    else
        로그 분석을 하는 명령어 또는 함수 실행
        session("visited") = "on"
    end if
%>

asp뿐만 아니라 jsp와 php에서도 같은 원리로 쓰면 된다.

임의의 세션값을 정의해놓고 그 세션이 존재하면 아무것도 안하고 그냥 지나친다. ex) response.write ""
만약 그 세션값이 없다면
이 사이트에 접속을 시작한 것이다.
그때 그 접속정보를 DB로 날려주고(카운팅이라던지 아이피라던지 웹브라우져라던지...)
다른 페이지를 이동했을 때
똑같은 짓거리를 하지 못하게끔 세션을 준다.

다른 페이지에 갔을 때 세션값이 있으면 아무 일도 일어나지 않는다.
만약 if문이 없다면 카운팅 숫자는 F5(새로고침)누를 때마다 쭉쭉 올라가겠지만
DB에 적지 않는 무리가 갈 것이다.

DB에 넣을 땐 insert into문을 사용해서 클라이언트유저의 접속정보를 넣는다.
주로 세션id, 아이피주소, 접속시간, 처음 세션이 부여된 페이지, 세션이 부여되기 전까지 접속했던 페이지(유입경로),
웹브라우저 종류, 운영체제 종류 등등을 삽입한다.

asp 또는 jsp / php나 javascript에서 충분히 얻을 수 있는 정보이다.
이걸 토대로 만드는 것이다.
차후에 실제 소스를 공개하도록 하겠다.
Posted by 정훈승
전산실짬밥/ASP2011. 11. 16. 14:24
dim memo : memo = request.form("memo")

memo = replace(request.form("memo"), chr(34), "&#34;")
memo = replace(memo, chr(39), "&#39;")


asp에서나 다른 언어에서나 따옴표가 참 성가시다.
위에 처럼 해주면 된다.

34번이 큰따옴표고
39번이 작은따옴표다.

asp에서는 키보드로 찍은 모든 문자가 chr(숫자)로 표현이 가능하다.
그 숫자 그대로 위에 처럼 응용을 해보길 바란다.

컴공이라면, 자료구조 공부할 때 아스키코드 라는 것을 본 적이 있을 것이다.
위에서 언급한 숫자가 바로 아스키코드다.


비슷한 예가 있다면
게시판 글 출력할 때 자동 엔터기능은

replace(글변수, chr(13) & chr(10), "<br>")
처럼 하면된다. <br>을 <br />로 쓰는건 각자 독타입에 따라 맘대로 하길 바란다.

Posted by 정훈승
전산실짬밥/ASP2011. 10. 14. 11:22

function은 return값이 존재하는 함수이고 sub은 그냥 명령어들을 모아놓은 것일 뿐이다.

function을 예를 들어보자
<%
    function FindUnitCode(x)
        dim sql
        sql = "select 필드명 from 테이블명 where 조건 = x"
        set rs = DB컨넥변수.execute(sql)
        FindUnitCode = rs("필드명")
        set rs = nothing
    end function
%>

<%
    response.write "출력값은 " & FindUnitCode(1234) & "이랑께!"
%>


c / java  / php에서는
return rs("필드명");
요런 식으로 표현을 하겠지만 asp에서는 위에처럼 표현을 한다.



그 다음엔 sub을 예를 들어보자
<%
    sub FindUnitCode(x)
        dim sql
        sql = "select 필드명 from 테이블명 where 조건 = x"
        set rs = DB컨넥변수.execute(sql)
        response.write "출력값은 " & rs("필드명") & "이랑께!"
        set rs = nothing
    end sub
%>

<%
    call FindUnitCode(1234)
%>



사나이라면 function과 sub을 절대로 혼용해서는 안된다.
상황에 따라서 무엇을 써야 하는지 잘 선택해서 골라쓰면 된다.

function을 선언해놓고 sub처럼 해도 되긴 되더라
하지만 진정한 사나이는 정석대로 올바르고 건전한 코딩습관을 가져야 한다.
Posted by 정훈승
전산실짬밥/ASP2010. 12. 21. 18:31

가장 먼저 확인할 것은, 서버컴퓨터에 SMTP가 설치되어있어야 한다.

<%
  Set objMessage = Server.CreateObject("CDO.Message")
    objMessage.From = "보내는사람이름<hushou@hanmail.net>"
    objMessage.To = "받는사람이름<hushou@hanmail.net>"
    objMessage.Subject = "이메일 제목"
    objMessage.htmlBody = "html 적용 내용"
    'objMessage.textBody = "일반 텍스트 내용"
    objMessage.htmlBodyPart.Charset = "ks_c_5601-1987"
    'objMessage.textBodyPart.Charset = "ks_c_5601-1987"
    objMessage.Send
  Set objMessage = nothing
%>



주석으로 달린 txtBody항목과 htmlBody항목 둘중에 하나를 골라서 쓰면 된다.

데이터베이스에 이메일 목록이 있고, 전체 이메일 발송이 필요한 경우에
유용하게 쓰일 수 있다.
Posted by 정훈승
전산실짬밥/ASP2010. 11. 3. 18:51
<%
if strfilesize(i) > (2 * 1024 * 1024) then %>
    <script type="text/javascript">
        alert("2MB가 넘는 파일은 업로드 할 수 없습니다.");
        history.go(-1);
    </script> <%
    response.end
end if

sql = "insert into 어쩌구저쩌구"

dbconn.execute(sql)
%>

위와 같은 경우에 쓰인다.

만약에 response.end가 없으면
자바스크립트에 의해 한페이지 뒤로 넘어감에도 불구하고
sql문이 실행이 된다.

response.end가 있어야지 밑에 나오는 sql문 실행이 안된다.

즉, response.end는 밑에 있는 소스 전부 쌩깐다는 뜻이다.


php는 이런거 필요없이 자바스크립트로 한페이지 뒤로 가게 해놓으면
하던거 다 멈추고 무조건 뒤로 간다.
Posted by 정훈승