주의3:
기본적으로 텍스트와 폼 요소의 레이블은 HTML 규칙에따라 자동으로 특수문자로 변환된다. 이 것은 버튼 레이블로서 안전하게 "<날 눌러>"를 사용할 수 있다는 것을 의미한다. 그러나 Á와 같은 특수한 HTML 문자를 필드에 삽입할 수는 없다. 자동 특수문자 변환 기능을 사용하지 않으려면 CGI 개체를 생성한 직후 거짓으로
<ISINDEX> 태그를 출력한다. -action 매개변수는 질의를 처리할 스크립트의 URL을 지정한다. 기본값은 현재 스크립트로 질의를 전송한다.
폼의 시작과 종료
print $query->startform(-method=>$method,
-action=>$action,
-encoding=>$encoding);
<... 여러가지 폼 요소 ...>
print $query->endform;
또는
print $query->startform($method,$action,$encoding);
<... 여러가지 폼 요소 ...>
print $query->endform;
startform()
은 사용자가 지정한 메소드, 액션, 엔코딩 형식을 갖는 <FORM> 태그를 리턴한다. 메소드는 POST가 기본값이며, 액션은 현재 스크립트, 엔코딩은 application/x-www-form-urlencoded가 기본값이다.
endform()
</FORM> 태그를 리턴한다.
Startform()
의 엔코딩은 서버로 폼을 전송하기 전에 폼의 여러 필드를 어떻게 결합해야 하는지를 브로우저에 통지하는 역할을 한다. 여기에는 두개의 값이 가능하다.
application/x-www-form-urlencoded
이 것은 네스케잎 2.0 이전의 모든 브로우저에서 사용된 엔코딩 형식이다. 이 것은 많은 CGI 스크립트와 호환되며 텍스트 데이타를 포함하는 짧은 데이타를 전송하는데에 적합하다. 편의를 위해 CGI.pm은 이 엔코딩 형식을 $CGI::URL_ENCODED에 저장한다.
multipart/form-data
넷스케잎 2.0에의해 도입된 새로운 엔코딩 형식이다. 이 것은 아주 많은 필드를 포함하거나 2진 데이타를 전송하려는 폼에 적당하다. 가장 중요한 것은 이 기능은 넷스케잎 2.0의 파일 업로드 특징을 사용해야 한다는 것이다. 편의를 위해 CGI.pm은 이 엔코딩 형식의 이름을 &CGI::MULTIPART에 저장한다.
이 엔코딩 형식을 사용하는 폼은 CGI.pm이나 이들을 처리하도록 설계된 다른 라이브러리를 사용하지 않으면 쉽게 해석할 수 없다.
주의:
파일업로드 기능은 현재 넷스케잎 2.0이상, M$IE 4.0이상에서만 지원된다.
호환성을 위해
startform()
메소드는 기본값으로 오래된 엔코딩 형식(application/x-www-form-urlencoded)을 사용한다. 만약 기본값으로 새로운 엔코딩 형식을 사용하려면 startform() 대신에 start_multipart_form()을 호출한다.
자바스크립트:
-name과 -onSubmit 매개변수는 자바스크립트와 함께 사용하기위해 제공된다. -name 매개변수는 자바스크립트 함수에의해 조작될 수 있도록 폼에 이름을 부여한다. -onSubmit 매개변수는 폼을 서버에 전송하기전에 수행될 자바스크립트 함수를 지정하는데 사용된다. 일관성과 완전성을 위해 폼의 내용을 검사하는데 이러한 기능을 사용할 수 있다. 폼의 내용중 잘못된 곳을 발견하면 경고 메시지를 출력하거나 자바스크립트 내에서 정정할 수 있다. 이 함수에서 거짓을 리턴함으로서 폼의 제출을 중지할 수도 있다.
보통 자바스크립트 함수는 HTML 헤더부의 <SCRIPT> 블럭내에 정의되며 -onSubmit은 이들 함수중 하나를 호출하는데 사용된다. 보다 자세한 것은
자바스크립트:
자바스크립트의 이벤트 처리기를 지원하기 위해 -onChange, -onFocus,
-onBlur, -onMouseOver, -onMouseOut와 -onSelect을 사용할 수 있다. onChange 처리기는 사용자가 텍스트 필드의 내용을 변경했을 자바스크립트를 호출한다. 원하는 경우 이 것을 입력 검사에 사용할 수 있다. onFocus와 onBlur는 각각 마우스 포인트를 텍스트 필드 안쪽과 바깥족으로 이동할 때 자바스크립트를 호출한다. onSelect는 사용자가 선택된 텍스트 필드의 일부를 변경했을 때 호출된다.
큰 텍스트 필드(Textarea) 생성하기
는 넷스케잎 2.0의 파일 업로드 필드를 리턴한다. 이 파일 업로드의 잇점을 취하기위해 해당 폼은 반드시 새로운 multipart 엔코딩 형식을 사용해야 한다. $CGI::MULTIPART의 엔코딩 형식으로 startform()를 호출하거나 startform() 대신에 새로운 메소드인 start_multipart_form()를 호출해야 한다.
매개변수
첫번째 매개변수는 필드에대한 이름이다(-name).
두번째 매개변수는 기본 파일명으로 사용될 초기값이다(-default).
넷스케잎 2.0 베타2 판은 현재 이 필드에대한 어떠한 처리도 하지 못하며, 따라서 초기값은 항상 공백일 것이다. 더욱 좋지않은 것은 이 필드는 이전 내용을 기억할 수 없다는 것이다. 그러나 초기값 필드는 HTML 명세에 포함되었으므로 넷스케잎의 다음 버전에서는 수정될 것이다.
세번째 매개변수는 화면에 출력될 필드의 크기(문자수)이다(-size).
네번째 매개변수는 필드가 허용할 수 있는 최대 문자의 수이다(-maxlength).
폼이 처리될 때
param()
를 호출함으로서 입력한 파일명을 복구할 수 있다.
$filename = $query->param('uploaded_file');
넷스케잎 2.0에서 리턴된 파일명은 원격 컴퓨터 상의 완전한 로칼 파일명이다. 만약 원격 사용자가 Unix에서 작업하고 있다면 파일명은 Unix 관례에따라 다음과 같을 것이다.
/path/to/the/file
MS-DOS/Windows나 OS/2에서 작업하고 있다면 파일명은 도스 관례에따라 다음과 같을 것이다.
C:\PATH\TO\THE\FILE.MSW
맥킨토시의 경우 파일명은 맥킨토시의 관례에따라 다음과 같을 것이다.
HD 40:Desktop Folder:Sort Through:Reminders
리턴된 파일명은 또한 파일 핸들이다. 따라서 펄의 표준 파일 읽기 방법을 사용해서 파일의 내용을 읽을 수 있다.
# 텍스트 파일을 읽고 화면에 출력한다.out
while (<$filename>) {
print;
}
# 2진 파일을 안전하게 다른 곳으로 복사한다.
open (OUTFILE,">>/usr/local/web/users/feedback");
while ($bytesread=read($filename,$buffer,1024)) {
print OUTFILE $buffer;
}
파일이 업로드될 때 브로우저는 보통 헤더 형식으로 몇몇 정보를 전송한다. 이 정보에는 보통 MIME 형식이 포함된다. 앞으로의 브로우저들은 다른 정보(변경일자와 같은)도 전송하게 될 것이다. 문서 헤더를 포함하는 이러한 정보를 복원하기 위해 연관배열을 리턴하는
두번째 매개변수(-values)는 메뉴 항목을 포함하는 배열이다. 예에서 보여진 것처럼 익명의 배열을 인자로 전달하거나 "\@foo"와 같이 이름을 갖는 배열을 전달할 수 있다.
세번째 매개변수(-default)는 기본적으로 선택될 메뉴 항목의 이름이다. 지정되지 않으면 첫번째 항목이 기본적으로 선택된다. 이전에 선택한 값은 질의를 통해 유지될 것이다.
네번째 매개변수(-labels)는 팝업 메뉴에서 사용자에게 보여지는 항목과 스크립트로 리턴되는 값을 다르게 하려는 사람들을 위해 제공된다. 이 매개변수를 공백으로 두면 메뉴값은 기본적으로 출력된 값(-values 값)이된다(또한 원하는 경우 정의되지 않은 값을 사용할 수도 있다).
폼이 처리될 때 팝업 메뉴에서 선택한 값은 다음과 같은 방법으로 복구될 수 있다.
$popup_menu_value = $query->param('menu_name');
자바스크립트:
popup_menu()
는 다음과 같은 이벤트 처리기를 인식한다:
-onChange, -onFocus, -onBlur,
-onMouseOver, -onMouseOut과 -onSelect 매개변수를 사용할 수 있다.
첫번째와 두번째 매개변수는 리스트의 이름(-name)과 값(-values)이다. 팝업메뉴에서 처럼 두번째 인자는 배열이어야 한다.
세번째 인자(-default)는 기본적으로 선택될 값들을 포함하는 배열이나 선택될 하나의 값일 수 있다. 이 인자가 누락되거나 정의되지 않으면 리스트가 처음 화면상에 나타날 때 어떠한 것도 선택되지 않는다. 기명 매개변수로는 이 매개변수에대한 동의어 인 "-defaults"를 사용할 수 있다.
네번째 매개변수는 화면에 출력될 선택 목록의 크기이다(-size).
다섯번째 인자가 참으로 설정되면 동시에 여러개를 선택할 수 있다(-multiple). 그렇지 않으면 단지 한번에 하나만 선택할 수 있다.
여섯번째 인자에는 리스트 항목과 화면에 출력될 라벨로 구성된 연관배열을 지정할 수 있다. 지정되지 않으면 값이 화면에 출력된다.
폼이 처리될 때 선택된 모든 항목은 'list_name'과 같은 매개변수를 이용해서 배열로 리턴받을 수 있다. 선택된 항목의 값은 다음과 같이 복구될 수 있다.
@selected = $query->param('list_name');
자바스크립트:
scrolling_list()
는 다음과 같은 이벤트 처리기를 인식한다:
-onChange, -onFocus, -onBlur ,
-onMouseOver, -onMouseOut, 과 -onSelect 매개변수를 사용할 수 있다.
첫번째와 두번째 인자는 각각 체크상자의 이름과 값((-name과 -values)이다. 팝업 메뉴에서처럼 두번째 인자는 배열일 수 있다. 이들 값은 질의 문자열로 스크립트에 전달되는 값 뿐만아니라 다음 체크 상자 앞에 출력되는 레이블로도 사용된다.
세번째 인자(-default)는 기본적으로 체크될 값들을 지정하는 배열이거나 체크될 하나의 값일 수 있다. 이 인자를 누락하거나 정의하지 않으면 체크 목록이 처음 나타날 때 어떠한 것도 선택되지 않는다.
네번째 인자(-linebreak)를 참으로 두면 수직 리스트로 나타나도록 체크상자 사이에 줄바꿈 코드둔다. 그렇치 않으면 이들은 수평으로 나타난다.
다섯번째 인자는 체크 상자의 값과 사용자가 볼 수 있는 레이블의 쌍으로 구성된 연관배열이다(-labels). 만약 지정하지 않으면 값이 기본 레이블로 사용된다.
HTML3-호환 브로우저(Netscape과 같은)는 -rows와 -columns과 같은 추가적인 매개변수를 취할 수 있다. 이들 매개변수로
checkbox_group()
는 지정된 행과 열로 체크상자 그룹을 정렬한 표를 리턴한다. 원하는 경우 -columns 매개변수만 제공할 수 있다. checkbox_group은 여기에대한 올바른 행수를 계산할 것이다.
리턴되는 표의 헤더부분을 정의하기위해 -rowheaders와 -colheaders 매개변수를 사용할 수 있다. 이들 둘다 배열을 사용할 수 있다. 이들 헤더는 장식을 위한 것이며, 체크 상자를 처리하는데에는 포함되지는 않든다. 따라서 체크 상자는 아직도 하나의 이름을 갖는 단위이다.
폼이 처리될 때 체크 상자의 모든 항목은 'group_name'을 이용해서 목록으로 리턴받을 수 있다. 체크상자의 "on" 값은 다음과 같이 복구될 수 있다.
@turned_on = $query->param('group_name');
checkbox_group()
에의해 리턴된 값은 사실 버튼 요소의 배열이다. 이들을 표, 목록이나 다른 창의적인 방법으로 이들을 사용할 수 있다.
두번째 인자(-values)는 래디오 버튼에대한 값의 목록이다. 페이지에 나타나는 값과 레이블은 동일하다. 두번째 인자로 배열을 전달한다. 배열은 익명 배열이나 이름을 갖는 배열, "\@foo"일 수 있다.
세번째 매개변수(-default)는 기본적으로 선택될 버튼의 이름이다. 만약 지정하지 않으면 첫번째 항목이 기본적으로 선택된다. 버튼을 기본적으로 선택하지 않기위해 존재하지 않는 버튼 이름을 제공할 수 있다.
네번째 매개변수(-linebreak)는 버튼들 사이에 줄바꿈 코드를 두기위해 "참"으로 설정할 수 있다. 수직리스트를 생성한다.
다섯번째 매개변수(-labels)는 버튼값과 화면출력에 사용될 레이블로 구성된 연관배열이다. 만약 제공하지 않으면 값 자체가 출력된다.
HTML3-호환 브로우저(Netscape과 같은)은 -rows와 -columns과 같은 추가적인 매개변수를 취할 수 있다. 이들 매개변수로
radio_group()
는 지정된 행과 열로 정렬된 레디오 그룹을 표로 리턴한다. 원하는 경우 -columns 매개변수만 제공할 수 있다. radio_group은 여기에대한 올바른 행수를 계산할 것이다.
리턴되는 표의 헤더부분을 정의하기위해 -rowheaders와 -colheaders 매개변수를 사용할 수 있다. 이들 둘다 배열을 사용할 수 있다. 이들 헤더는 장식을 위한 것이며, 이들은 체크 상자를 처리하는데에 포함되지는 않든다. 따라서 체크 상자는 아직도 하나의 이름을 갖는 단위이다.
첫번째 인자(-name)는 조건부이다. 폼에 여러 개의 제출 버튼이 있으면서 이들을 구분하려면 버튼에 이름을 줄 수 있다. 이 이름은 또한 레이블로도 사용된다. 몇몇 소수의 오래된 브로우저는 이 것을 바르게 처리하지 못하며 버튼의 값을 전송하지 못한다는 것에 주의해야 한다.
두번째 인자(-value)또한 조건부이다. 이 것은 질의 문자열을 통해 스크립트로 전달될 값을 지정한다.