인터넷쇼핑몰구축 (Internet ShoppingMall) 저작자의동의없이배포를금합니다.

Similar documents
(Microsoft PowerPoint - 2\300\345.ppt)

PowerPoint Template

Windows 8에서 BioStar 1 설치하기

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

DBMS & SQL Server Installation Database Laboratory

Visual Basic 반복문

PHP & ASP

게시판 스팸 실시간 차단 시스템

PHP & ASP

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - 10Àå.ppt

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

Javascript

MySQL-.. 1

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호


쉽게 풀어쓴 C 프로그래밊

Microsoft Word - src.doc

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

슬라이드 1

Javascript

PowerPoint Template

2009년 상반기 사업계획

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

OCW_C언어 기초

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

윈도우시스템프로그래밍

PowerPoint Presentation

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft PowerPoint 세션.ppt

SK Telecom Platform NATE

Microsoft PowerPoint - e pptx

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

로거 자료실

PowerPoint 프레젠테이션

Javascript

슬라이드 제목 없음

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770>

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Microsoft PowerPoint - 사본 - OAS09-사무자동화 기술(DB).ppt

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드]

윈도우즈프로그래밍(1)

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Cookie Spoofing.hwp

강의 개요

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

하둡을이용한파일분산시스템 보안관리체제구현

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

USER GUIDE

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

문서 템플릿

금오공대 컴퓨터공학전공 강의자료

Chapter 1

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

C++ Programming

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

Studuino소프트웨어 설치

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap04-연산자.pptx

Secure Programming Lecture1 : Introduction

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 04-UDP Programming.ppt

Observational Determinism for Concurrent Program Security

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Microsoft PowerPoint 웹 연동 기술.pptx

쉽게 풀어쓴 C 프로그래밍

SBR-100S User Manual

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

PowerPoint 프레젠테이션

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

슬라이드 1

Microsoft PowerPoint Python-WebDB

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint Presentation

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

SQL

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Windows Server 2012

강의 개요

C# Programming Guide - Types

Transcription:

인터넷쇼핑몰구축 (Internet ShoppingMall) 저작자의동의없이배포를금합니다.

[ 성공의비결을파는가게 ] 옛날에어떤억만장자한사람이꿈속에서중국의어느산속마을에성공의비결을파는가게가있다는소문을듣고그비결을사기위해그가게를찾아여행을떠났습니다. 여러날동안갖가지고생과위험을겪은끝에어느심산입구에있는마을에도착하자마침내 ' 성공의비결을파는가게 ' 라는간판이눈에띄었습니다. 그가설레는가슴을진정시키면서가게안으로들어서자종업원한사람이친절한표정을지으면서그를맞이하였습니다. " 손님께서는어떤성공의비결을원하십니까? 여기에는크고작은성공의비결들이모두준비되 어있습니다." 종업원의설명이다끝나기도전에그억만장자는아주호쾌한목소리로외쳤습니다. " 나는당연히가장큰성공의비결을사고싶습니다. 값은얼마라도상관없으니이왕이면가장큰 성공의비결을하나주십시오." 그러자종업원은잠시그장자의얼굴을뚫어져라응시하더니이렇게말하는것이었습니다. " 아 -, 지금손님께서는가장큰성공의비결을찾으시는것이로군요. 그런데그것은너무나도비 싸기때문에그동안아무도사간사람이없었습니다." " 아니, 도대체얼마나비싸기에그런말씀을하시는겁니까? 돈은얼마든지있으니상관마시고 어서그비결이나가져오시오." 그러자종업원은어쩔수없다는표정을지으면서가장큰성공의비결이담긴상자를하나꺼내 다가상자를포장하고있던보자기를풀어내렸습니다. 그순간상자위에적혀있던가격표가억 만장자의눈에띄었습니다. " 가격 : 가장큰성공의비결을사가는사람은자신의남은생애에서 ' 편안한생활 ' 은모두포기해 야됨 " 그가격내용을본순간그억만장자는가장큰성공의비결이무엇인지를금방깨달을수있었고, 한순간헛된욕심에사로잡혀엉클어진자신의모습에놀란나머지그만꿈속에서화들짝깨어나현실세계로돌아오고말았습니다. 그장자는 ' 편안한생활을포기하면할수록그에정비례해서성공의크기는그만큼커진다 ' 고하는사실을깨달았던것입니다. ' 편안함을포기하는만큼, 성공의크기는그만큼커진다. 많이포기하면많이포기할수록성공의 크기는그만큼더욱커진다!' 여러분! 만약우리가 ' 지금부터편안하게살겠다고선언한다 ' 면그것은바로 ' 지금부터성공하기를포기하 겠다 ' 고선언하는것과똑같은것입니다. 배우는내용이조금어려울지도모르겠지만성공을위해편안함을포기하지않겠습니까?

[ 목차 ] 1. 소개 1 가. 교재안내 1 나. 학습내용 1 다. 평가 2 라. 준수사항 2 마. ASP를배우는이유 2 바. 인터넷쇼핑몰을배워서할수있는일 2 사. 인터넷쇼핑몰을이용한사이트찾아보기 2 2. 환경설정 6 가. asp 소개 6 나. html 문서해석과정 6 다. asp 문서해석과정 6 라. URL 주소형식 7 마. asp 개발환경 7 바. PWS 설치 7 사. Windows XP에서 IIS 웹서버설정 8 아. 테스트 9 3. VBScript 13 가. 클라이언트스크립트와서버스크립트 13 나. 클리아언트스크립트해석과정 13 다. 서버스크립트해석과정 13 라. 서버스크립트사용하는방법 14 마. VBScript 시작하기 14 4. Form 태그 32 가. Form 태그형식과속성 32 나. 각종태그 34 5. 객체 39 가. 객체정의및구성요소 39 나. ASP 객체모델 39 다. 객체구성요소 40 라. Request 객체 40 마. Response 객체 42 6. ASP 어플리케이션 47 가. asp 어플리케이션이란? 47 나. ASP 객체 47 다. Global.asa 47

7. SQL 의기초 ( 이론 ) 53 가. 데이터베이스의개요 53 나. 데이터베이스시스템의구성 54 다. 데이터베이스관리시스템 54 라. 데이터모델과모델링 56 마. 관계형데이터베이스 57 바. Access 사용하기 59 8. HTML 65 가. 소개 65 나. 구성요소및구조 65 다. 태그와폼태그 66 라. 데이터베이스이용을위한준비 67 마. 간단한예제작성 68 바. 사전숙지사항 69 9. 에디터사용하기 74 가. Edit Plus v.2.20 다운로드하기 74 나. 설치하기 74 다. 실행하기 74 라. 서버설정하기 75 10. 회원관리사이트제작 80 가. 개요 80 나. 전체적인흐름도 80 다. 데이터베이스 80 라. 각페이지및모듈설명 80 마. 각페이지작성 81 11. 게시판제작 94 가. 개요 94 나. 전체적인흐름도 94 다. 데이터베이스 94 라. 각페이지구성및모듈설명 94 마. 각페이지작성 95 12. 각종에러와오류수정 105 가. DB관련에러 105 나. 자바스크립트에러 105 다. 오류수정방법 106 13. 포트폴리오 (PortPolio) 115 가. 대한민국상이군경회 115-4 -

나. 초기화면 115 다. 데이터베이스 116 라. 각페이지구성 ( 약 130 개프로그램 ) 116-5 -

1. 소개 가. 교재안내 ü 수업은별도의교재없이진행함 ü 대신수업전에프린트또는제본하여준비할것 - 수업전수업준비확인하여가산및감점부여 ü 참고교재 - 데이터베이스와액세스활용 ( 정일출판사 ) - ASP를이용한웹사이트구축 ( 홍릉과학출판사 ) - 실용중심의 ASP 프로그래밍 ( 생능출판사 ) - 기타 나. 학습내용 ü 1주차 : 오리엔테이션 (Orientation) - 동기부여및학학기동안학습할내용검토하기 ü 2주차 : 환경설정및테스트 - ASP 프로그래밍을위한환경설정및테스트 ü 3주차 : VBScript(1) - 클라이언트와서버이해, 작업흐름이해 ü 4주차 : VEScript(2), VB 스크립트요약정리제출과제 - 스크립트문법 ü 5주차 : VBScript(3) - 스크립트문법 ü 6주차 : Form 태그 - 서버전달을위한 Form 태그의이해및문법숙지 ü 7주차 : 객체 - 5가지객체의이해와 Global.asa 이해 ü 8주차 : 중간고사 ü 9주차 : 데이터베이스 - 데이터베이스이론과 ACCESS를통한실무접목 ü 10주차 : HTML - 웹페이지작성을위한기본 HTML 이해 ü 11주차 : 에디터및에러수정 - 에디터사용법과에러에대한적절한대처요령숙지 ü 12주차 : 실무예제 (1) - 회원관리프로그램작성 ü 13주차 : 실무예제 (2), 회원관리와유사한프로그램제출과제 - 게시판프로그램작성 ü 14주차 : 실무예제 (3) - 과제발표와검토 ü 15주차 : 기말고사 - 1 -

다. 평가 ü 중간고사 : 30%, 기말고사 : 40% ü 과제및태도 : 20%, 출석 : 10% 라. 준수사항 ü 교재 ( 프린트제본 ) 반드시지참 ü 과제반드시제출 ü 휴대폰진동또는사용금지 ü 수업과관련이없는웹서핑, MSN, 게임등금지 ( 적발시감점 ) ü 수업시작시간준수및결석 1/4 이상시 F학점부여 마. ASP 를배우는이유 ü 데이터베이스와연동하기위해 (HTML만으로는연동할수없음 ) ü 프로그래밍이가능함 (HTML만으로는불가능함 ) 바. 인터넷쇼핑몰을배워서할수있는일 ü 인터넷의흐름파악 ü 웹응용프로그램작성 - 로그인및회원관리 ( 난이도초 ) - 방명록, 게시판, 자료실 - 버스, 기차, 비행기티켓예매및관리등인터넷실시간처리 사. 인터넷쇼핑몰을이용한사이트찾아보기 [ 실습 ] 찾은인터넷사이트 3명발표하기 [ 실습 ] 대한민국상이군경회회원관리프로그램시연 - ASP + 엑세스 (ACCESS) - 2 -

- 3 -

- 4 -

- 5 -

