세이박스

'웹프로그램'에 해당되는 글 286건

  1. JSP DB 연결하기
  2. ASP equivalent of PHP's iconv
  3. BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)
  4. 자바스크립트에서 confirm() 을 사용할 경우 확인, 취소 로 나오는 버튼을 Yes, No 로 바꾸기
  5. CSS 이미지 테두리를 액자처럼 라인 넣어 주기
  6. AJAX란?
  7. 자바스크립트 마우스 따라 다니는 이미지 2탄
  8. 자바스크립트 기초 기능 부터 활용할 수 있는 기능을 예제로 보여줌
  9. CSS 마우스 커서 모양 변경 하고 싶을 때 cursor
  10. 자바스크립트 마우스 따라 다니는 이미지
  11. php upload 용량 늘리기
  12. PHP str_pad() 자릿수 맞혀 수정하기
  13. [PHP] IP4 대역 . 제거 및 자릿수 변경하기
  14. [PHP] 보안 국내 IP 대역만 접속 하도록 응용
  15. ASP 메일 발송시 다음 이유 때문에 원격 도메인 'naver.com'에 메시지를 배달하지 못했습니다.
  16. ASP 메일발송시 오류 Microsoft VBScript 런타임 오류 error '800a0046' 사용 권환이 없습니다.
  17. PHP 접속자 OS가 vista 인지 XP 인지 확인 하기
  18. addslashes() stripslashes() DB 저정시 '홀따옴표에 \백슬러시 붙였다 빼주는 함수
  19. [HTML] meta 메타 태그 종류
  20. <HR> 태그 사용해서 점선 표시 하기
  21. [자바스크립트] 뉴스 속보 한줄로 타자치듯이 보여주는 기능!
  22. php uft-8, euc-kr 인코딩 변환 iconv()
  23. 자바스크립트 함수 체크
  24. [자바스크립트] 한글 처리
  25. [PHP] 한글삭제 정규식
  26. PHP strip_tags() 문자열에 html 태그나 php문구 모두 제거
  27. [JSP] how to upload image using JSP
  28. PHP Header 다운로드 에서 파일이름이 한글로 된경우 바로 열기 다운로드 안되는경우
  29. 프록시 proxy 접속자 실제 아이피 ip 확인 가능
  30. ASP 제목이나 글자 길이가 지정한 길이보다 초과하면 잘라 내고 ... 붙이기

JSP DB 연결하기

웹프로그램

db 를 연결하기 위해서는 약간의 자바 문법의 습득이 필요합니다.
그래서 약간의 java내용(db연결할 정도) 의 내용을 설명하겠습니다.
db를 연결하기 위해서는 약간의 클래스의 package(클래스들의 모임 , 클래스란 작은 모듈단위의 프로그램)를 import를 시켜야 합니다.
import javax.servlet.*;         ==>javax.servlet의 모든(*)클래스를 사용할 준비가 됐다.. 라구 선언하는 것
import java.io.IOException;     ==>java.io.IOException 의 클래스 하나를 사용할 준비가 됐다 라구 선언하는 것

c 에서 말하는 include입니다.
그런데 jsp에서는 어떤 내장 클래스를 사용하기 위해서는 java가 아니므로 약간은 다르게 선언 합니다.
        예 : <%@ page import="java.sql.*" %> ==>java.sql에 있는 모든 내장 클래스를 사용하겠다. 라구 서언하는 것
참고로 jsp에서 내장 객체 서언은 <%@ page import="이곳에 내장객체 쓰기" %> 형식으로 사용합니다.

지금까지 내장객체 사용하는 방법에 대해서 알아 보았습니다.
본격적으로 db연결하는 방법(jsp에서는 지원안하는 것으로 알고 있슴, 그래서 java논 사용해야함)
1.객체 선언
2.먼저 드라이버 설정
3.Connection 만들기
4.statement 만들기
5.sql문 만들기
6.실행하기 순으로 만들어 지구요..


1.객체 선언
Connection con=null;  ==>Connection 객체를 사용하겠다 선언 하는 것
Statement stmt=null;  ==>Statement 객체를 사용하겠다 선언 하는 것
ResultSet rs=null; 

2.먼저 드라이버 설정
Class.forName("oracle.jdbc.driver.OracleDriver");  ==>오라클 드라이버(오라클 db)를 사용하겠다 선언하는 것
Class.forName("org.gjt.mm.mysql.Driver");        ==>my_sql 드라이버 설정
드라이버 설정은 객각의 밴더(database를 만든 회사)에서 구할 수 있고 참고로 오라클은 오라클을 설치하며
C:\oracle\ora81\jdbc\lib 에보면
classes12.zip이란 파일이 있구요 그것을 열어보면 디렉토리 구조가 oracle.jdbc.driver 되었구 .OracleDriver.class가 있을 것입니다.
그리구 드라이버 설정 전에 환경변수에  C:\oracle\ora81\jdbc\lib\classes12.zip 가 설정이 되어 있어야 하구요..

3.connection 만들기
DriverManager.getConnection(String sid, String userId,String passwd) 라는 클래스를 쓰거든요..
sid jdbc:oracle:thin:@바꿔쓸 부분1(자신의 ip):1521:바꿔쓸 부분2(자신의 sid)
바꿔쓸 부분 하나 : 자신의 아이피로 자신의 db이면 127.0.0.1로 쓰면 되구
아니면 211.230.51.241이란 실제 자신의 아이피를 쓰면 된다.
바꿔쓸 부분2 oradev 자신의 db의 sid(database 인식자)이름을 쓰면 되구요...
이것의 위치는 오라클의 경우
C:\oracle\ora81\network\ADMIN\listener.ora 파일을 보면
SID_NAME = oradev 이라구 있는데 oradev를 참조하면 된다.
con = DriverManager.getConnection("jdbc:oracle:thin:@211.230.51.241:1521:oradev", "scott","tiger");
이렇게 구성하면 되구요..

4.statement 만들기
stmt = con.createStatement(); ==>그냥 외우세요..

5.sql문 만들기
String sql = "select * from emp"; ==>sql 문 쓰기 (사원 테이블 검색하기 sql문)

6.실행하기
select 시(검색)
ResultSet(검색한 내용을 담는 객체) 을 만드는 과정 입니다.
rs = stmt.executeQuery(sql); sql이란 위에서 정의한 sql문

rs.getString(1)==>첫번째 column의 내용을 가지오기
rs.getString("emp_no"); ==>column이름이 emp_no인 것 가져오기

칼럼의 전체 내용 가져오려면 while으로 돌려야 하구요.
rs.next()은 다음의 column을 가져오라는 명령어..
하나만 가져오려구 해두 꼭
rs.next()해야 하구요..

칼럼의 모든 값 가져요기
while(rs.next()){
                        System.out.println(rs.getString("emp_no"));
}

칼럼의 하나만 가져요기
rs.next();
System.out.println(rs.getString("emp_no"));

System.out.println=>tomcat서버에 어떤 ()안의 내용을 출력하기

out.println=>web 화면에 어떤 ()안의 내용을 출력하기


완료..
그런데 이런한 과정을 꼭
try{

}catch(Exception e){
        System.out.println("에러가 발생하였습니다.");
}
문안에 넣아야 해요.. 에러가 날 소지가 있다구 해서 예외처리 되었거든요..

초보자가 보기에는 내용이 넘 어렵죠,
jsp나 java를 하신 분들은 쉬운 내용이겠지만..
초보자 분들은 내용이 어려우시면 외우셔서 사용하셔두 됩니다.

 

전체 소스는 다음과 같습니다.

<%@ page import="java.sql.*" %>
<%
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{

                Class.forName("oracle.jdbc.driver.OracleDriver");
                con = DriverManager.getConnection("jdbc:oracle:thin:@211.230.51.241:1521:oradev", "scott","tiger");
                String sql = " select * from emp";
                stmt = con.createStatement();       
                rs = stmt.executeQuery(sql);
                while(rs.next())
                {
                        out.println(rs.getString("emp_no"));
                }
                out.println(con);
        }catch(Exception e){
                e.printStackTrace();
        }
        finally
        {
        if(rs != null) { try{ rs.close(); }catch(Exception e){} }
        if(stmt != null) { try{ stmt.close(); }catch(Exception e){} }
        if(con != null) { try{ con.close(); }catch(Exception e){} }
    }
%>

ASP equivalent of PHP's iconv

웹프로그램

PHP 에서는 ICONV 라는 프로그램 툴을 이용하여 UTF-8 로 변환하여 뿌리면 정상적으로

한글이 보여 집니다.


ASP 의 같은 경우는 .