2. 환경설정 가. asp 소개 ü asp란? - Active Server Pages - 마이크로소프트사에서개발된서버스크립트언어 w 서버스크립트언어는웹서비스를제공하는웹서버컴퓨터상의스크립트엔진에의해스크립트코드가해석되고실행되는것을의미하며클라이언트스크립트언어 (HTML, 자바스크립트, VB 스크립트등 ) 는사용자의컴퓨터에설치되어있는스크립트엔진에의해해석되고실행됨 ü 동적인웹페이지작성도구 - 애니메이션이나플래시등을의미하지않음 ü 지원환경 - IIS 웹서버 3.0 ( 윈도우 NT) - IIS 웹서버 5.0 ( 윈도우 2000) - IIS 웹서버 5.1 ( 윈도우 XP Professional 가능, XP home Edition은불가 ) - PWS(Personal Web Server) 4.0 ( 윈도우 98) ü 자신의컴퓨터환경에따라웹서버를고려하여야함 ü ASP 용도 - 기업이나개인홈페이지 - 데이터베이스관련업무 ( 도서검색, 은행의계정관리등 ) 나. html 문서해석과정 해설 : 웹브라우저에의해 index.html 요청시웹서버는해당문서가존 재하는지파일시스템에서문서를검색하고존재할시에해당문서를제공 함. 다. asp 문서해석과정 - 6 -

해설 : asp.dll 에의해 asp 코드를해석하고 html 문서로변환하여문서를 제공하는차이가있음. 라. URL 주소형식 ü http : 프로토콜 ü :// : 구분자 ü www.hcc.ac.kr : 도메인주소 ü / : 경로 ü index.html : 문서명 * 문서명이전부분까지는대소문자구분없음 예 ) http://www.hcc.ac.kr/index.html HTTP://www.HCC.ac.KR/index.html ( 위와동일함 ) 마. asp 개발환경 ü MS 웹서버 + 데이터베이스 - IIS + SQL Server - PWS + Access - ODBC ( 데이터베이스연동지원 ) ü 가상디렉토리 - / = c:\inetpub\wwwroot - 웹홈디렉토리를의미 - 실제시스템에서는웹서버에의해서지정됨 - IIS에서는기본으로 C:\inetpub\wwwroot로설정 바. PWS 설치 ü 초기화면및설치방법선택 ü 윈도우 XP Professional과 IIS가설치되어있는경우에는생략가능 - 7 -

ü 홈디렉터리설정및설치완료 ü 설치후바탕화면확인 ü 홈디렉터리확인및멈춤과시작 사. Windows XP 에서 IIS 웹서버설정 ü [ 제어판 ] - [ 관리도구 ] - [ 인터넷정보서비스 ] 를실행한다. / [ 기본웹 사이트 ] 위에서마우스오른쪽버튼을클릭하고속성메뉴를선택한다. - 8 -

ü 로컬경로확인및기본문서설정 아. 테스트 ü 메모장을이용하여작성하기 ( 가능하면 EditPlus 2 를사용하면편리함, 9 장참조 ) ü c:/wwwroot/inetpub/ 에저장하며파일이름은 Hello.asp 로할것 <HTML> <HEAD> <TITLE> Hello ASP </TITLE> </HEAD> <BODY> <P> for i = 1 to 3 step 1 Hello ASP student = i <BR><BR> next </BODY> </HTML> ü Hello.asp 해석과정 - 9 -

- 10 -

- 11 -

- 12 -

3. VBScript 가. 클라이언트스크립트와서버스크립트 ü 스크립트 ( 간단한프로그래밍언어를의미함 ) ü Script 언어 vs. Programming 언어 - 표현력차이여부 - 특정용도에맞도록설계되었는지여부 - 빨리익혀서쉽게사용가능여부 ü VBScript - ASP에서사용하는스크립트언어 ü 클라이언트 vs. 서버 - 클라이언트의요청을서버가받아서처리와응답을함 ü 웹환경 - 클라이언트 : 웹브라우저 - 서버 : 웹서버 나. 클리아언트스크립트해석과정 다. 서버스크립트해석과정 - 13 -

라. 서버스크립트사용하는방법 ü 방법 1 : <Script> 태그사용 <Script language=vbscript runat=server> 'VBScript 코드 </Script> ü 방법 2 : 사용일반적으로이방법을사용함 마. VBScript 시작하기 ü 변수 - 값을저장할수있는기억공간 - 구성 w 이름 w 데이터형식 w 값 - 예 w intage = 20 w intnextage = intage + 1 - intnextage 의값은? [ 실습 ] HTML 안에그냥기입한경우와 를이용하여기입한경우의차 이확인 - HTML 은표현하는언어 ( 보여주기위한언어 ) 이다. ü Dim문 - 명시적변수선언시사용 w 문두에 Option Explicit 기입 w Dim을이용한선언 - 예 w Dim intage w Dim intnextage - 14 -

w intage = 10 w intnextage = intage + 1 - Dim 선언시변수는기본값을가짐 w 숫자 : 0 w 문자열 : 길이가 0 인빈문자열 - Dim의필요성 w intage = 10 w intnextage = inage + 1 w intnextage의값? - Option Explicit w 명시적으로변수를선언하도록함 [ 실습 ] option-explicit.asp option explicit <html> <body> Dim intage Dim intnextage intage = 10 intnextage = inage + 1 </body> </html> ü 변수의데이터형식 - Variant w 유일한데이터형식만제공 w 자동으로적용 - Variant의하위형식 w Integer(2) w Long(4) w Single(4) w Double(8) w String w Boolean(True, False) w - 기본값은 False w Date w Empty [ 실습 ] typename.asp - 15 -

option explicit <html> <body> <h2> 변수의하위형식 : typename() </h2> Dim intage Dim strname Dim strzip Dim datbirth Dim dblweight intage = 20 strname = " 이동양 " strzip = "152-714" datbirth = #4/20/81# dblweight = 64.7 <p> =intage =" : " =typename(intage) <br> =strname =" : " =typename(strname) <br> =strzip =" : " =typename(strzip) <br> =datbirth =" : " =typename(datbirth) <br> =dblweight =" : " =typename(dblweight) <br> </body> </html> ü 데이터형식변환함수 - 하위형식에서다른하위형식으로데이터변환이필요한경우사용 - 변환함수 w Cbool w Cdate w CDbl w Cint w Clng w CSng w CStr [ 실습 ] datatypechange.asp - 16 -

option explicit <html> <body> <h2> 변수의데이터형식변환 </h2> Dim stravg, intavg, dblavg, blnavg, bytavg stravg = "4.56" intavg = CInt(strAvg) dblavg = CDbl(strAvg) blnavg = Cbool(strAvg) bytavg = Cbyte(strAvg) <p> String : =stravg <br> Integer : =intavg <br> Double : =dblavg <br> Boolean : =blnavg <br> Byte : =bytavg <br> stravg = "0" intavg = CInt(strAvg) dblavg = CDbl(strAvg) blnavg = Cbool(strAvg) bytavg = Cbyte(strAvg) <p> String : =stravg <br> Integer : =intavg <br> Double : =dblavg <br> Boolean : =blnavg <br> Byte : =bytavg <br> </body> </html> option explicit <html> <body> <h2> 변수의하위형식 : typename() </h2> Dim intage, strname, strzip, datbirth, dblweight intage = 20 strname = " 이동양 " strzip = "152-714" datbirth = #4/20/81# dblweight = 64.7 <p> =intage =" : " =typename(intage) <br> =strname =" : " =typename(strname) <br> =strzip =" : " =typename(strzip) <br> =datbirth =" : " =typename(datbirth) <br> =dblweight =" : " =typename(dblweight) <br> </body> </html> - 17 -

ü 변수명명규칙 - 첫글자는영문자로시작 - 마침표, 느낌표등특수문자는불가 - 글자수 255개이하 - 예 w Var, tel_123, 119fire, bip*3 - 상수 w 값이한번정해지면변하지않는수 w Const Pi = 3.141592 ü 연산자 - 할당연산자 (=) w 변수에어떤값을할당함 - 예 w inta = 10 w intb = inta w intb = intb + 5 ü 산술연산자 - +, -, *, /, - ^ w 지수승 w 2^3? - \ w 나눗셈후정수몫을돌려줌 w 20\3? - Mod w 나눗셈후나머지를돌려줌 w 20 mod 3? [ 실습 ] arithmetic.asp - 18 -

<html> <body> <h2> 산술연산자 </h2> intno1 = 7 intno2 = 2 subres = intno1 - intno2 mulres = intno1 * intno2 divres = intno1 / intno2 powres = intno1 ^ intno2 intdivres = intno1 \ intno2 modres = intno1 Mod intno2 <p> =intno1 - =intno2 = =subres <br> =intno1 * =intno2 = =mulres <br> =intno1 / =intno2 = =divres <br> =intno1 ^ =intno2 = =powres <br> =intno1 \ =intno2 = =intdivres <br> =intno1 Mod =intno2 = =modres <br> 2^3^4 = =2^3^4 </body> </html> ü 비교연산자 - <, <=, >, >=, =, <> - 문자열비교는 ASCII 코드값순임 w A < a? w FMD < am? w 9 < a? [ 실습 ] comparison.asp : 비교연산자 - 19 -

<html> <body> <h2> 비교연산자 </h2> intno1 = 7 intno2 = 2 intno3 = Empty string1 = "Good" string2 = "Bad" string3 = "bad" string4 = Empty <p> <table border=0> <tr><td> =intno1 > =intno2 <td> => <td> =(intno1 > intno2) <br> <tr><td> =intno1 < =intno3 <td> => <td> =(intno1 < intno2) <br> <tr><td> =intno1 >= =string1 <td> => <td> =(intno1 >= string1) <br> <tr><td> =intno3 <= =intno2 <td> => <td> =(intno3 <= intno2) <br> <tr><td> =string2 <> =string3 <td> => <td> =(string2 <> string3) <br> <tr><td> =intno3 = =string3 <td> => <td> =(intno3 = string3) <br> <tr><td> =string1 > =string2 <td> => <td> =(string1 > string2) <br> </table> </body> </html> ü 논리연산자 - Boolean형식 w True 또는 False 값을가짐 - And, Or, Not, Xor - 숫자논리연산 - 20 -

ü 연결연산자 (&) - 예 w String1 = Good w String2 = Morning! w StrRes = String1 & String2 w StrRes? w Good Morning! ü 연산자우선순위 - 산술 > 연결 > 비교 > 논리연산자순 - P 60 표참조 - 문제 w 3 > 2 and 7 <=5 or 4 = 2? w 3 * 4 > 4 1 and 3 <= 3? ü 배열 - 연속적인기억공간을가지는변수 w 색인 (index) 번호를이용 - 효율적으로값을참조 w Dim arrcol(9) w arrcol(1), arrcol(2),, arrcol(9) - 반복루프를쉽게설정하여코드작성이쉽고간단 For I = 1 to 9 Sum = sum + arrcol(i) Next - 색인값시작은 0 부터 - 값할당은변수처럼 w arrcol(0) = white w arrcol(1) = 1234 - 다차원배열 w DimArrTable(2,3) - 21 -

- 2행의모든값을더하는코드 Dim arrtable(2,3) Dim sum sum = 0 For I = 1 to 4 sum = sum + arrtable(1, i -1) Next [ 실습 ] 3 열의합을구하는코드를작성하라. ü 제어문 - If~then If 조건식 then End if - If~then~else If 조건식 then 조건이 true인경우 Else 조건이 false인경우 End if - Select case Select case 검사식 Case 결과1 실행1 Case 결과2, 결과3 실행2 Case else 실행3 End [ 실습 ] select-case.asp - 22 -

<html> <body> <h2> 제어문 select case </h2> grade = 84 select case (grade \ 10) case 9, 10 Response.write " 성적은 A 입니다 " case 8 Response.write " 성적은 B 입니다 " case 7 Response.write " 성적은 C 입니다 " case 6 Response.write " 성적은 D 입니다 " case 5,4,3,2,1,0 Response.write " 성적은 F 입니다 " case else Response.write " 잘못입력된성적입니다 " end select </body> </html> ü 반복문 - 4가지반복문 w While Wend w Do Loop w For Next w For each next - 중첩가능 - While Wend w 1 부터 10 까지의합을구하라. [ 실습 ] while-wend.asp - 23 -

<html> <body> <h2>? While... Wend </h2> intcnt = 1 intsum = 0 while intcnt <= 10 intsum = intsum + intcnt if intcnt = 1 then Response.write intcnt & " " else Response.write "+ " & intcnt & " " end if intcnt = intcnt +1 wend Response.write "= " & intsum </body> </html> - For next w 반복횟수를알고있는경우 w 강제로빠져나오려면 exit for를사용 w 1부터 10까지의홀수의합을구하라. w 1부터 20까지의수에서 3의배수의합을구하라. [ 실습 ] for-next.asp - 24 -

<html> <body> <h2>? For...Next </h2> intsum = 0 For intcnt = 1 to 10 step 2 intsum = intsum + intcnt if intcnt = 1 then Response.write intcnt & " " else Response.write "+ " & intcnt & " " end if Next Response.write "= " & intsum & "<br>" </body> </html> ü 프로시저 - 여러스크립트문장을모아서하나의모듈형태의단위로사용하는것 w 반복사용되는기능 w 프로그램코드의이해도증진 - 서브루틴 vs. 함수 w 해당모듈을순차적으로수행 w 결과값을돌려줌 [ 실습 ] procedure.asp - 25 -

<html> <body> <h2> 프로시저 - 서브루틴, 함수 </h2> Sub print(val) Response.write val & " " End Sub Function funcsum(val1, val2) funcsum = val1 + val2 End Function intsum = 0 For intcnt = 1 to 10 intsum = funcsum(intsum, intcnt) if intcnt = 1 then print(intcnt) else Response.write "+ " & intcnt & " " end if Next Response.write "= " & intsum & "<br>" </body> </html> - 문자열함수 w Left(), right(), mid() : 주어진문자열에서서브문자열을취함 [ 실습 ] function-1.asp <html> <body> <h2> 문자열함수 - left(), right(), mid() </h2> strasp = "active server pages" 문자열 : =strasp <br><br> 왼쪽 6 문자 : =left(strasp,6) <br> 오른쪽 5 문자 : =right(strasp,6) <br> 가운데 6 문자 : =mid(strasp,8,6) </body> </html> w Len() : 문자열의길이를돌려줌 [ 실습 ] function-2.asp - 26 -

<html> <body> <h2> 문자열함수 - len(), trim() </h2> strasp = " active server pages " <table> <tr><td> 문자열 : <td> =strasp <tr><td> 문자열길이 : <td> =len(strasp) <tr><td> 왼쪽공백제거후길이 : <td> =len(ltrim(strasp)) <tr><td> 양쪽공백제거후길이 : <td> =len(trim(strasp)) </table> </body> </html> w Replace() : 주어진문자열에서특정문자열을검색하고, 검색한문자열을다른문자열로치환 w instr() : 주어진문자열에서특정문자열을찾아서그위치값을돌려주며만약찾지못하면 0 값을돌려줌 [ 실습 ] function-3.asp - 27 -

<html> <body> <h2> 문자열함수 - 검색관련 instr(), replace() </h2> strasp = " active server pages " <table> <tr><td> 문자열 : <td> =strasp <tr><td> 문자열 Ver 찾기 : <td> =instr(strasp,"ver") <tr><td> 문자열 ver 찾기 : <td> =instr(strasp,"ver") <tr><td> "pages" 찾아서 "PAGES" 로치환 : <td> =replace(strasp,"pages","pages") <tr><td> 문자열 : <td> =strasp </table> </body> </html> [ 실습 ] 주어진문자열에서 b 를찾아서 b 다음의 3문자를출력하는코드를작성하라. - 28 -

- 29 -

- 30 -

- 31 -

4. Form 태그 가. Form 태그형식과속성 ü Form 태그형식 <Form > </Form> - 사용자로부터정보를입력받아서버로전송하기위한폼 ( 텍스트박스, 콤보박스, 라디오버튼, 체크박스, 텍스트에어리어 ) 작성 [ 실습 ] ex4-1.asp <html> <body> <h2> 간단한 Form 태그예 </h2> <hr> 성적입력하기 <p> <Form action = "result.asp" method = "post"> 이름 : <Input type = "text" name = "name" ><p> 성적 : <Input type = "text" name = "grade" ><p> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> </body> </html> ü Form 태그속성 <FORM action= result.asp method= post enctype=application/ x-www-form-urlencoded> <INPUT type=text name=grade value= A >... </FORM> - action속성 w 사용자입력값을받을페이지 w 사용자의입력을서버에있는 action에설정된페이지가처리하게됨 - method속성 w 사용자메시지의전송방식 w get : default, 메시지를 URL에포함 w post : URL과별도로전송, 대용량정보, ID,PW 등과같은보안이필요한정보 [ 실습 ] Get방식 : ex4-2.asp, result-get.asp - 32 -

<html> <body> <h2> 간단한 Form 태그예 </h2> <hr> 성적입력하기 <p> <Form action = "result-get.asp" > 이름 : <Input type = "text" name = "name" ><p> 성적 : <Input type = "text" name = "grade" ><p> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> </body> </html> <html> <body> <h2> Form 태그입력값출력하기 </h2> <hr> 입력성적보기 <p> name = request.querystring("name") grade = request.querystring("grade") response.write name & " : " response.write grade </body> </html> [ 실습 ] Post방식 : ex4-1.asp, result.asp <html> <body> <h2> Form 태그입력값출력하기 </h2> <hr> 입력성적보기 <p> name = request.form("name") grade = request.form("grade") response.write name & " : " response.write grade </body> </html> - Enctype속성 - 33 -

w w w 전송하는입력값의 encoding 형식 application/x-www-form-urlencoded 가디폴트 파일업로드경우 : multipart/form-data 설정 action 속성 나. 각종태그 ü Input 태그및속성 <FORM action= result.asp method= post enctype=application/ x-www-form-urlencoded> <INPUT type=text name=name> <INPUT type=text name=grade value= A > <INPUT type=submit value= 입력 > <INPUT type=reset value= 취소 > </FORM> [ 실습 ] tag.asp <html> <body> <hr> 성적입력하기 <p> <Form action = "result2.asp" method = "post"> 이름 : <Input type = "text" name = "name" size = 20 maxlength = 40><p> 패스워드 : <Input type = "password" name = "pass" size = 20><p> 성적 : <Input type = "text" name = "grade" size = 10 value = 0 ><p> 평가 : <Textarea name = "etc" cols="30" rows="3" >... </Textarea><P> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> </body> </html> ü 다양한입력태그 - 라디오버튼 : 여러값중하나선택 - 체크박스 : 여러값을선택 - Select 태그 : 목록에서값을선택 [ 실습 ] ex4-4.asp, result3.asp - 34 -

<html> <body> <hr> Radio 버튼및체크박스선택 <p> <Form action = "result3.asp" method = "post"> <Table> <tr><td> 직업은? <td> <Input type="radio" name="job" VALUE="student" CHECKED> 학생 <br><input type="radio" name="job" VALUE="prof" > 교수 <br><input type="radio" name="job" VALUE="assist"> 조교 <br><br> <tr><td> 취미는 <td> <Input type="checkbox" NAME="hobby" VALUE="sports"> 운동 <br><input type="checkbox" NAME="hobby" VALUE="movie"> 영화 <br><input type="checkbox" NAME="hobby" VALUE="tour"> 여행 </Table><br> <Input type = "submit" value = " 입력 " > <Input type = "reset" value = " 취소 " > </form> <HR> <H4> 목록에서값선택하기 </H4> <Form action = "result4.asp" method = "post"> <Select name="list" size="1"> <Option value="list1"> List 1 <Option value="list2"> List 2 <Option value="list3"> List 3 </Select><p> <H4> 목록에서다중값선택하기 </H4> <Select name="listbox" size="3" multiple> <Option value="listbox1"> List 1 <Option value="listbox2"> List 2 <Option value="listbox3"> List 3 <Option value="listbox4"> List 4 </Select> <Input type = "submit" value = " 입력 " > <Input type = "reset" value = " 취소 " > </Form> </body> </html> [ 실습 ] HTML 학습및실습사이트 - http://cont112.edunet4u.net/%7ekinchul/main.htm - http://kr.blog.yahoo.com/sinbong1/1433.html - 35 -

- 36 -

- 37 -

- 38 -