아래의 함수를 써보세요..  짧은 소견이나마 적어 봅니다.


Public Function toUTF8(szSource As String) As String
    On Error GoTo ErrHandler

    Dim szChar As String
    Dim WideChar As Long
    Dim nLength As Integer
    Dim i As Integer
   
    nLength = Len(szSource)
    For i = 1 To nLength
        szChar = Mid(szSource, i, 1)

        If Asc(szChar) < 0 Then
            WideChar = CLng(AscB(MidB(szChar, 2, 1))) * 256 + AscB(MidB(szChar, 1, 1))
           
            If (WideChar And &HFF80) = 0 Then
                toUTF8 = toUTF8 & "%" & Hex(WideChar)
            ElseIf (WideChar And &HF000) = 0 Then
                toUTF8 = toUTF8 & _
                            "%" & Hex(CInt((WideChar And &HFFC0) / 64) Or &HC0) & _
                            "%" & Hex(WideChar And &H3F Or &H80)
            Else
                toUTF8 = toUTF8 & _
                            "%" & Hex(CInt((WideChar And &HF000) / 4096) Or &HE0) & _
                            "%" & Hex(CInt((WideChar And &HFFC0) / 64) And &H3F Or &H80) & _
                            "%" & Hex(WideChar And &H3F Or &H80)
            End If
        Else
            toUTF8 = toUTF8 + szChar
        End If
    Next
    Exit Function
   
ErrHandler:
    toUTF8 = ""
End Function


위함수를 써서 변환 해보세요

 

BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

웹프로그램
BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

이들 트랜잭션 메서드는 아래와 같이 Connection 개체 내의 트랜잭션 프로세싱을 관리합니다.
  • BeginTrans는 새 트랜잭션을 시작합니다.

  • CommitTrans는 모든 변경 내용을 저장하고 현재 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

  • RollbackTrans는 현재 트랜잭션 동안 취해진 모든 변경 내용을 취소하고 이 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

구문
level = object.BeginTrans()
object.BeginTrans
object.CommitTrans
object.RollbackTrans

반환값
BeginTrans는 트랜잭션의 중첩 수준을 나타내는 Long 변수를 반환하는 함수로서 호출될 수 있습니다.

매개 변수
object   Connection 개체

Connection
원본 데이터에 한 단위씩 취해진 일련의 변경 내용을 저장하거나 취소하려면 Connection 개체와 함께 이들 메서드를 사용합니다. 예를 들어 두 계좌 사이에 돈을 전송하려는 경우, 한 계좌에서 일정 금액을 인출한 후 다른 계좌에 동일 금액을 추가할 수 있습니다. 이 때 어느 한 쪽이라도 업데이트가 제대로 되지 않으면 계좌 사이의 금액이 균형을 이루지 않습니다. 열린 트랜잭션에서 이러한 변경을 수행하면 이들 변경 내용들이 모두 적용되게 하거나 또는 전혀 적용되지 않게 할 수 있습니다.

메모   모든 제공자가 트랜잭션을 지원하는 것은 아닙니다. Connection 개체의 Properties 컬렉션에 제공자 정의 속성 "Transaction DDL"이 표시되는지 확인하여 해당 제공자에서 트랜잭션이 지원되는지 확인하십시오. 제공자가 트랜잭션을 지원하지 않을 경우에 이들 메서드 중 하나를 호출하면 오류가 발생합니다.
일단 BeginTrans 메서드가 호출되면 제공자는 트랜잭션을 끝내기 위해서 CommitTransRollbackTrans를 호출하기 전에는 어떤 변경도 즉시 수행하지 않습니다.
중첩 트랜잭션을 지원하는 제공자의 경우, 열린 트랜잭션 내에서 BeginTrans 메서드를 호출하면 새로운 중첩 트랜잭션이 시작됩니다. 반환값은 중첩 수준을 표시합니다. 즉, 반환값이 "1"인 경우에는 최상위 트랜잭션(이 트랜잭션은 다른 트랜잭션 내에서 중첩되지 않음)을 열었다는 표시이며, "2"는 둘째 수준의 트랜잭션(최상위 트랜잭션과 중첩된 트랜잭션)을 열었음을 나타냅니다. CommitTrans 또는 RollbackTrans를 호출하면 가장 최근에 열었던 트랜잭션에만 영향을 줍니다. 즉, 다른 상위의 트랜잭션에 영향을 주려면 현재 트랜잭션을 닫거나 롤백해야 합니다.
CommitTrans 메서드를 호출하면 연결 상태의 열린 트랜잭션 내에서 취해진 변경 내용을 저장하고 이 트랜잭션을 닫습니다. RollbackTrans 메서드를 호출하면 열린 트랜잭션 내에서 취해진 모든 변경 내용을 되돌리고 트랜잭션을 닫습니다. 열려 있는 트랜잭션이 없을 때 이들 메서드를 호출하면 오류가 발생합니다.
Connection 개체의 Attributes 속성에 따라 CommitTrans 메서드 또는 RollbackTrans 메서드를 호출하면 자동으로 새 트랜잭션이 시작됩니다. Attributes 속성을 adXactCommitRetaining으로 설정하면 CommitTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다. Attributes 속성을 adXactAbortRetaining으로 설정하면 RollbackTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다.

Remote Data Service
클라이언트 Connection 개체에서는 BeginTrans, CommitTransRollbackTrans 메서드를 사용할 수 없습니다.

자바스크립트에서 confirm() 을 사용할 경우 확인, 취소 로 나오는 버튼을 Yes, No 로 바꾸기

웹프로그램

자바스크립트에서 cofirm() 을 사용할 경우 OK, CANCEL, 확인, 취소 로 나오는 버튼을

사용자 삽입 이미지
 

Yes, No 로 변경하고자 할경우 다음과 같이 사용합니다.

사용자 삽입 이미지



function window.confirm(str) {
 execscript('n = msgbox("'+str+'","4132")',"vbscript");
 return(n == 6);
}
if(confirm("위탁에 대한 동의를 하시겠습니까?")) {
 alert('동의 하셨습니다.');
}

※ IE 전용 기능 입니다.

CSS 이미지 테두리를 액자처럼 라인 넣어 주기

웹프로그램
사용자 삽입 이미지


이미지만 출력시 다소 허전한 느낌을 줄때 테두리에 연한 회색으로 그려 주면 다소 깔끔하게 보입니다.
스타일 적용은 다음과 같습니다.

<div style="width:이미지폭px;height:이미지높이px;border:2 solid #CDCDCD;padding:2px;">
<img src="이미지">
</div>

위처럼 Div 로 이미지 소스를 감싸 주시면 되며
width : 이미지의 폭 픽셀 값을 넣어 주시구요
height : 이미지의 높이 픽셀 값을 넣어 주세요
border : 라인 두께 인데 적절히 조절해서 이용하세요
solid #color : color 값은 이미지에 어울리는 색으로 넣어 주시면 됩니다.
padding : 이미지와 라인 사이 공백으로써 적절히 띄워주시면 깔끔하게 보입니다. 큰 이미지 일수록 많이 띄워야 겠죠..^^ 

AJAX란?

웹프로그램

AJAX는 보통 아작스, 에이잭스 등으로 불리는데, 개인적으로는 AFC Ajax 의 영향으로 아약스라 부르고 있다. -_-;; 호칭은 개인적인 취향이니 알아서 부르면 된다.

AJAX는 Asynchronous Javascript And Xml의 약자로 말 그대로 비동기적 자바스크립트와 XML 을 사용하여 동적으로 통신이 진행되는 기술이다.  기존의 웹  프로그래밍의 경우 페이지의 이동없이 브라우저 화면을 동적으로 변경하는것이 불가능했지만 AJAX를 통하여 동적인 화면변경이 가능하다. 실제로 브라우저의 페이지 이동보다 AJAX의 통신속도가 더 빠른데, 그 이유는 AJAX를 사용하면 페이지 전체뿐이 아니라 일부만을 변경할수도 있기 때문이다. 실제 적용된 예시로는 구글맵스나 콩나물지도같은 지도서비스등이 있다.


AJAX는 다음의 기술을 기반으로 만들어진다.

    • Javascript : 정보 전송 및 리턴받은 정보를 브라우저에 적용
    • XML, HTML, DTML, XHTML : 페이지의 표현
    • XmlHttpRequest : 정보의 교환
    • DOM : HTML 자체를 XML의 형태로 취급하여 데이터를 조작
    • CSS : HTML의 각 요소에 대해 스타일을 설정


AJAX를 사용하면 다음과 같은 장점을 가진다.

자바스크립트 마우스 따라 다니는 이미지 2탄

웹프로그램
마우스 커서가 움지는 위치를 따라 다니는 이미지 기능을 앞전에 올렸는데 문제점이 스크롤을 내려 버리면 좌표값이 이상해지는 문제를 발견해서 스크롤시엔 스크롤에의한 이동된 좌표값을 추가하도록 했습니다.

사용자 삽입 이미지


<div id=cs style="visibility:hidden;position:absolute;left:10;top:10;width:125;height:35;">
<img src="http://amsimg.daum-img.net/www2/0Cbw/cJcd/samsung_bs_12535_0415_.jpg">
</div>
<script>
function Move1(e) {
 document.cs.left=e.pageX + 10;
 document.cs.top=e.pageY + 10;
}
function Move2(){
 cs.style.left=event.clientX + document.body.scrollLeft;
 cs.style.top=event.clientY + document.body.scrollTop;
}
if (document.layers) {
 document.captureEvents(Event.MOUSEMOVE);
 document.onmousemove=Move1;
}
if (document.all) {document.onmousemove=Move2;}
function Show_icon(divid) {
  cs.style.visibility = "visible";
}
function Hide_icon(divid) {
  cs.style.visibility = "hidden";
}
</script>
<img src="http://photo-media.daum-img.net/200904/15/mediadaum/20090415114211.511.jpg"  onmouseover="Show_icon()" onmouseout="Hide_icon()">

자바스크립트 기초 기능 부터 활용할 수 있는 기능을 예제로 보여줌

웹프로그램
자바스크립트 기초 기능 부터 활용할 수 있는 기능들을 예제로 보여줍니다.
해당 소스를 보고 싶으면 예제 페이지에서 마우스 우측 버튼 클릭후 소스 보기 하세요!

번호

예  제      소   스

 구분

적용 환경

1

  경고 메시지 표시하기

Message

Box


2

  프롬프트 박스로 패스워드 만들기

 

3

  Confirm 박스로 해당 페이지 표시하기

 

4

  웹 문서 나갈 때 감사 메시지 뛰우기

 

5

  시작페이지로 지정하기

 

6

  자동으로 즐겨찾기에 추가하기

 

7

  새로운 윈도우 자동으로 열기

Window


8

  클릭했을 때 새로운 윈도우 열기

 

9

  지정한 위치에 새로운 윈도우 열기

 

10

  리모콘 윈도우 만들기

 

11

  5초 후 자동으로 닫히는 윈도우

 

12

  자동으로 웹 문서 새로 고치기

 

13

  윈도주가 흔들리는 진동 효과주기

 

14

  윈도우를 자동으로 스크롤하기

 

15

  풀 스크린으로 윈도우 열기(종료: ALT + F4)


16

  채널모드로 윈도우 열기

 

17

  모달 다이얼로그 박스 열기

 

18

  팝업 윈도우가 점점 커지며 나타나는 효과

 

19

  출력을 위한 인쇄 버튼 만들기

 

20

  웹 문서에 문자열 찾는 기능 추가하기

 

21

  자바스크립트 디버깅 창

 

22

  배경색과 글자 색상 바꾸기

Document


23

  페이드 인(Fade in) 효과주기

 

24

  낮과 밤에 따라 바뀌는 배경 만들기

 

25

  마지막으로 수정한 시간 표시하기

 

26

  타이틀 바에 실시간 표시하기

 

27

  로컬디스크에서 문서 읽기 금지

 

28

  로딩(Loading)되는 장면 만들기

 

29

  다이나믹한 풍선 도움말 만들기

 

30

  DHTML로 다이나믹한 메뉴 만들기

 

31

  롤오버 이미지 1

Image


32

  롤오버 이지지 2

 

33

  롤오버 이미지로 선택 메뉴 표시하기

 

34

  링크 앞에 화살표 표시하기

 

35

  클릭하는 순간 다른 이미지로 바꾸기

 

36

  링크된 그림에 생기는 점선 없애기

 

37

  웹 문서에 이미지 뷰어 만들기 1

 

38

  웹 문서에 이미지 뷰어 만들기 2

 

39

  이미지가 바뀌는 슬라이드 효과주기

 

40

  이미지가 호수에 비치는 효과

 

41

  오버랩되면 타나나는 슬라이드 효과

 

42

  스크롤 바를 움직여도 고정되어 있는 이미지

 

43

  추천 사이트 랜덤으로 꾸미기

Link


44

  웹 문서 소스 보여주기

 

45

  히스토리 목록에 흔적 남기지 않기

 

46

  자동으로 메일 제목과 내용 입력시키기

 

47

  하이퍼텍스트에 형광펜 효과 주기

 

48

  롤오버된 하이퍼텍스트의 크기와 색 바꾸기

 

49

  한꺼번에 두 개의 프레임 내용 바꾸기

Frame


50

  다른 사이트의 프레임 잔재 없애기

 

51

  펼쳐지고 접혀지는 프레임 만들기

 

52

  IFRAME 내에 있는 문서 바꾸기

 

53

  웹 문서에 주소 입력란 넣기

Form


54

  메일 방명록 만들기

 

55

  사용자 입력의 타당성 검사하기

 

56

  라디오 버튼을 이용한 문제 풀이

 

57

  ID와 비밀번호의 타당성 검사하기

 

58

  한글 입력만 허용하는 폼문서

 

59

  숫자 입력만 허용하는 폼문서

 

60

  주민등록 번호 타당성 검사

 

61

  필수입력사항 타당성 검사

 

62

  다른사이트로 이동하는 선택 목록 만들기

 

63

  선택 목록에 이동 버튼 만들기

 

64

  선택된 URL을 다른 프레임에 출력하기

 

65

  폼 안의 글자에 타이핑 효과 주기

 

66

  폼 안에 글자 스크롤 시키기

 

67

  웹 문서에 FTP 접속 기능 추가하기

 

68

  선택된 항목에 따라 다른 선택 목록 만들기

 

69

  화면 해상도에 적합한 페이지 출력하기

Browser


70

  브라우저에 적합한 페이지 출력하기

 

71

  사용자 IP주소 나타내기

 

72

  상태 표시줄에 링크에 대한 설명 표시하기

Status


73

  상태 표시줄에 타이프 치듯 글자 출력하기

 

74

  상태 표시줄에 스크롤디는 글자 제어하기

 

75

  앞으로 가기, 뒤로 가기 버튼 만들기

History


76

  이전에 입력한 내용 기억하기

 

77

  방문 유무에 따른 다른 환영 메시지

 

78

  방문자의 방문 횟수 표시하기

 

79

  방문 횟수와 마지막 방문시간 표시하기

 

80

  공지 화면 처음 한번만 띄우기

 

81

  사용자의 선택에 따라 공지 창 열기

 

82

  현재 시간 표시하기

Time


83

  현재 시간과 날짜 표시하기

 

84

  텍스트 입력란에 현재 시간 표시하기

 

85

  문서 내에 현재 시간 표시하기

 

86

  이미지로 현재 시간 표시하기

 

87

  그림자가 비치는 시계 표시하기 1

 

88

  그림자가 비치는 시계 표시하기 2

 

89

  Data 객체로 달력 만들기

 

90

  특정일까지 남은 날짜 카운트다운하기

 

91

  사이트에 머무른 시간 표시하기

 

92

  마우스 오른쪽 버튼 사용 금지시키기

마우스

&

키보드


93

  GIP 이미지가 마우스를 따라 다니는 효과

 

94

  물결치면 마우스를 따라 다니는 글자

 

95

  물결치며 마우스를 따라다니는 이미지

 

96

  자신만의 팝업 메뉴 만들기

 

97

 지정된 사이트로 이동하는 단축키 정의하기

 

98

  접속할 때마다 다를 배경 음악 들려주기

Sound


99

  사용자가 선택한 음악 들려주기

 

100

  배경 음악을 순차적으로 들려주기

 

101

  배경 음악 무작위로 연속해서 들려주기

 

102

  링크에 마우스 대면 소리나는 사운드 효과 주기

 

103

  체계적인 트리(Tree) 메뉴 만들기

기타


104

  마우스 대면 타나나는 슬라이딩 메뉴

 

105

  웹 문서에 계산기 기능 추가하기

 

106

  마키(Marquee)기능 제어하기

 

107

  링크에 패스워드 걸어두기

 

108

  웹문서에 검색엔진 기능 추가하기

 

109

  카운트다운 후 다른 문서로 이동하기

 

 110

 자신의 홈페이지를 요일마다 변경을

 

 

111

 실시간 뉴스

 

 

112

 일기 예보

 

 

113

 우편번호 검색

 

 

114

 음악소스(bgm)

 

 