5. 객체 가. 객체정의및구성요소 ü 객체란 - 객체지향프로그래밍에서객체는, 프로그램설계단계에서최초로생각해야할것으로서, 결국프로세스에서유도된코드단위들이다. 중간에, 각객체는일반화된객체클래스로만들어지고더욱일반화된클래스가정의됨으로써, 객체가모델을공유하고그코드에서클래스정의를재사용할수있게한다. 각각의객체는특정클래스또는그클래스의자체메쏘드나프로시저그리고데이터변수를가지고있는서브클래스가실제로구현된것, 즉인스턴스이다. 그러므로객체는실제로컴퓨터내에서수행되는것을말한다. ( 이해될려나 ^^; 그냥이미만들어져있는함수이며자신이재정의하여이용한다고정도로생각하고지나가자.) ü 구성요소 ( 객체 = 속성 + 메서드 ) - 속성 w 객체의정적인특성 - 메서드 w 객체의동적인특성 나. ASP 객체모델 ü Request 객체 - 웹브라우저의요청정보예 ) Form 컬렉션 ü Response 객체 - 웹서버의응답정보예 ) write 메서드 ü Application 객체 - 하나의웹서비스를담당예 ) 사이트방문자수정보 ü Session 객체 - 접속사용자별로연결정보 ü Server 객체 - 39 -

- 새로운객체생성시사용 - 예 ) DB 접속 ( connection 객체필요 ) 다. 객체구성요소 ü 컬렉션 : 객체들의집합 ü 속성 : 홍길동이라는객체가있을때 이름 : 홍길동 에서 이름 을지칭 ü 이벤트 : 어떤행위가발생한것으로 클릭, 드래그, 닫기 등의사건 ü 메서드 : 행동을의미하며레코드셋을열때 open() 과같은것 라. Request 객체 ü 사용자의요청정보저장 - 컬렉션 w ClientCertificate : 사용자인증정보 w Cookies w Form : Post 방식사용자입력정보 ( 많이사용 ) w QueryString : Get 방식사용자입력정보 ( 많이사용 ) w ServerVariables : 환경정보 ( 가끔사용 ) ü Form 태그전송정보이용 - Post vs. Get - Post 방식 - 40 -

<Form action = "result.asp" method = "post"> 이름 : <Input type = "text" name = "name" ><p> 성적 : <Input type = "text" name = "grade" ><p> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> name = request.form("name") grade = request.form("grade") * request객체의 form 컬렉션을이용한것임 - Get 방식 <Form action = "result.asp" method = "get"> 이름 : <Input type = "text" name = "name" ><p> 성적 : <Input type = "text" name = "grade" ><p> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> name = request.querystring("name") grade = request. querystring ("grade") - URL 형태 ü URL 인코딩규칙 - 영문, 숫자 -> 그대로 - 한글, 특수문자 -> 16진수예 ) space -> + % -> %25 + -> %2B 황 -> %c8%ab - 컬렉션이름생략시우선순위 w QueryString > form > cookies > servervariables ü 서버변수 - 요청과정에서전송되는정보 - 41 -

- Request 객체의 servervariables 컬렉션 w 클라이언트의 IP주소 w 웹브라우저정보 [ 실습 ] Ex5-1.asp <html> <body> <hr> 서버변수 <p> 전송방식 : = Request.ServerVariables("REQUEST_METHOD") <p> 클라이언트 IP 주소 : = Request.ServerVariables("REMOTE_ADDR") <p> 전체 HTTP 문자열 : = Request.ServerVariables("ALL_HTTP") <p> <table border=1> <tr><td> 변수이름 <td> 값 for each svar in Request.ServerVariables <tr><td> = svar <td> if Request.ServerVariables(sVar) = "" then Response.Write " " else Response.Write Request.ServerVariables(sVar) end if next </table> </body> </html> 마. Response 객체 ü 요청에대한응답정보저장및처리 - 컬렉션 w Cookies - 속성 w Buffer : 페이지버퍼링, Clear, flush, end 메서드와연관 w contenttype : 문서의 MIME 타입 w Status : 요청에대한상태값 - 메서드 w Clear w End w Flush : Buffer 사용예제 [ 실습 ] Ex5-2.asp - 42 -

<html> <body> <hr> <h4> response 객체 - 페이지버퍼링 </h4><p> response.buffer = true 1. 버퍼설정후, flush 전입니다.<P> response.flush 2. flush 후, clear 전입니다.<P> response.clear 3. clear 후, flush 전입니다.<P> response.flush 4. flush 후, end 전입니다.<P> response.end 5. end 후입니다.<P> </body> </html> w Redirect : 인자로지정한주소로이동, Response.redirect( http://www.empas.com ) [ 실습 ] 지정된페이지로이동하는예제를작성해보자. w write : 연결연산자 (&) 의사용가능 [ 실습 ] Ex5-3.asp <html> <body> <hr> <h4> response 객체 - write 메서드 </h4><p> Response.Write "Active " Response.Write "Server " Response.Write "Pages <p> " Response.Write "Active " & "Server " & "Pages <p> " </body> </html> - 43 -

- 44 -

- 45 -

- 46 -

6. ASP 어플리케이션 가. asp 어플리케이션이란? ü 하나의응용서비스프로그램 ü 구성 - 가상디렉토리안의여러웹페이지 - Global.asa : ASP 페이지가불려질때먼저참조하는파일 나. ASP 객체 ü Application 객체 - 웹어플리케이션에대한내용을담고있는객체 - 어플리케이션에한개존재 ü Session 객체 - 사용자의접속시생성되는객체 다. Global.asa ü 어플리케이션마다하나존재 ü 어플리케이션의모든페이지에적용되는페이지 ü 이벤트처리서브루틴 - Application 이벤트 w Application_onStart w Application_onEnd - 47 -

- Session 이벤트 w Session_onStart w Session_onEnd ü Global.asa 구성형식 <Script language = VBScript runat = server> Sub Application_OnStart 어플리케이션이처음시작할때실행할스크립트코드 end Sub Sub Application_OnEnd 어플리케이션이종료될때실행할스크립트코드 end Sub Sub Session_OnStart 사용자세션이처음시작할때실행할스크립트코드 end Sub Sub Session_OnEnd 사용자세션이종료될때실행할스크립트코드 end Sub <Script> ü Application 변수 / Session 변수 - 페이지간데이터공유 w Application변수 /Session변수이용예 ) application(usercount) [ 실습 ] Ex6-1.asp, global.asa <html> <body> <hr> <h4>application 이벤트, Session 이벤트 </h4><p> 당신은 =application("usercount") 번째방문객입니다. </body> ] </html> - 48 -

<Script language = VBScript runat = server> Sub Application_OnStart Application("userCount") = 0 end Sub Sub Application_OnEnd end Sub Sub Session_OnStart Application.Lock Application("userCount") = Application("userCount") + 1 Application.Unlock end Sub Sub Session_OnEnd end Sub </Script> ü Application 객체 - 구성 w 컬렉션 : Contents : Application 변수저장 - 메서드 w Lock w Unlock - 이벤트 w onstart w onend - 49 -

- 50 -

- 51 -

- 52 -

7. SQL 의기초 ( 이론 ) 가. 데이터베이스의개요 ü 데이터와정보 - 데이터 : 관찰이나측정을통해수집된사실이나값 - 정보 : 임의의상황에서적절한의사결정을할수있게하는지식으로데이터를가공처리하여얻은결과 ü 구성요소 - 업무데이터, 메타데이터, 하드웨어, 운영체제와데이터베이스관리시스템, 응용프로그램으로대별되는소프트웨어, 데이터베이스시스템을이용하는사용자등 ü 파일시스템 - 초기응용프로그램들은사무적업무에중점을두고개발 - 조직체가커지고데이터양이많아지면서문제발생 w 데이터의중복과불일치 w 데이터의고립 w 보안문제 w 무결성 ( 정확성 ) 문제 w 데이터접근의곤란 - 데이터베이스시스템의목적 w 데이터중복의최소화 w 데이터의공유 w 데이터보안기법도입 - 53 -

w 데이터무결성유지 w 데이터일관성유지 - 데이터베이스관리시스템의도입 w 오라클 (Oracle) w 인포믹스 (Informix) w 사이베이스 w MS-SQL 나. 데이터베이스시스템의구성 ü 데이터베이스정의 - 현실세계에근거를둔데이터들을관련있는데이터간의중복을최소화하면서통합하여, 저장매체에저장함으로서여러사용자들이공유할수있도록하는데이터의집합체 - 정의가함축하고있는의미 w 데이터베이스는공용데이터 (Shared Data) 이다 w 데이터베이스는통합데이터 (Integrated Data) 이다 w 데이터베이스는저장데이터 (Stored Data) 이다 w 데이터베이스의데이터는운영데이터 (Operational Data) 이다 - 데이터베이스스키마 w 데이터베이스를구성하는데이터개체, 속성, 관계, 구조, 제약조건등데이터베이스에저장된모든자료들의논리적구조와관계를의미 w 3단계스키마 ( 사용자관점에따라 ) 다. 데이터베이스관리시스템 ü 사용자의응용프로그램과데이터베이스사이에위치하며, 모든응용프로그 램의데이터베이스접근을대행하고관리해주는소프트웨어 - 54 -

ü 데이터베이스관리시스템의구성요소 - DDL컴파일러 : 데이터정의어르관계데이터베이스형태인테이블의집합으로변환 - 질의어처리기 : 사용자가요구한질의어를데이터베이스처리기가이해할수있는명령어로변환 - 예비컴파일러와 DML 컴파일러 : 응용프로그램내에저장된데이터조작어를호스트언어로변환 - 런타임데이터베이스처리기 : 데이터베이스내에저장된데이터와시스템에제출된응용프로그램및질의프로그램간의인터페이스제공 - 저장데이터관리자 : 디스크기억공간의할당과디스크에정보를저장하기위한데이터구조를관리 - 데이터베이스관리시스템구성요소 ü 데이터베이스관리시스템의분류 - 데이터모델, 허용되는사용자수, 데이터베이스설치장소수에따라분 류 ü 데이터베이스시스템언어 - 데이터정의어 (DDL : Data Definition Language) w 데이터베이스의구조를정의하기위해사용되는언어 w 데이터베이스설계자는 DDL을이용하여시키마기술 w 설계된데이터베이스시키마는 DDL 컴파일러에의해컴파일됨 - 데이터조작어 (DML : Data Manipulation Language) w 사용자로하여금데이터를조작하도록지원하는언어 w 질의어를통한검색, 삽입, 삭제, 수정 - 데이터제어어 (DCL : Data Control Language) - 55 -