115

 전화기 멜로디

 

 

 116

 이미지 필터효과

 

 

117

 마우스를 대면 색상이 바뀌는 태그

 

 

118

 우주전광판

 

 

119

 팝업 광고창 제거

 

 

120

 연속해서 다른 음악으로 이어지는 스크립트

 

 

121

 애플랫 배너

 

 

 122

 요일 (날짜) 태그

 

 

 123

 공지사항창 1

 

 

 124

 공지사항창 2

 

 

 125

 메일창

 

 

126

공지사항창 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CSS 마우스 커서 모양 변경 하고 싶을 때 cursor

웹프로그램
마우스 커서 모양을 변경하고자 할때 cursor:에 모양을 지정해주면 되니다.

style="cursor:hand"

style="cursor:wait"

style="cursor:help"

style="cursor:move"

style="cursor:crosshair"

style="cursor:n-resize"

style="cursor:e-resize"

style="cursor:s-resize"

style="cursor:w-resize"

style="cursor:se-resize"

style="cursor:sw-resize"

style="cursor:ne-resize"

style="cursor:nw-resize"  

자바스크립트 마우스 따라 다니는 이미지

웹프로그램
이미지 위에 마우스를 올려 놓으면 이뿐 아이콘이 나타 나며 마우스가 돌아 다닐때 같이 따라 다니도록 하며 이미지 영역을 마우스가 벗어나면 따라다니던 마우스가 사라지게 하는 효과

사용자 삽입 이미지
<div id=cs style="visibility:hidden;position:absolute;left:10;top:10;width:125;height:35;background-Image:url('http://amsimg.daum-img.net/www2/0Cbw/cJcd/samsung_bs_12535_0415_.jpg');"></div>
<script>
document.onmousemove=function () {
 cs.style.pixelLeft=event.x+10;
 cs.style.pixelTop=event.y+5;
}
function Show_icon(divid) {
  cs.style.visibility = "visible";
}
function Hide_icon(divid) {
  cs.style.visibility = "hidden";
}
</script>
<img src="http://photo-media.daum-img.net/200904/15/mediadaum/20090415114211.511.jpg"  onmouseover="Show_icon()" onmouseout="Hide_icon()">


위소스에서 width, height 는 따라 다니는 이미지의 크기를 지정 합니다.
event.x+10, event.y+10  에서 + 값을 증가 할수록  만큼 따라 다니는 이미지가 마우스 커서에서 멀어집니다.

위 글은 세이박스에서 작성한 글입니다.

php upload 용량 늘리기

웹프로그램
업로드시 용량 제한으로 인해 업로드 되지 않는 경우가 있습니다.
php.ini 파일을 수정해주시면 되는데
기본 설정이 보통 2MB 로 되어 있습니다.
php.ini 파일의 설치 경로에 따라 다를 수 있지만 대부분
기본 경로는 /usr/local/php/lib/php.ini 에 보통 설치 합니다.
해당 파일에서 아래 위치 부분들을 수정 해주시면 됩니다.

파일 업로드 적용 여부
file_uploads = On

파일 업로드 최고 용량 지정 MB
upload_max_filesize = 20M

POST상에 전송되는 용량 지정 upload_max_filesize와 동일하게 맡혀 주시면 됩니다.
post_max_size = 20M

파일이 업로드 되는데 걸리는 시간 최대값, 300초면 5분정도이며 무한정 세션을 열어 주면 서버 부하가 많이 걸려 시간을 제한을 둡니다. 인터넷 느린 사용자를 감안해서 조금 넉넉하게 잡아 주시면 됩니다.
예로 20MB 제한을 할경우 20MB 파일을 올려보세요!
max_execution_time = 300

업로드 동안 사용할 메모리? 용량 지정해줍니다.
memory_limit = 20M

수정후 아파치 재시작 하시면 됩니다. 

PHP str_pad() 자릿수 맞혀 수정하기

웹프로그램
변수값에서 자릿수를 맞혀줘야 할때가 종종 있다.
예를 들면 날짜 데이터가 2009-04-10 이런식으로 처리되어야 하는데
넘어온값이 "2009-4-10" 이렇게 넘어 오는 경우 예전에
if($day<10) $day = "0".$day;
이렇게 변경 해주곤 했었다.
하지만 이보다 자릿수가 많은경우 매우 복잡해진다.
예를 들어 00000210 으로 맞혀 줘야 한다면 OTL 헉...

하지만 str_pad() 함수를 이용하면 간단하다.

Description

string str_pad ( string $input , int $pad_length [, string $pad_string= " " [, int $pad_type= STR_PAD_RIGHT ]] )

This functions returns the input string padded on the left, the right, or both sides to the specified padding length. If the optional argument pad_string is not supplied, the input is padded with spaces, otherwise it is padded with characters from pad_string up to the limit.


위 내용은 php.net에서 설명하는 내용 입니다.
str_pad(검사할값,자릿수,변경할값,왼쪽또는오른쪽기준);

예를 들어보겠다.
$test = "123" 을 자릿수 10자리로 한다면

echo str_pad($test,10,"0",STR_PAD_LEFT);

결과는 "0000000123" 와같이 출력이 됩니다.

그럼, 잘활용 하세요!

[PHP] IP4 대역 . 제거 및 자릿수 변경하기

웹프로그램




국내 IP대역만 허용하기 위한 방법에 대한 앞 게시글을 보신분이라면 IP를 일괄 적으로 편하게 수정 했으면 하는 분들 있을것 같아 제가 변경 하는데 사용한 소스 올립니다.

일단 엑셀파일에서 시작IP 와 마지막 IP를 에디터플러스로 불러와서


변경 : (줄의시작) ^ -> "
변경 : (텝영역복사) 텝 -> _
변경 : (줄의끝) $ -> ",
변경 : (개행) \n -> 제거

위와 같이 4단계를 거치면
"202.6.95.0_202.6.95.255","202.14.103.0_202.14.103.255","202.14.165.0_202.14.165.255",....
처럼 만들어 진다.

이 값을 아래 소스에 넣어서 돌리면 각 IP 자릿수를 맞도록 수정 해줍니다.
아래과정은 소스상에 넣어두면 매번 번거롭게 변환 과정 안거쳐도 되겠지만
그래도 자주처리하는 작업이 아니므로 웹부하를 들어줄겸 그냥 수작업으로 해주는게 좋을듯 합니다.

<?
//2009.4.10 받아온 IP대역
$ipgroup = array("202.6.95.0_202.6.95.255","202.14.103.0_202.14.103.255","202.14.165.0_202.14.165.255",......);

for($i=0;$i<count($ipgroup);$i++) {
 $tmpip = explode("_",$ipgroup[$i]);

 $userip = $tmpip[0];
 $tmpuserip = explode(".",$userip);
 $userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
 $ipsave .= "\"".$userip."_";
 
 $userip = $tmpip[1];
 $tmpuserip = explode(".",$userip);
 $userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
 $ipsave .= $userip."\",";
}

echo $ipsave;
?>

[PHP] 보안 국내 IP 대역만 접속 하도록 응용

웹프로그램


국내 아이피 대역을 확인 하실려면
https://ip.nida.kr/ip_cate_stat/stat_05_04.act

에서 확인 가능하며 엑셀 파일로도 다운 가능 합니다.
https://ip.nida.kr/ip_cate_stat/stat_05_04_toexcel.act

다운 받은 엑셀 파일내용 중 시작IP 와 마지막 IP 값을
각 자리수가 3자리가 되도록 수정후 . 점을 제거 합니다.
202.6.95.0 인경우 202006095000 처럼 바뀌겠군요.
이렇게 바뀐 값을 "시작IP_마지막IP" 처럼 변경해서 배열로 담습니다.
저의 경우 에디트 플러스를 활용 했습니다.
$ipgroup = array("2020060950000_202006095255","202014103000_202014103255");
처럼 배열로 담습니다.
이후 추가되는 IP만 배열에 계속 추가 해주면 됩니다.
이와 같은 변경하는 작업을 어럽게 느끼시는 분을 위해 제가 오늘 날짜로 올라온것 까지 작업해서 첨부 해놨습니다.
첨부파일 다운받으실려면 회원가입후 이메일 인증 받으시고 등업요청후 제가 승인하면 다운 가능 해 집니다.
워낙 광고 도배하는 회원이 있어서 이와 같은 복잡한 절차를 거치도록 했으니 양해 바랍니다.

이제 저 배열을 활용하기만 하면 되겠군요.
접속자 IP를 받아서 비교를 한번 해보겠습니다.
$userip = getenv("REMOTE_ADDR");
//. 점으로 구분해서 변수로 담습니다.
$tmpuserip = explode(".",$userip);
//str_pad 함수를 이용해서 자리수를 "0"으로 채워 하나의 값으로 합칩니다.
$userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
//배열 IP만큼 돌립니다.
for($i=0;$i<count($ipgroup);$i++) {
 //변수값을 분리합니다.
 $tmpip = split("_",$ipgroup[$i]);
 //접속자 IP가 시작IP값보다 크거나 마지막 IP보다 작은 값이면 포함되는 값이므로 차단
 if($tmpip[0]<=$ip || $tmpip[1]>=$ip) {
  echo "국내 IP만 접속 허용합니다.";
  exit;
 }   
}
배열 값은 "대역 시작 IP _ 대역 끝 IP" 로 저장 되어 있습니다.
따라서 접속한 사용자의 IP를 받아서 루프를 돌며 해당 대역에 포함되는지 체크하시면 됩니다.

참, IP6 IP에 대해서는 별도로 처리 하셔야함을 잊지 마세요! ^^

ASP 메일 발송시 다음 이유 때문에 원격 도메인 'naver.com'에 메시지를 배달하지 못했습니다.

웹프로그램
asp Server.CreateObject("CDONTS.NewMail")를 이용 해서 메일 발송시 이벤트뷰어에

다음 이유 때문에 원격 도메인 'naver.com'에 메시지를 배달하지 못했습니다.
The remote server did not respond to a connection attempt.

이런 메시지가 기록 되며 메일이 발송 안되는 경우 저의 경우엔

이때 메일 발송 페이지(ASP) 잘 접속되며 메일 발송도 잘되었다고 처리 되지만
정작 메일 발송은 안되고 C:\Inetpub\mailroot\Queue 에 계속 쌓이며 발송이 안되는 증상 이었습니다.
원인을 확인한 결과
네트워크 카드가 2개로써 하나는 외부망 하나는 내부망으로 연결된 네트워크 구조로 하여 DB는 내부망으로 접속 하도록 해놨습니다.
보안상 DB를 외부로부터 숨기기위해서 인데 이로 인해 DNS가 꼬인 것 같습니다.
내부망의 네트워크를 중지 시키자 바로 Queue 쌓였던 메일들이 일괄 발송되는 것을 확인 했습니다.
그래서 IP관련 문제임을 확인하고서 IIS관리 > SMTP 설정을 보니 IP주소에 IP를 지정해서 선택할 수 있게 되어 있더구요. ㅜㅜ
진작에 이걸 왜 확인 못했는지 ㅋㅋ

결론 적으로 위 메시지는 내부 DNS관련 문제라는 결론을 가집니다.
저와 동일한 증상은 아니겠지만 네트워크 관련 문제를 확인 해보세요!
예로 방화벽의 포트 차단으로 인한 문제등 여러 경우가 있을수 있습니다.
아래 메일 장애 관련 점검하는 방법을 추가 해놨으니 참고 하세요!


~~~~~~~~~~~~~~~~~~~~~~~ 참고 자료 ~~~~~~~~~~~~

서버 메일 발송관련 실험에 관한 사항 입니다


우선은 서버의
네트워크 설정의
DNS설정이 되어 있는 지확이해 보시길바랍니다
이것이 설정이 되어 있지 않으면
메일이 전속이 될때 메일서버를 찾아가지를 못합니다


이것이 설정이 되어 있다면
다음으로는 DNS서버에서 재대로 메일서버의 주소를 찾는 지를 확인하여야 합니다

확인방법은

우선 식작=>실행=> cmd (명령프롬프트) 를 실행신킨후

nslookup
set type=mx
hanmail.net

위의 순서대로 하였을때
hanmail.net 의 메일서버들이 나열이 되어야 합니다

나열이 되었다면
명령프롬프트를 하나를 더실행시킨후에
아까의 메일서버들중에 하나를 선택하여 다음과 같이 입력을 합니다

telent mx1.hanmail.net 25

위의 문구는 메일이 통로인 25포트를 이용하여 나간다는 것입니다
telnet mx1.hanmail.net 25 명령어를 실행시켰을때
ESMTP 가 뜨면 괜찮은 것임.


그런 다음


telnet mx1.hanmail.net 25
helo gcmail.net
mail from : sysroot@gcmail.net
rcpt to : dreamksyk@hanmail.net
data
from :
to :
subject : 아아아아앙
.

위와 같이 명령프롬포트에서 실행을 시키면 메일이 발송이 될것입니다
이것이 된다음에도 않된다면

C:\Inetpub\mailroot\Queue
라는 폴더에 메일이 싸이는지를 확인해 보시기 바랍니다
이곳은 메일이 발송이 되지 않았을경우 메일파일이 모이는 장소입니다

이곳에 메일이 싸인다면

우선 SMTP 설정과
서비스중 DNS Client 등이 작동중인지 확인을 해보시기 바랍니다


그레도 메일이 나아가지 않고
C:\Inetpub\mailroot\Queue
싸인다면
이벤트 뷰어를 의 시스템로그를 확인해 보시기 바랍니다

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

이벤트 형식: 경고
이벤트 원본: smtpsvc
이벤트 범주: 없음
이벤트 ID: 4000
날짜:  2005-09-10
시간:  오후 12:31:23
사용자:  N/A
컴퓨터: WEB
설명:
다음 이유 때문에 원격 도메인 'test.com'에 메시지를 배달하지 못했습니다. The remote server did not respond to a connection attempt.
 
데이터:
0000: d2 02 04 c0               O..A   

========================================================================================

 

XIMS: 오류 메시지: 내부 DNS 오류 때문에 원격 서버를 찾을 수 없습니다

기술 자료 ID : 249104
마지막 검토 : 2005년 6월 10일 금요일
수정 : 2.2
이 문서는 이전에 다음 ID로 출판되었음: KR249104

현상

Windows 2000 IP(인터넷 프로토콜) 스택이 여러 네트워크 카드(IP)에 바인딩되어 있을 때 다음 이벤트가 발생할 수 있습니다.
이벤트 ID 4000
원본: SMTPSVC
종류: 경고
설명: 원격 도메인 "your_domain.com"에 메시지를 배달할 수 없습니다. 내부 DNS 오류 때문에 원격 서버를 찾을 수 없습니다.
0000: c00402e7

원인

SMTP 서비스는 메일을 배달하려고 할 때 DNS(도메인 이름 서비스) 서버를 검색하여 DNS 조회를 수행합니다. TCP/IP가 여러 IP에 바인딩되어 있으면 바인딩 순서에 따라 첫번째 IP 주소에 연결하려고 합니다. 이 IP가 DNS가 반환한 MX 레코드에 전달할 수 있는 IP가 아니면 연결이 실패하고 이벤트 4000이 로깅됩니다. 메시지가 재시도 상태에 들어가고 그 결과 시간이 초과되기 때문에 NDR(배달 못 함 보고서)이 생성됩니다.

해결 방법

이 문제를 해결하려면 다음과 같이 하십시오.
1. 바탕 화면에서 네트워크 환경을 마우스 오른쪽 단추로 누릅니다.
2. 등록 정보를 누릅니다.
3. 고급 메뉴에서 고급 설정을 누른 다음 인터넷 IP의 바인딩 순서를 내부 IP보다 앞쪽으로 변경합니다. 이렇게 하면 DNS 쿼리가 조회를 수행하려고 할 때 정확한 네트워크 연결을 찾습니다.

ASP 메일발송시 오류 Microsoft VBScript 런타임 오류 error '800a0046' 사용 권환이 없습니다.

웹프로그램
윈도우서버의 SMTP 를 이용한 메일 발송시 사용권환이 없다는 오류가 발생 하는 경우

Microsoft VBscript 런타임 오류 error '800a0046'
사용 권한이 없습니다.

.........
set objmail = server.CreateObject("cdonts.newmail") '메일 객체 선언
objmail.from=strfrom
objmail.to=strto
objmail.subject=strsubject
objmail.body=strbody
objmail.importance=1 '중요도
objmail.bodyformat = 0
objmail.mailformat = 0
objmail.send '메일 보내기
set objmail=nothing '메일 객체 닫기
..............
objmail.send '메일 보내기 <-- 요부분이 오류가 발생


비슷한 코딩으로 사용했을 겁니다.
정확한 해결방법인지는 모르겠지만 저의 경우 다음과 같은 이유로 해결되었습니다.


c:\inetput\mailroot\ 폴더에 보안 설정에 쓰기 권환을 주는것으로써
폴더의 등록정보 > 보안 에서
인터넷 게스트 개정 (IUSER_ ), IIS 프로세스 시작 개정 (IWAM_ )
두 개정에 쓰기권환을 주셔야합니다.