w w 데이터의제어를정의, 기술하기위해사용된언어 불법사용자들로부터데이터베이스를보호하기위해데이터베이스 관리자에의해사용 ü 데이터베이스시스템사용자 - 일반사용자 (End User), 응용프로그래머, 데이터베이스관리자 라. 데이터모델과모델링 ü 데이터모델 : 현실세계의데이터와데이터들간의관계, 의미, 제약조건등을어떻게나타낼것인가에대한개념적이고논리적인틀 - 개념모델 : 데이터표현의논리적인성격에초점을맞춤 w 개체관계 (entity/relationship) 모델, 객체지향 (object oriented) 모델 - 구현모델 : 데이터베이스내의데이터를어떻게표현할것인지에초점 w 계층형모델, 망형모델, 관계형모델 ü 데이터모델링 : 데이터모델에현실세계를단순화하는작업과정 ü 개념데이터모델 - 데이터표현의논리적인성격에초점을두어데이터표현 - 대표적인개체 / 관계 (entity/relationship : E/R) 모델 - 다음과같은목적으로사용 w 데이터에대해관리자, 사용자, 프로그래머들이서로다르게인식하고있는뷰 (view) 들을하나로통합할수있는단일화된설계안을만들기위해사용 w 서로다른뷰들을충족시킬수있는데이터처리와제약조건등의요구사항들을정의하기위해사용 - E/R 모델은도표 ( 다이어그램 ) 로표현 - ERD는최종사용자의관점에서데이터베이스를그림형태로묘사한것 w 사각형 : 속성의집합으로구성되어있는개체집합 w 원 : 속성 w 마름모 : 개체와개체간의관계 ü 교수 / 학생 / 과목관계를표현한 ERD - 56 -

ü 구현데이터모델 - 데이터의구조표현에초점 - 계층형 (Hierarchical data model) w 1969년아폴로우주선의수많은부품을관리하기위해처음사용 w 데이터구성요소들간의관계를트리라는계층형구조로구성 - 네트워크형 (Network data model) w 계층형모델보다더복잡한데이터의관계를효과적으로표현 - 관계형 w 1970년 Codd에의해개발 w 기본적인데이터구조를열과행의 2차원구조의테이블로표현 마. 관계형데이터베이스 ü 단순한데이터구조인릴레이션과수학적인이론인관계연산을기초로함 ü 기본구조 (ACCESS 또는 MS-SQL을실행하여비교 ) - 속성 : 테이블의열, 필드 (field) - 투플 : 테이블의행, 레코드 (record) - 도메인 : 속성에서표현할수있는값의집합 - 57 -

ü 관계형데이터베이스의특성 - 한테이블에포함된투플은서로다른유일한값을가진다 - 한테이블내에서투플들의순서는의미가없다 - 한테이블내의속성은유일하다 - 한테이블내에있는속성들의순서도의미가없다 - 한투플내에서행과열이교차하는곳의속성값은원자값이다 - 한속성의값이도메인을벗어나서는안된다 ü 키 (Key) 의종류 - 각투플들을유일하게식별할수있어야함 - 키의두가지성질 w 한테이블에같은키값을가진투플들이두개이상있으면안됨 w 키가두개이상의속성으로구성되어있을때한속성이제거되면더이상식별이불가능하게되는키의최소성만족 - 수퍼키 : 두성질중첫번째성질만만족하는키 - 후보키 : 한테이블에서여러개의키가존재할수있을때이들키를의미 - 기본키 : 후보키중에서한키를선정해서사용할때의키 - 대체키 : 기본키를제외한후보키를의미 - 외래키 : 한테이블의기본키가다른테이블의속성으로표현되는데그속성을외래키라고함 ü 무결성 (Integrity) 제약조건 - 현실세계를반영하는오류가없는정확한데이터만을데이터베이스에저장될수있도록하는제약조건 - 아래두가지제약조건을위배할때데이터베이스가비일관적이됨 - 개체무결성제약조건 w 한테이블의기본키를구성하는어떤속성값도널 (null) 값이나중복값을가질수없다 - 참조무결성제약조건 w 두테이블간에정의되는제약조건으로외래키와기본키와관련 w 한테이블의외래키값은반드시다른테이블의기본키이어야함 ü SQL(Structured Query Language) - 1974년 IBM에서발표한 SEQUEL에서기원 - 사용자나응용프로그램이관계형데이터베이스와상호동작하기위해사용하는데이터베이스언어 - SQL은데이터베이스나테이블의생성, 수정, 삭제등의 DDL과데이블에데이터삽입, 삭제, 검색등을위한 DML로구분 - 대표적인데이터정의어 (DDL) - 대표적인데이터조작어 (DML) - 58 -

바. Access 사용하기 ü memberdb.mdb 열어분석해보기 - memberdb.mdb 파일을더블클릭하여열어보기 - 디자인버튼을눌러구조살펴보기 - member 테이블을더블클릭하여저장된내용보기 ü 쿼리 (Query) 만들기 - 왼쪽개체부분에서 [ 쿼리 ] 클릭 - [ 디자인보기에서새쿼리만들기 ] 클릭 - 테이블표시창에서 [ 닫기 ] 클릭 - 도구의 [SQL 보기 ] 클릭한후명령어작성 ü 쿼리 (Query) 실행 - 창안에 Select * from member 라고입력 - 도구의느낌표 ( 실행 ) 버튼클릭 - 결과확인 - 59 -

ü Select - 형식 : Select 필드명1, 필드명2, from 테이블명 [Where 조건식 ] - 테이블에서조건식에맞는데이터중에필드명1, 필드명2, 만을가져옴 - 예 ) 나이가 20살이상인남자의이름과나이를알아보자. Select name, age from member where age >= 20 and sex= 남 ü Insert - 형식 : Insert into 테이블명 ( 필드명1, 필드명2, ) Values( 필드명1의값, 필드명2의값, ) - 테이블의각필드에필드명의값을삽입함 - 예 ) 새로운회원을삽입시켜보자. Insert into member(id, password, name, age, sex, birthm, birthd) values( queue, 1111, 이순신,50, 남,10,28) ü Update - 형식 : Update 테이블명 set 필드명 1= 필드명 1 의값, [where 조건식 ] - 60 -

- 예 ) 이순신의나이를 60 살로고치려고한다. Update member set age=60 where name= 이순신 ü Delete - 형식 : Delete from 테이블명 [where 조건식 ] ü 데이터베이스만들기 - [Access] 실행 - [ 새 Access 데이터베이스 ] 선택후확인 - 파일이름에만들데이터베이스이름을입력한후만들기클릭 ü 테이블만들기 - [ 디자인보기에서새테이블만들기 ] 클릭 - 필요한필드명과데이터타입입력 - X 버튼 ( 종료버튼 ) 을눌러 테이블 Table1의디자인에서변경한내용을저장하시겠습니까? 에대해 예 선택 - 테이블의이름을임의로작성한후확인버튼 - 키를만드시겠습니까 에대한대답으로일단아니오선택 ü 데이터입력하기 - 만들어진테이블명더블클릭 - 필요한내용입력 - 61 -

- 62 -

- 63 -

- 64 -

8. HTML 가. 소개 ü HTML(HyperText Markup Language) 이란? - 하이퍼텍스트를표현하기위한마크업언어 - 하이퍼텍스트 : 하이퍼링크를이용해웹정보를연결해놓은문서 - 마크업언어 : 문서내용에글꼴, 문단모양과같은각종정보를표시해서문서의모양과구조를결정하는언어 - < > 로둘러싸인태그를이용하여문서의구조와모양을정의하는언어 나. 구성요소및구조 ü HTML 구성요소 - 태그 (Tag) : HTML 문서의기본 - 속성 (Attribute) : 태그가가지는옵션을의미 - 값 (Value) : 속성에서지정할수있는값 ü 구조 ü 예제 - 65 -

- 위와같은 HTML 페이지에 ASP 코드를포함시키고싶다면? w, 를사용하자 다. 태그와폼태그 ü 태그 - <P><BR> - <Font> - <Center> - <blink> - <hr> - <u>, <b>, <i> - <Table>, <th>, <tr>, <td> - <a> - <img> - <Frame> - <Form> [ 실습 ] 각각의태그에맞는예제작성하기 ü Form 태그의사용 - HTML 태그 - 사용자로부터정보를입력받아전송할수있도록함 - <Form> ~ </Form> ü Form 태그작성하는방법 - 66 -

<FORM action= result.asp method= post > <INPUT type=text name=grade value= A > </FORM> - method는주로 post를사용함 - 다양한입력태그 w 텍스트박스 w 콤보박스 w 라디오버튼 w 체크박스 w Select 태그 w 제출, 취소버튼 라. 데이터베이스이용을위한준비 ü OLE DB 연결 curpath = Server.MapPath("/project/csshop/database/webdb.mdb") ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&curPath Set db = Server.CreateObject("ADODB.Connection") db.open ConnString ConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/webdb.mdb") & ";UID=;PWD=;" Set db = Server.CreateObject("ADODB.Connection") ü Client로부터데이터받기 name = Request("name") addr = Request("addr") ü 저장하기 SQL = "Insert Into Member(mem_name,mem_addr) Values" SQL = SQL & "('" & name & "','" & addr & "')" db.execute SQL ü 데이터베이스로부터읽어옮기기 - 67 -

SQL = "Select name, addr from member" Set Rs=db.Execute(SQL) name=rs("mem_name") Addr=rs( mem_addr ) ü Client 에게데이터출력하기 Response.write(name) Response.write(addr) 마. 간단한예제작성 ü 입력받을페이지 (input.asp) 작성하기 <Form action="result.asp" method="post"> 이름 : <Input type="text" name="name"><p> 주소 : <Input type="text" name="addr"><p> <Input type="submit" value=" 입력하기 "> <Input type="reset" value=" 취소하기 "> </Form> ü 입력받은데이터저장페이지 (result.asp) 작성하기 curpath = Server.MapPath("/project/csshop/database/webdb.mdb") ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&curPath Set db = Server.CreateObject("ADODB.Connection") db.open ConnString name = Request("name") addr = Request("addr") SQL = "Insert Into Member(mem_name,mem_addr) Values" SQL = SQL & "('" & name & "','" & addr & "')" db.execute SQL ü 저장되어있는데이터읽는페이지 (read.asp) 작성하기 (1) - 68 -

curpath = Server.MapPath("/project/csshop/database/webdb.mdb") ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&curPath Set db = Server.CreateObject("ADODB.Connection") db.open ConnString SQL = "Select mem_name, mem_addr from member" set rs=db.execute(sql) name=rs("mem_name") addr=rs("mem_addr") Response.write(name) Response.write(addr) ü 저장되어있는데이터읽는페이지 (read.asp) 작성하기 (2) ConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb") & ";UID=;PWD=;" Set db = Server.CreateObject("ADODB.Connection") db.open ConnString SQL = "Select mem_name, mem_addr from member" set rs=db.execute(sql) Do while Not rs.eof name=rs("mem_name") addr=rs("mem_addr") Response.write(name) Response.write(addr) rs.movenext loop 바. 사전숙지사항 ü XP 에서 DB 권한설정 - 권한설정을하지않으면조회는혹시될지몰라도입력과수정과삭제 는할수없다. - 69 -