IIS가 메일 발송처리 되면서 임시로 메일을 기록하거나 실패한 메일 보관또는 수신메일 저장 권환이 없어서 생긴 오류더군요.

그럼 같은 증상으로 해결되길 바랍니다. 

PHP 접속자 OS가 vista 인지 XP 인지 확인 하기

웹프로그램
접속자 OS 가 Vista 인경우 ActiveX 를 설치 하지 않게 한다던지
웹서비스 내용을 다르게 보여 주고자 할 경우 접속자의 OS 정보가 필요하죠
이때 확인하는 PHP 함수는 $HTTP_USER_AGENT 입니다.

echo $HTTP_USER_AGENT;
라고 출력 해 보면 XP인 경우
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.21022)
처럼 출력되죠!

Windows NT 5.1 이부분을 통해서 OS를 확인합니다.
윈도우 실제 버전은 이와같이 NT 계열로 5.x 6.x 로 표시됩니다.
따러서 Vista의 경우 Windows NT 6.x로 표시 되겠죠.

* Vista OS 인지 체크
if(ereg("Windows NT 6",$HTTP_USER_AGENT))
{
  echo "넌 OS가 vista 군! ^^";
}

* XP OS 인지 체크
if(ereg("Windows NT 5",$HTTP_USER_AGENT))
{
  echo "넌 OS가 XP 군! ^^";
}

일단 몇군데 PC에서 $HTTP_USER_AGENT 를 출력 해 본 결과이므로
적용전 여러 버전에서도 해보세요!
예를들어 XP의 경우 home, prefessional 등 버전이 여러가지 있으니 확인 꼭 해보세요! 

addslashes() stripslashes() DB 저정시 '홀따옴표에 \백슬러시 붙였다 빼주는 함수

웹프로그램
 
addslashes()
DB에 데이터를 입력할 때 ' 홀따옴표가 들어가는경우 오류가 나는걸 방지 하기위해 ' 앞에 \ 백슬러시를 붙이는 역할을 합니다. \' 처럼...
 
stripslashes()
addslashes() 반대 되는 역할로써 ' 홀따옴표에 \붙여진걸 제거 해주는 역할을 합니다.
 
게시판등 사용자의 입력내용을 받을때 유용하게 활용 하면 str_replace 등으로 굳이 변환하지 않고 DB에 바로 저장 가능합니다.

[HTML] meta 메타 태그 종류

웹프로그램

1. <meta http-equiv="Content-Language" content="ko">
웹문서의 문법을 나타냅니다.


2. <meta http-equiv="imagetoolbar" content="no">
이미지에 나타나는 툴바를 제거합니다.


3. <META http-equiv="Page-Enter" content="blendTrans(Duration=0.1)">

4. <META http-equiv="Page-Exit" content="blendTrans(Duration=0.1)">

3.4번은 웹문서를 들어 올때나 나갈때 부드럽게 페이지를 이동시킵니다..플래시 효과같게...


5. <META http-equiv="Page-Enter" content="RevealTrans(Duration=0.3, Transition=12)">
이 페이지가 호출될때 3초간 12번 효과가 연출됨

6. <META name="robots" content="noindex,follow" />
이 문서는 긁어가지말고 링크된 문서는 긁어 갈 것을 나타냄

7. <META HTTP-EQUIV='Cache-Control' CONTENT='no-cache'>
캐쉬를 사용하지 말고 다시 지정된 문서를 새로 읽어서 보여준다는 뜻입니다.

8. <META HTTP-EQUIV='Pragma' CONTENT='no-cache'>
캐쉬에서 해당 페이지를 읽어들이는걸 방지합니다..들어 올때마다 새로고침한 것과 같은 효과입니다


이외에도 많이 있음 ^^

<HR> 태그 사용해서 점선 표시 하기

웹프로그램

* HR 태그에 스타일을 적용해서 점선 표시 가능합니다.

<hr style="color:#999999;border-style:dotted">

color : 점선 색상

border-style : 점선 스타일 지정 (dotted : 점선)

[자바스크립트] 뉴스 속보 한줄로 타자치듯이 보여주는 기능!

웹프로그램

<style>
body,table,td
{
 font-size:12px;
 font-family:굴림;
}
select,input,textarea
{
 font-size:12px;
 font-family:돋움;
}
img
{
 border : 0;
}
a:link { color:#333333; text-decoration: none;}
a:visited { color:#333333; text-decoration: none;}
a:hover { color: #3366cc; text-decoration: underline; }
a:active { color: #333333; text-decoration: none;}

.Stitle
{
 font-family:돋움;
 color:white;
 font-weight:bold;
 font-size:14px;
 cursor:pointer;
 text-decoration:none;
}
</style>
<script language="javascript">
var i_mes=0;
var message=new Array();
var messagelink=new Array();
var linktarget=new Array();
var fnt=new Array();
var fntsize=new Array();
var fntcolor=new Array();
var fntcolorlastletter=new Array();

message[i_mes]="‘꿈의직업’ 50인 후보 맹지나, 김범 사촌누나로 밝혀져 ‘화제’";
messagelink[i_mes]="http://www.gooddaysports.co.kr/news/?bset=view&cset=star&tot_code=49&code=5592";
linktarget[i_mes]="_self"
fnt[i_mes]="돋음"
fntsize[i_mes]="11px"
fntcolor[i_mes]="#404040";
fntcolorlastletter[i_mes]="#404040";
i_mes++;
message[i_mes]="박지성 역전골 어시스트로 팀 승리 ‘견인’";
messagelink[i_mes]="http://www.gooddaysports.co.kr/news/?bset=view&cset=sports&tot_code=514&code=3066";
linktarget[i_mes]="_self"
fnt[i_mes]="돋음"
fntsize[i_mes]="11px"
fntcolor[i_mes]="#404040";
fntcolorlastletter[i_mes]="#404040";
i_mes++;
message[i_mes]="김범사촌누나 맹지나 ‘꿈의직업’ 후보 50인에 선정!";
messagelink[i_mes]="http://www.gooddaysports.co.kr/news/?bset=view&cset=star&tot_code=47&code=3977";
linktarget[i_mes]="_self"
fnt[i_mes]="돋음"
fntsize[i_mes]="11px"
fntcolor[i_mes]="#404040";
fntcolorlastletter[i_mes]="#404040";
i_mes++;

var standstill=3000; // 타이핑을 완료한 후 글자가 보여지는 시간 (2000 = 2초)
var tickerwidth=500; // 타이핑 되는 부분의 가로크기
var tickerheight=11; // 타이핑 되는 부분의 세로크기
var speed=20; // 타이핑 되는 속도 - 낮을수록 빠르다
var speed_1st=10; // 타이핑 되는 속도 - 낮을수록 빠르다

var i_substring=0;
var i_presubstring=0;
var i_message=0;
var messagecontent="";
var messagebackground="";
var messagepresubstring="";
var messageaftersubstring="";

function initiateticker() {
 if (document.all) {
  donganews();
 }
 if (document.layers) {
  donganews();
 }
}

var win= null;
function NewWindow(mypage,myname,w,h,scroll){
 var winl = (screen.width-w)/2;
 var wint = (screen.height-h)/2;
 var settings ='height='+h+',';
 settings +='width='+w+',';
 settings +='top='+wint+',';
 settings +='left='+winl+',';
 settings +='scrollbars='+scroll+',';
 settings +='resizable=yes';
 win=window.open(mypage,myname,settings);
 if(parseInt(navigator.appVersion) >= 4){win.window.focus();}
}


function getmessagecontent() {
 messagepresubstring=message[i_message].substring(0,i_presubstring);
 messageaftersubstring=message[i_message].substring(i_presubstring,i_substring);
 messagecontent="<table border=0 cellpadding=0 width="+tickerwidth+" height="+tickerheight+"><tr valign=top><td>";
 messagecontent+="<span style='position:relative; font-family:"+fnt[i_message]+";color:"+fntcolor[i_message]+";font-size:"+fntsize[i_message]+"pt;'>";
 messagecontent+="<a href='"+messagelink[i_message]+"' target='"+linktarget[i_message]+"'>";
 messagecontent+="<font color='"+fntcolor[i_message]+"'>";
 messagecontent+=messagepresubstring;
 messagecontent+="</font>";
 messagecontent+="</a>";
 messagecontent+="</span>";
 messagecontent+="<span style='position:relative; font-family:"+fnt[i_message]+";color:"+fntcolorlastletter[i_message]+";font-size:"+fntsize[i_message]+"pt'>";
 messagecontent+="<a href='"+messagelink[i_message]+"'  onclick='NewWindow(this.href,name,850,570,yes);return false'>";
 messagecontent+="<font color='"+fntcolorlastletter[i_message]+"'>";
 messagecontent+=messageaftersubstring;
 messagecontent+="</font>";
 messagecontent+="</a>";
 messagecontent+="</span>";
 messagecontent+="</td></tr></table>";
}

function donganews() {
 if (i_substring<=message[i_message].length-1) {
  i_substring++
  i_presubstring=i_substring-1
  if (i_presubstring<0) {i_presubstring00}
  getmessagecontent()
  if (document.all) {
   ticker.innerHTML=messagecontent
   if(i_substring == 1) var timer=setTimeout("donganews()", speed_1st)
   else var timer=setTimeout("donganews()", speed)
  }
  if (document.layers) {
   document.tickerroof.document.ticker.document.write(messagecontent)
   document.tickerroof.document.ticker.document.close()
   var timer=setTimeout("donganews()", speed)
  }
 } else {
  clearTimeout(timer)
  var timer=setTimeout("changemessage()", standstill)
 }
}

function changemessage() {
 i_substring=0
 i_presubstring=0
 i_message++
 if(i_message>message.length-1) {
  i_message=0
 }
 donganews()
}


if (document.all) {
 document.write('<span ID="tickerroof" style="position:relative;width:'+tickerwidth+'px;height:'+tickerheight+'px;">');
 document.write('<span ID="ticker" style="position:absolute;top:0px;left0px"></span>');
 document.write('</span>');
}
if (document.layers) {
 document.write('<ilayer name="tickerroof" height="'+tickerheight+'" width="'+tickerwidth+'">');
 document.write('<layer name="ticker" top=0 left=0"></layer>');
 document.write('</ilayer>');
 document.close();
}

window.onload=initiateticker;
window.onresize=initiateticker;
</script>

php uft-8, euc-kr 인코딩 변환 iconv()

웹프로그램
 
DB에 있는 값이 UTF-8 인데 EUC-KR로 변경하고 자 할때 또는 반대로 EUC-KR로 저장된 값을 UTF-8 로 변경 하고자 할 경우.
 
iconv() 함수를 이용 하면됩니다.
 
인코딩이 틀릴 경우 한글이 깨져 버리는 증상이 있어 이와 같이 변경할 필요가 있지요.
 
$content = "UTF-8로 된 내용";
$content = iconv("UTF-8","EUC-KR",$content);


출처 : 세이박스 http://saybox.tistory.com

자바스크립트 함수 체크

웹프로그램

자바스크립트에서 함수를 호출할 때 실수로 해당 함수를 기입 안한채 코딩시 오류가 발생하는 경우를 미연에 방지 하기 위한 방법.

typeof(체크할 함수) 로 체크했을 때 "undefined"라고 디턴값을 받으면 함수가 문제가 없는것으로 판단하여 함수 호출을 하지 않으므로 스크립트 오류를 예방할 수 있다.

예)
<script>
function test() {
  alert("테스트");
}

if(typeof(test()) != "undefined") test();
</script>

결과 : 테스트 메시지 출력


<script>
if(typeof(test()) != "undefined") test();
</script>

결과 : 아무처리 안함

[자바스크립트] 한글 처리

웹프로그램
 <script>
str = "test한글";
check = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힝]/;
if(check.test(str)) alert("한글이 있습니다.");
</script>
 
입력창에 한글 만써지게.. 
아래는 자바스크립트를 이용한 한글체크 소스입니다..
아래의 코드를 이용하면 영문상태에서는 글씨가 써지지 않습니다.
<script language='javascript-x'>
function hangul() {
  if((event.keyCode < 12592) || (event.keyCode > 12687))
  event.returnValue = false
}
</script>
<input type="text" name="Name" size="10" maxlength="15" class=ad omKeyPress="hangul();">

[PHP] 한글삭제 정규식

웹프로그램
 

1. 영문자를 제외한 모든 문자를 null로 치환
preg_replace("/[^A-Za-z]/", "", $a);
결과 : "testtest"

 2. 영문자와 공백문자(Space)를 제외한 모든 문자를 null로 치환
preg_replace("/[^A-Za-z|\x20]/", "", $a);
결과 : " test  test"

 3. ASCII 범주 코드 영문+특수문자를 제외한 모든 문자를 null로 치환
preg_replace("/[^\x20-\x7e]/", "", $a);
결과 : " test.  test  ??"

 4. 한글만 빼경우는 한글의 모든 코드 범주를 대응해줘야 합니다.

http://www.php.net/manual/kr/function.ord.php 를 참고.


<?
$a="test 테스트 1234 ???";
for ($i=0; $i<strlen($a); $i++) {
  $char_ord = ord($a[$i]);
  if ($char_ord >= 65 && $char_ord <= 122) echo $a[$i];
}
?>

또는 다음과 같이

<?
$str = "abcd 한글 1234";
if(preg_match("/[\xA1-\xFE][\xA1-\xFE]/", $str)) {
  echo"한글있다";
} else {
  echo"한글없다";
}
?>
 
정규식으로 한글의 범위는 \xa1-\xfe 로 표현하시면 됩니다.
<?
if(!ereg("^[\xa1-\xfe0-9a-zA-Z]+$",$name)) {
  echo"한글과 영문,숫자만 입력할 수 있습니다";
}
?>

PHP strip_tags() 문자열에 html 태그나 php문구 모두 제거

웹프로그램
글 작성시 html 에디터 등으로 작성된 글에서 텍스트만 필요한 경우
 
string strip_tags(string str [, string allowable_tags])
 
* 문자열 str에서 html이나 php태그를 모두 제거한 문자열을 반환한다.
 
* allowable_tag은 문자열 str에 적용되어 있는 html, php태그를 사용할 경우, 그 태그는 제거하지 않고 적용어 있는 문자열을 반환한다.
 
예)
$ddd = "<P><STRONG><FONT color=#ff0000 size=3>‘스타’와 ‘연인’은 끝내 헤어질 것인가.</FONT></STRONG></P>";
echo strip_tags($ddd);
 
결과)
스타’와 ‘연인’은 끝내 헤어질 것인가.
 
 
출처 : 세이박스 http://saybox.tistory.com

[JSP] how to upload image using JSP

웹프로그램
This is the form html
<form name="uploadForm" action="upload.jsp" enctype="multipart/form-data" method="post">
  <input type="file" name="file"/>
  <input TYPE=Button name='Upload' Value='Upload' onClick="uploadForm.Upload.value='Uploading...';document.uploadForm.action='upload.jsp';document.uploadForm.submit()">
</form>


Here is upload.jsp
<%
 
    response.setContentType("text/html");
    response.setHeader("Cache-control","no-cache");
 
    String err = "";
 
    String lastFileName = "";
 
    String contentType = request.getContentType();
    String boundary = "";
    final int BOUNDARY_WORD_SIZE = "boundary=".length();
    if(contentType == null || !contentType.startsWith("multipart/form-data")) {
      err = "Ilegal ENCTYPE : must be multipart/form-data\n";
      err += "ENCTYPE set = " + contentType;
    }else{
      boundary = contentType.substring(contentType.indexOf("boundary=") + BOUNDARY_WORD_SIZE);
      boundary = "--" + boundary;
      try {
        javax.servlet.ServletInputStream sis = request.getInputStream();
        byte[] b = new byte[1024];
        int x=0;
        int state=0;
        String name=null,fileName=null,contentType2=null;
        java.io.FileOutputStream buffer = null;
        while((x=sis.readLine(b,0,1024))>-1) {
          String s = new String(b,0,x);
          if(s.startsWith(boundary)) {
            state = 0;
            //out.println("name="+name+"<br>");
            //out.println(fileName+"<br>");
 
            name = null;
            contentType2 = null;
            fileName = null;
 
 
          }else if(s.startsWith("Content-Disposition") && state==0) {
            state = 1;
            if(s.indexOf("filename=") == -1)
              name = s.substring(s.indexOf("name=") + "name=".length(),s.length()-2);
            else {
              name = s.substring(s.indexOf("name=") + "name=".length(),s.lastIndexOf(";"));
              fileName = s.substring(s.indexOf("filename=") + "filename=".length(),s.length()-2);
              if(fileName.equals("\"\"")) {
                fileName = null;
              }else {
                String userAgent = request.getHeader("User-Agent");
                String userSeparator="/";  // default
                if (userAgent.indexOf("Windows")!=-1)
                  userSeparator="\\";
                if (userAgent.indexOf("Linux")!=-1)
                  userSeparator="/";
                fileName = fileName.substring(fileName.lastIndexOf(userSeparator)+1,fileName.length()-1);
                if(fileName.startsWith( "\""))
                  fileName = fileName.substring( 1);
              }
            }
            name = name.substring(1,name.length()-1);
            if (name.equals("file")) {
              if (buffer!=null)
                buffer.close();
              lastFileName = fileName;
              buffer = new java.io.FileOutputStream("/Program Files/Apache Group/Tomcat 4.1/webapps/jspcart/images/"+fileName);
            }
          }else if(s.startsWith("Content-Type") && state==1) {
            state = 2;
            contentType2 = s.substring(s.indexOf(":")+2,s.length()-2);
          }else if(s.equals("\r\n") && state != 3) {
            state = 3;
          }else {
            if (name.equals("file"))
              buffer.write(b,0,x);
          }
        }
        sis.close();
        buffer.close();
      }catch(java.io.IOException e) {
        err = e.toString();
      }
    }
    boolean ok = err.equals("");
    if(!ok) {
      out.println(err);
    }else{
    %>
<SCRIPT language="javascript">
  history.back(1)
  alert('Uploaded <%=lastFileName%>');
  window.location.reload(false)
</SCRIPT>
    <%
    }
    out.println("done");