❶ [ 윈도우즈탐색기 ] 실행 - 메뉴 [ 도구 ] - [ 폴더옵션 ] - [ 보기 ] 탭 - 모든사용자에게동일한폴더권한설정 ( 권장 ) 해제 ❷ Inetpub 폴더내의 wwwroot 폴더에 Access 로작성한 mdb 파일위치 ( 저장 ) 시킴 ❸ mdb 파일위에서오른쪽버튼을누른뒤단축메뉴의속성을클릭함 ❹ 보안탭을누른후사용자의권한설정을함 ❺ ASP 에서 DB 연결방법 ConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("webdb.mdb")&";UID=;PWD=;" Set db = Server.CreateObject("adodb.Connection") db.open ConnString - 70 -

- 71 -

- 72 -

- 73 -

9. 에디터사용하기 가. Edit Plus v.2.20 다운로드하기 ü http://www.editplus.com/kr/ 나. 설치하기 ü 더블클릭하여순서대로설치한다. 다. 실행하기 ü 에디트플러스를설치하면다음그림과같은편집화면이나타난다. ü 메뉴의파일 (F) - 새파일 (N) - HTML 페이지를선택한다. ü 해당내용을지우고아래와같이간단한두예제를작성해보자. / 저장하 는위치는 C:\Inetpub\wwwroot 이어야한다. - 74 -

[ 예제 1] <html> <body> <h2> 간단한 Form 태그예 </h2> <hr> 성적입력하기 <p> <Form action = "result.asp" method = "post"> 이름 : <Input type = "text" name = "name" ><p> 성적 : <Input type = "text" name = "grade" ><p> <Input type = "submit" value = " 입력하기 " > <Input type = "reset" value = " 취소하기 " > </Form> </body> </html> [ 예제 2] <html> <body> <h2> 반복문 </h2> intsum = 0 For intcnt = 1 to 10 intsum = intsum + intcnt Next Response.write "1 부터 " & intcnt-1 & " 까지의더하면 <br>" Response.write " 합계 = " & intsum & "<br>" </body> </html> ü Ctrl + B 를눌러실행시켜본다. / 첫번째예제는정상적으로보이지만두 번째예제는정상적으로보이지않을것이다. / 서버설정이되어있지않 으므로 HTML 코드부분만확인된다. 라. 서버설정하기 ü editplus 를실행시킨다. / [ 도구 ] - [ 기본설정 (P)] - [ 항목 (C)] 의도구 - [ 웹서버루트디렉토리 (E):] 에서추가버튼을클릭한다. - 75 -