%>

PHP Header 다운로드 에서 파일이름이 한글로 된경우 바로 열기 다운로드 안되는경우

웹프로그램
 
문서.hwp 이름으로 된 파일을 php Header 방식으로 다운로드 받고자 할 경우
 
다운이 안되는 경우
 
session_start();
header("Cache-control: private");
소스 상단에 위와 같이 두줄 추가 해주면됩니다.

프록시 proxy 접속자 실제 아이피 ip 확인 가능

웹프로그램

Proxy (프록시, 프락시....) 란?
전화 회선을 이용한 모뎀을 사용하던 시절 빠른 회선을 이용하기 위해 특정 프록시 서버를 경유해서 빠른 속도로 인터넷을 이용하기 위한 목적으로 주로 이용 했었습니다. 또는 아이피가 부족한 경우 내부 망은 사설아이피로 이용하고 외부로 접속할땐 프록시 아이피를 통해서 인터넷에 접속하기 위한 용도가 주 목적 이었습니다. 2번째 목적은 아직도 많은 곳에서 이용하고 있구요 따라서 무조건 프록시를 이용해서 접속한다고 해서 불순한 접속은 아니라는 것입니다. 주의!
그러나, 어느 분야에서나 그렇듯 불순한 의도를 가진 이들에 의해 악용 되기도 하였습니다.
한 예로 프록시를 그쳐서 웹사이트를 접속 할 경우 웹사이트에서 remote_addr 로 IP를 추출할경우 접속자의 실제 아이피가 아닌 프록시 아이피가 기록이 남아서 공격을 해도 프록시 아이피만 차단하게되는 경우가 있었습니다. 그럼, 다시 공격자는 다른 프록시 IP를 이용하는 뭐 지금 생각하면 웃음이 나오는 이야기지만 예전엔 그런 일들이 많았답니다.
아마 요즘도 뒤늦게 프록시라는걸 접하게되어 아이피 안남겠지라고 생각하며 홈페이지 게시판에 악성댓글을 남기는 그런 유저가 있을겁니다. 당연 큰실수를 하는 것 일테죠~ 좀 규모 있는 사이트들은 프록시로 접속을 하던 말던 접속자의 실제 아이피를 모두 기록남기고 있답니다. ^^;
물론 소규모 사이트들은 단순히 remote_addr로만 아이피를 기록을 남기는 경우가 있어 통할지도 모르겠습니다.

어쨌거나 세이박스는 이러한 접속을 막기위한 방법을 제시하고자 하는것이니 프록시에 대한 에피소드는 접기로 하고 실제 적용 방법에 대해 설명하고자 합니다. 조금이나마 도움이 되길 바라며..

PHP의 경우
1. 당신의 IP 는 다음과 같습니다.<br>
IP => <?=$_SERVER['REMOTE_ADDR']?><br>
2. 당신이 프락시 IP로 접속했다면 다음에 IP가 표시되며 실제 당신의 IP 주소 입니다<br />
IP => <?=$HTTP_X_FORWARDED_FOR?><br>

위 소스에서 HTTP_X_FORWARDED_FOR는 프록시를 이용할 경우 HTTP 헤드 값에 함께 포함해서 전송하기 때문에 프록시를 이용할 경우 프록시 아이피를 출력하게 됩니다. 하지만 평소 프록시를 이용하지 않는다면 아무런 값이 출력되지 않죠.
따라서 다음과 같이 응용해서 이용하시면 됩니다.

if($HTTP_X_FORWARDED_FOR != "") {
  echo $HTTP_X_FORWARDED_FOR;
} else {
  echo $_SERVER['REMOTE_ADDR'];
}

이런식으로 해두면 프록시로 접속하던 일반 IP로 접속하던 실제 접속자의 IP가 기록이 남습니다.
그러나, 당연히 공격자들이 나 잡아가슈 하며 접속하진 않겠죠! 바로 프록시를 여러번 경우 하는것 입니다. 이부분 다음에 글을 남기도록 하겠습니다.

ASP의 경우
asp 경우에도 마찬가지로 HTTP_X_FORWARDED_FOR 값으로 동일하게 값을 받습니다. 앞에 $ 붙고 않붙고 차이 정도 ^^
그리고 HTTP_CLIENT_IP 로도 접속자의 실제 아이피를 출력합니다.

이 글은 세이박스에서 작성한 글입니다. 다른곳에 글을 올리실땐 반드시 출처를 남기시기 바랍니다.
출처 : 세이박스 http://saybox.tistory.com/501

ASP 제목이나 글자 길이가 지정한 길이보다 초과하면 잘라 내고 ... 붙이기

웹프로그램
 제목이나 글자 길이가 지정한 길이보다 긴 경우 일부만 잘라서 뒤에 "..." 표시를 하고자 할경우  Mid() 함수를 사용해서 자를경우 한글, 영문 모두 1글자로 처리 되어 낭패를 보는 경우가 있다.
분명 한글의 경우 한자가 2바이트 즉, 영문 2자에 해당 하는데 말이죠..
따라서, 1바이트씩 잘라서 계산하는 함수가 필요하겠죠!
다음과 같은 함수를 그냥 가져다 사용하시면 됩니다.

<%
 function hanlen(str, con) 
  stat = 0 
  strlen = 0  'str전체길이 
  strbyte = 0 'str 전체바이트수  
  strlen=len(str) '문자열의 길이를 구한다 
  hanlen = strlen  
  for i=1 to strlen '문자열을 한문자씩 읽어온다..   
   char = ""   
   char = mid(str, i, i)   
   char = asc(cstr(char)) '아스키 코드값 읽어오기   
   char = left(char, 1) '값이 -값이 나오면 한글임    
   if char = "-" then     
    strbyte = strbyte + 2 '읽어온 코드값이 -이면 2바이트   
   else     
    strbyte = strbyte + 1 '그렇지 않으면 1바이트   
   end if    
   if con = 1 then 'con이 0이면 전체 바이트길이, 1이면 문자열을 자를 바이트가 되는 문자열 위치 i     
    if strbyte >= 26 and stat = 0 then '자를 문자열의 바이트 길이는 60바이트임(마지막에 1byte차이가 있을 수                                                   
     '있음.(처리하려면 더 복잡해 지니 이 정도만..)       
     hanlen = i       
     stat = 1 '한번만 처리하기 위해 (루프를 탈출하는 방법을 몰라서..ㅠㅠ)     
    end if   
   else     
    hanlen = strbyte   
   end if 
  next
 end function
 Prdtnm = "가나다라마abc타 카123def 아자32 423"
 Prdtnm_len = hanlen(Prdtnm, 0) '전체 문자열 바이트 길이를 구함 
 Prdtnm_pos = hanlen(Prdtnm, 1) '전체 문자열중 자를 위치 구함  
 If Prdtnm_len > 28 Then   
  Prdtnm = left(Prdtnm, Prdtnm_pos) & "..."
 end if
%>
 
위 소스는 영문기준으로 28자 이상인 경우 26자만 가져와서 뒤에 "..." 붙이는 소스입니다.
제한 범위나 자르는 범위는 필요에 맞게 변경 하시면 됩니다.
참고로 space 공백도 영문 한글자에 해당하며 한글은 한글자에 영문 2자에 해당합니다.

위 글은 세이박스에서 작성 글이므로 다른곳에 게시할 경우 반드시 세이박스 출처를 남겨주시기 바랍니다.
출처 : 세이박스 http://saybox.tistory.com/590