ü [ 웹서버루트 ] 대화상자에서 [ 웹서버 IP 또는호스트이름 (E):] 에 127.0.0.1 또는 localhost 또는자기 IP 주소를입력한다. / [ 웹서버루트디렉토리 (W) 에는 C:\Inetpub\wwwroot를입력한후 [ 확인 ] 버튼을누른다. ü 다시한번 [ 확인 ] 을눌러적용시킨다. / 이전의두번째예제를실행시켜보 고어떻게다른지확인해보자. - 76 -

- 77 -

- 78 -

- 79 -

10. 회원관리사이트제작 가. 개요 ü 신규회원등록기능, 회원인증기능, 회원정보수정기능, 회원비회원구분기능, 회원검색기능을가지고있는회원관리사이트를제작하고함 나. 전체적인흐름도 다. 데이터베이스 라. 각페이지및모듈설명 ü index.htm 첫페이지로서신규회원등록과로그인제공 ü new_form.htm 회원등록폼페이지 ü new_act.asp 회원등록실행페이지 ü login_act.asp 로그인실행페이지 ü member_form.asp 회원전용구역페이지로서회원정보수정, 회원 검색, 회원글올리기및로그아웃제공 ü update_form.asp 회원정보수정폼페이지 - 80 -

ü update_act.asp ü search_form.asp ü search_act.asp ü write_form.asp ü write_act.asp ü read_act.asp ü logout_act.asp ü warning.htm 회원정보수정실행페이지회원검색폼페이지회원검색실행페이지글쓰기폼페이지글쓰기실행페이지글읽기실행페이지로그아웃실행페이지경고문페이지 마. 각페이지작성 ü index.html <HTML><head><title>index.htm</title><head> <BODY> <h2> index.htm </h2> <hr> <a href=new_form.htm> 신규회원등록 </a><br> <form method=post action=login_act.asp> I D :<input type=text size=10 name=id> 암호 :<input type=password size=10 name=password><br> <input type=submit value= 로그인 > <input type=reset value= 다시 > </form> </BODY> </HTML> ü new_form.htm <HTML><head><title>new_form.htm</title> <script language="javascript"> <!-- function check_form() { if(document.aform.id.value == ""){ alert("id 입력하세요 "); } else if(document.aform.password.value == ""){ alert(" 암호입력하세요 "); } else if(document.aform.name.value == ""){ alert(" 이름입력하세요 "); } else{ document.aform.submit(); } } //--> </script> <head> - 81 -

<BODY> <h2> new_form.htm </h2> <hr> 회원등록페이지 <form method=post name=aform action=new_act.asp> I D :<input type=text size=10 name=id><br> 암호 :<input type=password size=10 name=password><br> 이름 :<input type=text size=10 name=name><br> <input type=button value= 등록 onclick=check_form()> <input type=reset value= 다시 > </form> </BODY> </HTML> ü new_act.asp <HTML><head><title>new_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> new_act.asp </h2> <hr> id = request("id") password = request("password") name = request("name") point = 0 SQL = "insert into mycustomer" SQL = SQL & "(id, password, name, point)" SQL = SQL & " values('" & id &"','" & password & "','" & name SQL = SQL & "'," & point & ")" 'response.write SQL cn.execute SQL cn.close set cn = nothing 회원등록이되었습니다 <br> <a href=index.htm> 로그인화면으로 </a><br> </BODY> </HTML> ü login_act.asp - 82 -

<HTML><head><title>login_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> login_act.asp </h2> <hr> id = request("id") password = request("password") SQL = "select * from mycustomer where id ='" & id & "'" 'response.write SQL set rs = cn.execute(sql) if rs.bof then 그런회원이없습니다 <br> <a href=index.htm> 다시로그인페이지로 </a><br> elseif password <> rs("password") then else end if 비밀번호가틀립니다 <br> <a href=index.htm> 다시로그인페이지로 </a><br> session("who") = id =rs("name") 님환영합니다 <br> <a href=member.asp> 회원전용구역으로 </a><br> rs.close cn.close set rs = nothing set cn = nothing </BODY> </HTML> ü member.asp - 83 -

if session("who") = "" then response.redirect "warning.htm" end if <HTML><head><title>member.asp</title><head> <BODY> <h2> member.asp </h2> <hr> 회원전용구역에오심을환영합니다 <p> <a href=update_form.asp> 회원정보수정 </a><br> <a href=search_form.asp> 회원검색 </a><br> <a href=write_form.asp> 글쓰기 </a><br> <a href=read_act.asp> 글읽기 </a><p> <a href=logout_act.asp> 로그아웃 </a> </BODY> </HTML> ü update_form.asp if session("who") = "" then response.redirect "warning.htm" end if <HTML><head><title>update_form.asp</title> <script language="javascript"> <!-- function check_form() { if(document.aform.password.value == ""){ alert(" 암호입력하세요 "); } else if(document.aform.name.value == ""){ alert(" 이름입력하세요 "); } else{ document.aform.submit(); } } //--> </script> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" loginid = session("who") SQL = "select * from mycustomer where id ='" & loginid & "'" 'response.write SQL set rs = cn.execute(sql) - 84 -

password = rs("password") name = rs("name") rs.close cn.close set rs = nothing set cn = nothing <head> <BODY> <h2> update_form.htm </h2> <hr> =loginid 회원정보수정페이지 <form method=post name=aform action=update_act.asp> 암호 :<input type=text size=10 name=password value==password><br> 이름 :<input type=text size=10 name=name value==name><br> <input type=button value= 수정 onclick=check_form()> <input type=reset value= 다시 > </form> </BODY> </HTML> ü update_act.asp <HTML><head><title>update_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> update_act.asp </h2> <hr> loginid = session("who") password = request("password") name = request("name") SQL = "update mycustomer set password = '" & password & "'," SQL = SQL & " name = '" & name & "'" SQL = SQL & " where id = '" & loginid & "'" 'response.write SQL cn.execute SQL cn.close set cn = nothing 회원정보가수정되었습니다 <br> - 85 -

<a href=member.asp> 회원전용구역으로 </a><p> <a href=logout_act.asp> 로그아웃 </a> </BODY> </HTML> ü search_form.asp if session("who") = "" then response.redirect "warning.htm" end if <HTML><head><title>search_form.asp</title> <script language="javascript"> <!-- function check_id() { if(document.aform.id.value == ""){ alert(" 입력하세요 "); } else{ document.aform.submit(); } } function check_name() { if(document.bform.name.value == ""){ alert(" 입력하세요 "); } else{ document.bform.submit(); } } //--> </script> <head> <BODY> <h2> search_form.asp </h2> <hr> 회원검색페이지 <form method=post name=aform action=search_act.asp> i d:<input type=text size=10 name=id> <input type=button value= 검색 onclick=check_id()> </form> <form method=post name=bform action=search_act.asp> 이름 :<input type=text size=10 name=name> <input type=button value= 검색 onclick=check_name()> </form> </BODY> </HTML> ü search_act.asp - 86 -

<HTML><head><title>search_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> search_act.asp </h2> <hr> id = request("id") name = request("name") if id <> "" then SQL = "select * from mycustomer where id ='" & id & "'" elseif name <> "" then SQL = "select * from mycustomer where name ='" & name & "'" end if Set rs = Server.CreateObject("ADODB.Recordset") 'response.write SQL rs.open SQL, cn, 3 response.write rs.recordcount & " 명의회원이있습니다 " Response.Write "<TABLE border = 1>" Response.Write "<tr><td>id</td><td> 이름 </TD></tr>" Do while Not rs.eof Response.Write "<tr>" Response.Write "<TD>" & rs("id") & "</TD>" Response.Write "<TD>" & rs("name") & "</TD>" Response.Write "</tr>" rs.movenext Loop Response.Write "</TABLE>" rs.close cn.close set rs = nothing set cn = nothing <p><a href=search_form.asp> 다시검색페이지로 </a><br> <a href=member.asp> 회원전용구역으로 </a><p> <a href=logout_act.asp> 로그아웃 </a> </BODY> </HTML> ü write_form.asp - 87 -

if session("who") = "" then response.redirect "warning.htm" end if <HTML><head><title>write_form.asp</title> <head> <BODY> <h2> write_form.asp </h2> <hr> 회원글쓰기페이지 <form method=post action=write_act.asp> <textarea name=letter rows=5 cols=40></textarea><br> <input type=submit value= 전송 > <input type=reset value= 다시 > </form> </BODY> </HTML> ü write_act.asp <HTML><head><title>write_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> write_act.asp </h2> <hr> loginid = session("who") letter = request("letter") SQL = "update mycustomer set letter = '" & letter & "'" SQL = SQL & " where id = '" & loginid & "'" 'response.write SQL cn.execute SQL cn.close set cn = nothing 글쓰기가완료되었습니다 <br> <a href=member.asp> 회원전용구역으로 </a><p> <a href=logout_act.asp> 로그아웃 </a> </BODY> </HTML> - 88 -

ü read_act.asp <HTML><head><title>read_act.asp</title> Set cn = Server.CreateObject("ADODB.Connection") curpath = Server.MapPath("/aaa/mycustomer.mdb") cn.open "DBQ="& curpath & ";" & _ "Driver={Microsoft Access Driver (*.mdb)};" &_ "DriverId=25; FIL=MS Access;" <head> <BODY> <h2> read_act.asp </h2> <hr> 회원님이쓰신글 :<p> loginid = session("who") SQL = "select letter from mycustomer where id = '" SQL = SQL & loginid & "'" 'response.write SQL set rs = cn.execute(sql) response.write rs("letter") rs.close cn.close set rs = nothing set cn = nothing <a href=member.asp><p> 회원전용구역으로 </a><p> <a href=logout_act.asp> 로그아웃 </a> </BODY> </HTML> ü logout_act.asp <HTML><head><title>logout_act.asp</title><head> <BODY> <h2> logout_act.asp </h2> <hr> session("who") = "" 로그아웃되었습니다 <br> <a href=index.htm> 로그인화면으로 </a><br> </BODY> </HTML> ü warning.htm - 89 -

<HTML><head><title>warning.htm</title><head> <BODY> <h2> warning.htm </h2> <hr> 로그인후이용하십시오 <br> <a href=index.htm> 로그인화면으로 </a><br> </BODY> </HTML> - 90 -

- 91 -

- 92 -

- 93 -

11. 게시판제작 가. 개요 ü 글쓰기, 글목록보기, 글읽기, 답변하기기능이있는게시판을제작하고함 나. 전체적인흐름도 다. 데이터베이스 라. 각페이지구성및모듈설명 ü write_form.htm 글쓰기폼 ü write_act.asp 글쓰기폼의응답페이지로데이터베이스에글저 장 ü board.asp 글의목록을디스플레이하는페이지 ü view.asp 목록에서글의제목이클릭되었을때해당글의 내용을보여주는페이지 ü answer_form.asp 글의답변을위한폼을제공하는페이지 ü answer_act.asp answer_form의응답페이지 - 94 -

마. 각페이지작성 ü write_form.htm <html><head> <title> 게시판쓰기 </title> <script language="javascript"> <!-- function send_chk(f){ if(f.title.value==""){ alert(" 제목을입력하세요."); f.title.focus(); }else if(f.author.value==""){ alert(" 이름을입력하세요."); f.author.focus(); }else if(f.letter.value==""){ alert(" 내용을입력하세요."); f.letter.focus(); }else{ f.submit(); } } //--> </script> </head> <body bgcolor="white"> <center> <table border="0" width="600"> <form action="write_act.asp" method="post" name="aform"> <tr><td colspan=2 height=50> <p align="center"><font size="5"> 글올리기 </font></p><hr></td> </tr> <tr><td align=right> 제목 :</td> <td><input name="title" size="50" maxlength="50" ></td> </tr> <tr><td align=right> 이름 :</td> <td><input name="author" maxlength="10" size="10"></td> </tr> <tr><td align="right" valign="top"> 내용 :</td> <td><textarea cols="60" name=letter rows=15></textarea></td> </tr> <tr><td colspan=2 height=20> </td> </tr> <tr><td colspan=2><input type="button" value=" 글올리기 " onclick="send_chk(this.form)"></td> </tr> </form> </table> </center> - 95 -

</body> </html> ü write_act.asp set cn = Server.CreateObject("ADODB.Connection") cn.open "board" SQL = "select max(groupnum) from board" set rs = cn.execute(sql) if isnull(rs(0)) then groupnum = 1 else groupnum = rs(0) + 1 end if title = replace(request("title"),"'","''") author = replace(request("author"),"'","''") letter = replace(request("letter"),"'","''") SQL = "insert into board(title,author,day,viewcnt,letter," SQL = SQL & "groupnum,depth,disp) values(" SQL = SQL & "'" & title & "','" & author & "','" & date SQL = SQL & "', 0,'" & letter & "'," & groupnum & ",0,0)" 'Response.write SQL cn.execute(sql) rs.close cn.close set rs = nothing set cn = nothing Response.redirect("board.asp") ü board.asp <html><head> <title> 게시판 </title> </head> <body> if Request.QueryString("page")="" then page = 1 else page = int(request.querystring("page")) end if Set cn = Server.CreateObject("ADODB.Connection") cn.open "board" Set rs = Server.CreateObject("ADODB.Recordset") SQL = "SELECT * FROM board ORDER BY groupnum DESC, disp ASC" rs.open SQL, cn, 3-96 -

<h2> 게시판 </h2> <hr> <table border="0" width="800" bgcolor="white"> <tr> <td width="50" bgcolor="teal"><p> 번호 </td> <td width="450" bgcolor="teal"><p> 제목 </td> <td width="100" bgcolor="teal"><p> 작성자 </td> <td width="100" bgcolor="teal"><p> 작성일 </td> <td width="100" bgcolor="teal"><p> 조회수 </td> </tr> rs.pagesize = 5 i = rs.pagesize seqno = rs.recordcount - i*(page-1) rs.absolutepage = page do while Not rs.eof and i > 0 <tr> <td width="50" height="20" bgcolor="white">=seqno</td> <td width="450"> depth = rs("depth") if depth > 0 then <img src="image/blank.gif" border="0" height="20" width==20*depth> <img src="image/open.gif" border="0"> else <p><img src="image/close.gif" border="0"> end if <a href="view.asp?num==rs("num")&page==page"> =rs("title")</a> </td> <td width="100" align="center"><p>=rs("author")</td> <td width="100" align="center">=left(rs("day"),10)</td> <td width="100" align="center"><p>=rs("viewcnt")</td> </tr> seqno = seqno - 1 i = i - 1 rs.movenext loop <tr> <td colspan="5"><hr></td> </tr> <tr> <td height="20" align="right" colspan="2"><p> <a href="write_form.htm">[ 글올리기 ]</a></p></td> <td align="right" colspan="3"> if page > 1 then <a href=board.asp?page==page-1>[ 이전페이지 ]</a> else [ 이전페이지 ] end If - 97 -

( =page / =rs.pagecount ) if page < rs.pagecount then <a href=board.asp?page==page+1>[ 다음페이지 ]</a> else [ 다음페이지 ] end if </td> </tr> rs.close Set rs = Nothing cn.close Set cn = Nothing </table> </body> </html> ü view.asp num = Request.QueryString("num") page = Request.QueryString("page") Set cn=server.createobject("adodb.connection") cn.open "board" SQL = "SELECT * FROM board WHERE num = " & num Set rs=cn.execute(sql) letter=replace(rs("letter"),chr(13),"<br>") <html> <head> <title> 게시판보기 </title> </head> <body bgcolor="white"> <table border="0" width="800"> <tr> <td align="center" bgcolor="#d16363" height="4"> <font color="white"><b>=rs("title")</b></font></td> </tr> <tr> <td height="30" align="center"> 글번호 : =num 작성자 : =rs("author")</a> 작성일 : =rs("day") 조회수 : =rs("viewcnt")</td> </tr> <tr> <td bgcolor="#fdf0e8">=letter</td> </tr> <tr> <td height=30> </td> - 98 -

</tr> <tr> <td height="20" align=center> <a href="board.asp?page==page">[ 목록보기 ]</a> <a href="write_form.htm">[ 글쓰기 ]</a> <a href="answer_form.asp?page==page&num==num"> [ 답변하기 ]</a></td> </tr> </table> cn.execute("update board SET viewcnt=viewcnt+1 WHERE num = " & num) rs.close cn.close Set rs = Nothing Set cn = Nothing </body> </html> ü answer_form.asp num=request.querystring("num") page=request.querystring("page") Set cn=server.createobject("adodb.connection") cn.open "board" SQL = "SELECT * FROM board WHERE num = "& num Set Rs=cn.execute(SQL) groupnum = rs("groupnum") depth = rs("depth") disp = rs("disp") title = rs("title") <html> <head> <title> 게시판답장쓰기 </title> <script language="javascript"> <!-- function send_chk(f){ if(f.title.value==""){ alert(" 제목을입력하세요."); f.title.focus(); }else if(f.author.value==""){ alert(" 이름을입력하세요."); f.author.focus(); }else if(f.letter.value==""){ alert(" 내용을입력하세요."); f.letter.focus(); - 99 -

}else{ } } //--> </script> </head> f.submit(); <body bgcolor="white"> <center> <table border="0" width="600"> <form action="answer_act.asp" method="post" name="aform"> <tr> <td colspan=2 height=50> <p align="center"> <font size="5"> 답장쓰기 </font></p> </td> </tr> <tr> <td colspan=2 height="27"> <input type="hidden" name="page" value="=page"> <input type="hidden" name="num" value="=num"> <input type="hidden" name="groupnum" value="=groupnum"> <input type="hidden" name="depth" value="=depth"> <input type="hidden" name="disp" value="=disp"></td> </tr> <tr> <td align=right> 제목 : </td> <td><input name="title" size="50" maxlength="50" value="[re:]=title"></td> </tr> <tr> <td align=right> 이름 : </td> <td><input name="author" maxlength="10" size="10"></td> </tr> <tr> <td align="right" valign="top"> 내용 : </td> <td><textarea cols="60" name=letter rows=15>=rs("letter") --------------------- </TEXTAREA></td> </tr> <tr> <td colspan=2 height=20> </td> </tr> <tr> <td colspan=2 align="middle"><input type="button" value=" 답변글쓰기 " onclick="send_chk(this.form)"></td> </tr> </form> </table> </center> </body> </html> - 100 -

ü answer_act.asp num = request.form("num") page = request.form("page") groupnum = request.form("groupnum") depth = request.form("depth") disp = request.form("disp") title = replace(trim(request.form("title")),"'","''") author = replace(trim(request.form("author")),"'","''") letter = replace(request.form("letter"),"'","''") Set cn = Server.CreateObject("ADODB.Connection") cn.open "board" SQL = "UPDATE board SET disp = disp+1 WHERE groupnum = " SQL = SQL & groupnum & " AND disp > " & disp cn.execute(sql) disp = disp+1 depth = depth+1 SQL = "INSERT INTO board(title,author,day,viewcnt," SQL = SQL & "letter,groupnum,depth,disp) VALUES('" & title SQL = SQL & "','" & author & "','" & date & "',0,'" & letter SQL = SQL & "'," & groupnum & "," & depth & "," & disp & ")" 'response.write SQL cn.execute(sql) cn.close Set cn = Nothing Response.redirect("board.asp?page=" & page) - 101 -

- 102 -

- 103 -

- 104 -

12. 각종에러와오류수정 가. DB 관련에러 ü DB 경로가잘못설정된경우 오류형식 : Microsoft JET Database Engine (0x80004005) 'C:\inetpub\wwwroot\bohun\bohun.mdb' 파일을찾을수없습니다. /bohun/member_m/edit_save.asp, line 18 - 해결 : 해당라인을찾아 DB 경로수정 ü DB 권한설정이되어있지않은경우 오류형식 : Microsoft JET Database Engine (0x80004005) Microsoft Jet 데이터베이스엔진에서 'C:\inetpub\wwwroot\bohun\db\bohun.mdb' 파일을열수없습니다. 이미다른사용자가이파일을단독사용모드로열었거나데이터보기권한이필요할수도있습니다. /bohun/member_m/simsa_ok.asp, line 18 - 해결 : 라인과무관하게 DB 권한만설정 ü 테이블이름이다른경우 오류형식 : Microsoft JET Database Engine (0x80040E37) Microsoft Jet 데이터베이스엔진에서입력테이블이나 'masters' 쿼리를찾을수없습니다. 테이블이나쿼리가있는지, 이름을정확히입력했는지를확인하십시오. /bohun/member_m/edit_save.asp, line 54 - 해결 : masters 라는테이블명이있는지확인한후없다면재이름으로수정 ü SQL 문장이잘못된경우 오류형식 : Microsoft JET Database Engine (0x80040E07) 조건식의데이터형식이일치하지않습니다. /bohun/member_m/edit_save.asp, line 58 - 해결 : 해당라인은실행문장이므로이전라인의 SQL 문장의잘못을확인함. 문자가아닌경우큰따옴표를사용하지않아야함 나. 자바스크립트에러 ü 저장이되지않고브라우저하단에 페이지에오류가있습니다 의경우 - 해결 : 브라우저의 [ 도구 ]-[ 옵션 ]-[ 고급 ] 에서아래와같이 모든스크립트오류에관련된알림표시 를선택하고다시실행하여해당오류라인을찾아수정함.( 정확한라인이아닐수있음 ) - 105 -

다. 오류수정방법 ü Response.End를이용한에러잡아들이기 - 에러를잡는가장고전적인방법으로 ASP코드의중간에 Response.Write " 여기까지는이상이없습니다." Response.End 라고사용하면에러가발생되는라인을알아낼수있는방법이다. 하지만이방법은프로그램의라인이많으면반복해서사용해야함으로효율이떨어지고 IE의버퍼에문제있는코드가있다면계속오류발생하여버퍼를다지우고 IE를모두닫았다가열어야하는번거로움이있다. 하지만위의방법은가장간단하고별다른코드입력이없기때문에아직도많이쓰여지고있다. 특히 SQL문실행과정에서에러가나는부분은아래처럼함으로확인할수있다. Response.Write sql Response.end ü Err 객체를이용한에러처리하기 - 아래와같이에러가있는파일 (Err.asp) 을작성한후불러온다. - 106 -

<HTML><BODY> Dim su1, su2, hap, cha, gob, div su1=100 : su2=0 hap=su1+su2 : cha = su1-su2 : gob = su1 * su2 : div = su1 / su2 Response.Write " 두수의더하기 : " &hap &"<BR>" Response.Write " 두수의빼기 : " &cha &"<BR>" Response.Write " 두수의곱하기 : " &gob &"<BR>" Response.Write " 두수의나누기 : " &div &"<BR>" </BODY></HTML> 위의에러의경우서버와클라이언트에서테스트해보면... 서버상에서의결과화면 다른클라이언트에서의결과화면 같은에러에대해서다른화면이보이고있다. 어떤때는에러의원인이보이고어떤때에는골치아픈 HTTP 500 내부서버오류가나오고있다. IIS를정지하고버퍼를지우고다해보지만결과는같다. 위의경우해결방법은 Response.end를중간중간에심어서테스트하는첫번째방법을이용하면찾아낼수있다. 이런상황이계속되면성질급한사람 - 107 -

은포기를하든지아니면오기로매달린다. 밤새도록... 이번에는 Err객체를이용해서에러를잡아보자. 아래의소스 (Err2.asp) 처럼수정하고실행시킨다. Option Explicit On Error Resume Next <HTML><BODY> Dim su1, su2, hap, div su1=100 : su2=0 : hap=su1+su2 : div = su1 / su2 Response.Write " 두수의더하기 : " &hap &"<BR>" Response.Write " 두수의나누기 : " &div &"<BR>" If Err.Number >0 then Response.Write " 에러가있습니다." Err.Clear else Response.Write " 에러가없습니다." End if </BODY></HTML> 아래는 2대의컴퓨터의결과화면이다. 자세히원인은모르지만페이지자체적으로 Err객체는에러를알아내고있다. Option Explicit 는변수선언확인문이다. 선언되지않은변수는사용할수없어서변수로인한오류를막을수있는좋은방법이다. On Error Resume Next문은에러가나도계속진행하라는선언문이다. 그래야에러원인을알수있다. Err.Number는에러가난갯수를갖고있는객체이다. 따라서에러가발생하면에러갯수로에러를알수있다. Err.Clear는반드시선언해야한다. 에러를 Err객체목록에서지우는역활을한다. - 108 -

아래와같이소스를수정 (Err3.asp) 하고테스트하자. Option Explicit On Error Resume Next <HTML><BODY> Dim su1, su2, hap, div su1=100 : su2=0 : hap=su1+su2 : div = su1 / su2 Response.Write " 두수의더하기 : " &hap &"<BR>" Response.Write " 두수의나누기 : " &div &"<BR>" If Err.Number >0 then Response.Write " 에러가있습니다.<BR><BR>" Response.Write "ASP에지정된에러번호 :" &Err.Number &"<BR>" Response.Write " 에러원인 : " &Err.Description &"<BR>" Response.Write " 에러를발생시킨객체 :" &Err.Source &"<BR>" Err.Clear else Response.Write " 에러가없습니다.<BR>" End if </BODY></HTML> 결과는아래와같으며좀더자세한결과가출력되었다. Err 객체의경우어느라인에서에러가났는지알아낼방법이없다. ü IE 의기능을이용한에러잡기 (HTTP 500 내부서버오류잡아냄 ) - 아래처럼소스 (Err4.asp) 를작성하고 IE 에서확인하자. ("" ASP 표식이빠져있 다.) - 109 -

<HTML><BODY> Response.clear Response.Write "A" &"<BR>" Response.Write "B" &"<BR>" </BODY></HTML> 아래는결과화면이다. 역시 HTTP 500 - 내부서버오류가뜬다. IE 를열고 [ 도구 ] 메뉴의 [ 인터넷옵션 ] 을클릭한다. [ 고급 ] 탭의 [HTTP 오류메시지표시 ] 체크를풀어준다. - 110 -

[ 확인 ] 을누르고페이지를다시불러온결과이다. 내부서버오류의원인이 보이고있다. 이방법은 DB 관련내부서버오류도잡아내는기능을갖고있다. 위의방법중에서세번째가가장정확히 HTTP 500 - 내부서버오류를찾아냈다. 세번째방법은한번만설정해두면편리할것이다. 평상시에 Option Explicit문을선언하는습관을가지면좋겠다. 그리고 Err객체도완전한건아니지만많은도움이될것이다. - 111 -

- 112 -

- 113 -

- 114 -

13. 포트폴리오 (PortPolio) 가. 대한민국상이군경회 ü 단순한회원관리사이트가아닌회원관리시스템의규모임. 나. 초기화면 - 115 -

다. 데이터베이스 - 컨버전 (conversion) 데이터약 9 만건 라. 각페이지구성 ( 약 130 개프로그램 ) ü bohun 폴더 : 전체페이지포함폴더 (3 개 ) - index.htm / link.css / regist.asp ü member_m : 회원관리폴더 (27개( 우편번호폴더제외 )) - zip.asp / view.asp / upload_ok.asp / upload.asp / simsa_view.asp / simsa_search_ok.asp / simsa_ok.asp / simsa_front.asp / simsa_back.asp / simsa.asp / searchzip.asp / search.asp / sangi_search.asp / sangi_edit.asp sangi_delete.asp / print2_view.asp / print1_view.asp / member-save.asp / index.asp / edit_save.asp / delete.asp / change_search.asp / change_edit.asp / card_search.asp / card_ok.asp / card_delete.asp / card.asp ü member_v : 회원관리폴더 (19개) - sangi.asp / print_search.asp / print_sangi.asp / print_name.asp / print_member.asp / print_index.asp / print_gibu.asp / print_edu.asp / print_change.asp / print_army.asp / print_addr.asp / name.asp / member.asp / index.asp / gibu.asp / edu.asp / change.asp / army.asp / addr.asp ü member-s1 : 지부관리폴더 (14 개 ) - sangi.asp / print_sangi.asp / print_index.asp / print_edu.asp / print_death.asp / print_change.asp / print_birth.asp / print_army.asp / - 116 -