날짜: 1996-07-05 | 글쓴이: 도아 | 7063 번 | 프린트 | 메일로보내기

제 5강 - 폼문서 생성하기


주의1: 폼을 생성하는 여러 메소드는 모두 문자열(요청한 폼 요소를 생성하는 태그들을 포함하는)을 리턴한다. 이 문자열을 출력하는 것은 사용자가 해야 한다.

주의2: 폼에서 지정하는 기본 값은 단지 처음 스크립트가 호출될때(어떠한 질의 문자열이 존재하지 않을 때)에만 사용된다. 이어지는 스크립트의 호출(질의 문자열이 존재할 때)의 경우 질의 문자열이 빈줄일지라도 이전 값들이 사용된다.

폼 필드값을 변경하려면 두가지 방법이 있다.

  1. param()
    를 호출해서 변경한다.
  2. -override(별명 -force) 매개변수를 사용한다(2.15 판의 새로운 특징). 이 것은 사용될 기본 값을 이전 값과 무관하게 강제로 변경한다.

print $query->textfield(-name=>'field_name',
	-default=>'초기값',
	-override=>1,
	-size=>50,
	-maxlength=>80);

주의3: 기본적으로 텍스트와 폼 요소의 레이블은 HTML 규칙에따라 자동으로 특수문자로 변환된다. 이 것은 버튼 레이블로서 안전하게 "<날 눌러>"를 사용할 수 있다는 것을 의미한다. 그러나 &Aacute;와 같은 특수한 HTML 문자를 필드에 삽입할 수는 없다. 자동 특수문자 변환 기능을 사용하지 않으려면 CGI 개체를 생성한 직후 거짓으로

autoEscape()
메소드를 호출하면 된다.

$query = new CGI;
$query->autoEscape(undef);
ISINDEX 태그 생성하기

print $query->isindex(-action=>$action);

또는

print $query->isindex($action);

<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은 이들 함수중 하나를 호출하는데 사용된다. 보다 자세한 것은

<A HREF="perl-cgipm3.htm#CREATING_THE_HTML_DOCUMENT_HEADE">start_html()</A>
을 보기 바란다. 텍스트 필드 생성하기

print $query->textfield(-name=>'field_name',
	-default=>'초기값',
	-size=>50,
	-maxlength=>80);

또는

print $query->textfield('field_name','starting value',50,80);

textfield()
는 텍스트 입력필드를 리턴한다.

매개변수
첫번째 매개변수는 필드에대한 이름(-name)으로 반드시 필요하다.

두번째 매개변수는 필드에대한 기본값이다(-default).

세번째 매개변수는 화면에 출력될 필드의 크기(문자수)이다(-size).

네번째 매개변수는 필드가 허용할 수 있는 최대 문자의 수이다(-maxlength).

이 메소드에서 필드는 CGI 스크립트를 이전에 호출했을 때 가졌던 내용으로 초기화된다. 폼을 처리할 때 텍스트 필드의 값은 다음과 같이 복구될 수 있다.

$value = $query->param('foo');

스크립트가 일단 호출된 후 초기값을 재 설정하려면 다음과 같은 방법을 사용할 수 있다.

$query->param('foo',"난 네가 뭐라고 하는지 모르겠어!");

2.15판의 새로운 특징: 만약 필드가 이전 값을 취하지 않도록 하려면 -override (별명:-force) 매개변수를 사용해서 현재의 값을 강제로 변경하면 된다.

print $query->textfield(-name=>'field_name',
	-default=>'초기값',
	-override=>1,
	-size=>50,
	-maxlength=>80);

자바스크립트: 자바스크립트의 이벤트 처리기를 지원하기 위해 -onChange, -onFocus, -onBlur, -onMouseOver, -onMouseOut-onSelect을 사용할 수 있다. onChange 처리기는 사용자가 텍스트 필드의 내용을 변경했을 자바스크립트를 호출한다. 원하는 경우 이 것을 입력 검사에 사용할 수 있다. onFocus와 onBlur는 각각 마우스 포인트를 텍스트 필드 안쪽과 바깥족으로 이동할 때 자바스크립트를 호출한다. onSelect는 사용자가 선택된 텍스트 필드의 일부를 변경했을 때 호출된다. 큰 텍스트 필드(Textarea) 생성하기

print $query->textarea(-name=>'foo',
	-default=>'초기값',
	-rows=>10,
	-columns=>50);

또는

print $query->textarea('foo','초기값',10,50);

textarea()
는 텍스트 필드와 같지만 여러 줄의 입력창을 만들기 위해 행과 열을 지정할 수 있다. 이 필드에대한 초기값과 줄수와 폭을 지정할 수 있다.

자바스크립트: -onChange, -onFocus, -onBlur , -onMouseOver, -onMouseOut, 과 -onSelect 매개변수를 사용할 수 있다.

<A HREF="#CREATING_A_TEXT_FIELD">textfield()</A>
를 보기바란다. 패스워드 필드 생성하기

print $query->password_field(-name=>'secret',
	-value=>'초기값',
	-size=>50,
	-maxlength=>80);

또는

print $query->password_field('secret','초기값',50,80);

password_field()
textfield()
와 동일하지만 패스워드 필드의 내용은 웹페이지상에서 별표(*)로 표시된다는 차이가 있다.

자바스크립트: -onChange, -onFocus, -onBlur , -onMouseOver, -onMouseOut, 과 -onSelect 매개변수를 사용할 수 있다.

<A HREF="#CREATING_A_TEXT_FIELD">textfield()</A>
를 보기바란다. 파일 업로드 필드 생성하기

print $query->filefield(-name=>'uploaded_file',
	-default=>'초기값',
	-size=>50,
	-maxlength=>80);

또는

print $query->filefield('uploaded_file','초기값',50,80);

filefield()
는 넷스케잎 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 형식이 포함된다. 앞으로의 브로우저들은 다른 정보(변경일자와 같은)도 전송하게 될 것이다. 문서 헤더를 포함하는 이러한 정보를 복원하기 위해 연관배열을 리턴하는

uploadInfo()
를 사용할 수 있다.

$filename = $query->param('uploaded_file');
$type = $query->uploadInfo($filename)->{'Content-Type'};
unless ($type eq 'text/html') {
	die "HTML 파일만 주라!";
}

만약 텍스트와 2진 데이타 모드를 인식할 수 있는 컴퓨터를 사용한다면 언제 이들을 사용하고, 어떻게 이들 사용하는지 확실히 이해해야 한다. 그렇지 않으면 2진 파일은 파일이 업로드되는 동안 손상될 것이다.

자바스크립트: -onChange, -onFocus, -onBlur , -onMouseOver, -onMouseOut, 과 -onSelect 매개변수를 사용할 수 있다.

<A HREF="#CREATING_A_TEXT_FIELD">textfield()</A>
를 보기바란다. 파일 업로드의 예

 1 : #!/usr/local/bin/perl -w
 2 : 
 3 : use lib '..';
 4 : use CGI qw(:standard);
 5 : use CGI::Carp qw/fatalsToBrowser/;
 6 : 
 7 : print header();
 8 : print start_html("파일 업로드 예");
 9 : print strong("Version "),$CGI::VERSION,p;
10 : 
11 : print h1("파일 업로드 예"),
12 :     '이 예는 원격 사용자가 파일을 업로드 하기위해 파일을 선택하는 
13 :     방법을 보이고 있다. ',
14 :     strong("파일 업로드는 넷스케잎 2.0이상과 
	M$IE 4.0 이상에서만 동작한다."),
15 :     p,
16 :     '텍스트 파일을 선택하기위해', cite('브로우저'),'버튼을 선택한다.
17 :     보내기버튼을 누르면 이 스크립트는 행의 수, 단어의 수, 문자의 수를 
18 :     센다.';
19 : 
20 : @types = ('행의 수','단어의 수','문자의 수');
21 : 
22 : # multipart 폼을 시작한다.
23 : print start_multipart_form(),
24 :     "처리할 파일:",
25 :     filefield('filename','aa',45),
26 :     br,
27 :     checkbox_group('count',\@types,\@types),
28 :     p,
29 :     reset('지우기'),submit('submit','보내기'),
30 :     endform;
31 : 
32 : # 파일명이 존재하는 경우 폼을 처리한다.
33 : if ($file = param('filename')) {
34 :     $tmpfile=tmpFileName($file);
35 :     $mimetype = uploadInfo($file)->{'Content-Type'} || '';
36 :     print hr(),
37 :           h2($file),
38 :           h3($tmpfile),
39 :           h4("MIME Type:",em($mimetype));
40 : 
41 :     my($lines,$words,$characters,@words) = (0,0,0,0);
42 :     while (<$file>) {
43 : 	$lines++;
44 : 	$words += @words=split(/\s+/);
45 : 	$characters += length($_);
46 : 	push(@file, $_);
47 :     }
48 :     close $file;
49 :     grep($stats{$_}++,param('count'));
50 :     if (%stats) {
51 : 	print strong("행: "),$lines,br if $stats{'행의 수'};
52 : 	print strong("단어: "),$words,br if $stats{'단어의 수'};
53 : 	print strong("문자: "),$characters,br if $stats{'문자의 수'};
54 : 	print strong("파일내용: "), br;
55 : 	print @file;
56 :     } else {
57 : 	print strong("No statistics selected.");
58 :     }
59 : }
60 : 
61 : # print cite("URL parameters: "),url_param();
62 : 
63 : print hr(),
64 :     address(
65 : 	    a({href=>'/'},"김재근")),
66 :     end_html;
실행결과

file_upload.cgi 팝업 메뉴 생성하기

print $query->popup_menu('menu_name',
	['김희선','김지수','바보영기'],
	'김지수');

또는

%labels = ('김희선'=>'제일 좋아하는 것',
	'김지수'=>'두번째로 좋아하는 것',
	'바보영기'=>'세번째는');
print $query->popup_menu('menu_name',
	['김희선','김지수','바보영기'],
	'김지수',\%labels);

또는(기명 매개변수 형식)

print $query->popup_menu(-name=>'menu_name',
	-values=>['김희선','김지수','바보영기'],
	-default=>'김지수',
	-labels=>\%labels);

popup_menu()
는 메뉴를 생성한다.

매개변수
첫번째 매개변수는 메뉴의 이름(-name)으로 반드시 필요하다.

두번째 매개변수(-values)는 메뉴 항목을 포함하는 배열이다. 예에서 보여진 것처럼 익명의 배열을 인자로 전달하거나 "\@foo"와 같이 이름을 갖는 배열을 전달할 수 있다.

세번째 매개변수(-default)는 기본적으로 선택될 메뉴 항목의 이름이다. 지정되지 않으면 첫번째 항목이 기본적으로 선택된다. 이전에 선택한 값은 질의를 통해 유지될 것이다.

네번째 매개변수(-labels)는 팝업 메뉴에서 사용자에게 보여지는 항목과 스크립트로 리턴되는 값을 다르게 하려는 사람들을 위해 제공된다. 이 매개변수를 공백으로 두면 메뉴값은 기본적으로 출력된 값(-values 값)이된다(또한 원하는 경우 정의되지 않은 값을 사용할 수도 있다).

폼이 처리될 때 팝업 메뉴에서 선택한 값은 다음과 같은 방법으로 복구될 수 있다.

$popup_menu_value = $query->param('menu_name');

자바스크립트:

popup_menu()
는 다음과 같은 이벤트 처리기를 인식한다: -onChange, -onFocus, -onBlur, -onMouseOver, -onMouseOut-onSelect 매개변수를 사용할 수 있다.
<A HREF="#CREATING_A_TEXT_FIELD">textfield()</A>
를 보기바란다. 이동 선택 목록 생성하기

print $query->scrolling_list('list_name',
	['김희선','김지수','바보영기', '영기바보'],
	['김지수','바보영기'],5,'true');

또는

print $query->scrolling_list('list_name',
	['김희선','김지수','바보영기', '영기바보'],
	['김지수','바보영기'],5,'true',
	\%labels);

또는

print $query->scrolling_list(-name=>'list_name',
	-values=>['김희선','김지수','바보영기', '영기바보'],
	-default=>['김지수','바보영기'],
	-size=>5,
	-multiple=>'true',
	-labels=>\%labels);

scrolling_list()
는 이동 선택 목록을 생성한다.

매개변수
첫번째와 두번째 매개변수는 리스트의 이름(-name)과 값(-values)이다. 팝업메뉴에서 처럼 두번째 인자는 배열이어야 한다.

세번째 인자(-default)는 기본적으로 선택될 값들을 포함하는 배열이나 선택될 하나의 값일 수 있다. 이 인자가 누락되거나 정의되지 않으면 리스트가 처음 화면상에 나타날 때 어떠한 것도 선택되지 않는다. 기명 매개변수로는 이 매개변수에대한 동의어 인 "-defaults"를 사용할 수 있다.

네번째 매개변수는 화면에 출력될 선택 목록의 크기이다(-size).

다섯번째 인자가 참으로 설정되면 동시에 여러개를 선택할 수 있다(-multiple). 그렇지 않으면 단지 한번에 하나만 선택할 수 있다.

여섯번째 인자에는 리스트 항목과 화면에 출력될 라벨로 구성된 연관배열을 지정할 수 있다. 지정되지 않으면 값이 화면에 출력된다.

폼이 처리될 때 선택된 모든 항목은 'list_name'과 같은 매개변수를 이용해서 배열로 리턴받을 수 있다. 선택된 항목의 값은 다음과 같이 복구될 수 있다.

@selected = $query->param('list_name');

자바스크립트:

scrolling_list()
는 다음과 같은 이벤트 처리기를 인식한다: -onChange, -onFocus, -onBlur , -onMouseOver, -onMouseOut, 과 -onSelect 매개변수를 사용할 수 있다.
<A HREF="#CREATING_A_TEXT_FIELD">textfield()</A>
를 보기바란다. 연관된 체크상자 그룹 생성하기

print $query->checkbox_group(-name=>'group_name',
	-values=>['김희선','김지수','바보영기', '영기바보'],
	-default=>['김지수','바보영기'],
	-linebreak=>'true',
	-labels=>\%labels);

print $query->checkbox_group('group_name',
	['김희선','김지수','바보영기', '영기바보'],
	['김지수','바보영기'],'true',\%labels);
HTML3-호환 브로우저만

print $query->checkbox_group(-name=>'group_name',
	-values=>['김희선','김지수','바보영기', '영기바보'],
	-rows=2,-columns=>2);

checkbox_group()
는 동일한 이름을 갖는 체크상자의 목록을 생성한다.

매개변수
첫번째와 두번째 인자는 각각 체크상자의 이름과 값((-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()
에의해 리턴된 값은 사실 버튼 요소의 배열이다. 이들을 표, 목록이나 다른 창의적인 방법으로 이들을 사용할 수 있다.

@h = $query->checkbox_group(-name=>'group_name',-values=>\@values);
&use_in_creative_way(@h);

자바스크립트:

checkbox_group()
-onClick 매개변수를 인식한다. 이 것으로 해당 그룹내의 임의의 버튼을 사용자가 클릭할 때마다 수행될 자바스크립트 함수를 지정할 수 있다. "this" 변수를 사용해서 클릭된 특수한 버튼의 동일성을 복구할 수 있다. 단일 체크 상자 생성하기

print $query->checkbox(-name=>'checkbox_name',
	-checked=>'checked',
	-value=>'ON',
	-label=>'날눌러');

또는

print $query->checkbox('checkbox_name','checked','ON','날눌러');

checkbox()
는 서로 연관되지 않은 분리된 체크상자를 생성한다.

매개변수
첫번째 매개변수는 체크상자에대한 이름이다(-name). 이 것은 또한 체크 상자 다음에 출력되는 레이블로 사용될 수 있다.

두번째 매개변수(-checked)는 체크 상자가 기본적으로 선택될 것인지 아닌지를 지정한다. 동의어는 -selected와 -on이다.

세번째 매개변수(-value)는 체크했을 때 서버로 전송될 체크상자의 값을 지정한다. 제공하지 않으면 "on"으로 가정한다.

네번째 매개변수(-label)는 체크박스에 덧붙여질 레이블이다. 제공하지 않으면 체크상자의 이름이 사용된다.

체크 상자의 값은 다음과 같이 복구될 수 있다.

$turned_on = $query->param('checkbox_name');

자바스크립트:

checkbox()
-onClick 매개변수를 인식한다. 보다 자세한 것은
<A HREF="#CREATING_A_GROUP_OF_RELATED_CHEC">checkbox_group()</A>
을 보기바란다. 레디오 버튼 그룹 생성하기

print $query->radio_group(-name=>'group_name',
	-values=>['김희선','김지수','바보영기'],
	-default=>'김지수',
	-linebreak=>'true',
	-labels=>\%labels);

또는

print $query->radio_group('group_name',['김희선','김지수','바보영기'],
	'김지수','true',\%labels);

HTML3-호환 브로우저만

print $query->radio_group(-name=>'group_name',
	-values=>['김희선','김지수','바보영기', '영기바보'],
	-rows=2,-columns=>2);

radio_group()
은 지역적으로 연관된 레디오 버튼 집합을 생성한다(그룹중 하나만 선택할 수 있다)

매개변수
첫번째 인자는 그룹의 이름으로 반드시 필요하다(-name).

두번째 인자(-values)는 래디오 버튼에대한 값의 목록이다. 페이지에 나타나는 값과 레이블은 동일하다. 두번째 인자로 배열을 전달한다. 배열은 익명 배열이나 이름을 갖는 배열, "\@foo"일 수 있다.

세번째 매개변수(-default)는 기본적으로 선택될 버튼의 이름이다. 만약 지정하지 않으면 첫번째 항목이 기본적으로 선택된다. 버튼을 기본적으로 선택하지 않기위해 존재하지 않는 버튼 이름을 제공할 수 있다.

네번째 매개변수(-linebreak)는 버튼들 사이에 줄바꿈 코드를 두기위해 "참"으로 설정할 수 있다. 수직리스트를 생성한다.

다섯번째 매개변수(-labels)는 버튼값과 화면출력에 사용될 레이블로 구성된 연관배열이다. 만약 제공하지 않으면 값 자체가 출력된다.

HTML3-호환 브로우저(Netscape과 같은)은 -rows-columns과 같은 추가적인 매개변수를 취할 수 있다. 이들 매개변수로
radio_group()
는 지정된 행과 열로 정렬된 레디오 그룹을 표로 리턴한다. 원하는 경우 -columns 매개변수만 제공할 수 있다. radio_group은 여기에대한 올바른 행수를 계산할 것이다.

리턴되는 표의 헤더부분을 정의하기위해 -rowheaders-colheaders 매개변수를 사용할 수 있다. 이들 둘다 배열을 사용할 수 있다. 이들 헤더는 장식을 위한 것이며, 이들은 체크 상자를 처리하는데에 포함되지는 않든다. 따라서 체크 상자는 아직도 하나의 이름을 갖는 단위이다.

폼이 처리될 때 선택된 레디오 버튼은 다음과 같이 복구될 수 있다.

$which_radio_button = $query->param('group_name');

radio_group()
에의해 리턴된 값은 사실 버튼 요소의 배열이다. 표, 목록이나 다른 창의적인 방법으로 이들을 사용할 수 있다.

@h = $query->radio_group(-name=>'group_name',-values=>\@values);
&use_in_creative_way(@h);
제출 버튼 생성하기

print $query->submit(-name=>'button_name',
	-value=>'value');

또는

print $query->submit('button_name','value');

submit()
은 질의 제출 버튼을 생성한다. 각각의 폼은 이들중 하나를 갖는다.

매개변수
첫번째 인자(-name)는 조건부이다. 폼에 여러 개의 제출 버튼이 있으면서 이들을 구분하려면 버튼에 이름을 줄 수 있다. 이 이름은 또한 레이블로도 사용된다. 몇몇 소수의 오래된 브로우저는 이 것을 바르게 처리하지 못하며 버튼의 값을 전송하지 못한다는 것에 주의해야 한다.

두번째 인자(-value)또한 조건부이다. 이 것은 질의 문자열을 통해 스크립트로 전달될 값을 지정한다.

각각 서로 다른 버튼 값을 사용함으로서 눌려진 버튼을 판단할 수 있다.

$which_one = $query->param('button_name');

자바스크립트:

submit()
-onClick 매개변수를 인식한다. 보다 자세한 것은
<A HREF="#CREATING_A_GROUP_OF_RELATED_CHEC">checkbox_group()</A>
을 보기바란다. 리셋 버튼 생성하기

print $query->reset

reset()
은 리셋 버튼을 생성한다. 이 것은 스크립트가 호출된 마지막 값(반드시 기본값이 아니라)으로 폼을 복구한다. 기본 버튼 생성하기

print $query->defaults('button_label')

defaults()
은 폼을 폼의 기본값으로 완전히 리셋하며, 따라서 사용자의 변경을 모두 지우는 버튼을 생성한다. 히든 필드 생성하기

print $query->hidden(-name=>'hidden_name',
	-default=>['value1','value2'...]);

또는

print $query->hidden('hidden_name','value1','value2'...);

hidden()
은 사용자가 볼수 없는 텍스트 필드를 생성한다. 이 것은 하나의 스크립트에서 다음 스트립트로 상태정보를 전달할 때 유용하다.

매개변수
첫번째 인자는 반드시 필요하며 필드의 이름을 지정한다(-name).

두번째 인자 또한 반드시 필요하며 필드의 값을 지정한다(-default). 기명 매개변수 호출에서는 여기에 하나의 값이나 전체 목록을 제공할 수 있다.

다음과 같은 방법으로 이 히든 필드의 값을 가져온다.

$hidden_value = $query->param('hidden_name');

주의: 다른 모든 폼 요소와 마찬가지로 히든 필드의 값도 유지된다는 것에 주의한다. 만약 스크립트가 일단 호출된 후 히든 필드의 값을 다른 것으로 교체하려면 수작업으로 바꾸어야 한다.

$query->param('hidden_name','new','values','here');
이미지 버튼 생성하기

print $query->image_button(-name=>'button_name',
	-src=>'/source/URL',
	-align=>'MIDDLE');      

또는

print $query->image_button('button_name','/source/URL','MIDDLE');

image_button()
는 클릭할 수 있는 이미지 버튼을 만든다. 임의의 위치를 클릭했을 때 "button_name.x", "button_name.y"와 같은 값이 스크립트로 전달된다. 여기서 "button_name"은 사용자가 이미지에 할당한 이름이다.

자바스크립트:

image_button()
-onClick 매개변수를 인식한다. 보다 자세한 것은
<A HREF="#CREATING_A_GROUP_OF_RELATED_CHEC">checkbox_group()</A>
을 보기바란다.

매개변수
첫번째 인자(-name)는 반드시 필요하며 이 필드의 이름을 지정한다.

두번째 인자(-src) 또한 반드시 필요하며 이미지의 URL을 지정한다.

세번째 인자(-align, 조건부)는 이미지를 정렬하는 방법으로 TOP, BOTTOM 또는 MIDDLE등이 가능하다.

이미지 버튼의 값은 다음과 같은 방법으로 가져온다.

$x = $query->param('button_name.x');
$y = $query->param('button_name.y');
자바스크립트 액션 버튼 생성하기

print $query->button(-name=>'button_name',
	-value=>'요거 보이니?',
	-onClick=>"do_something()");

또는

print $query->button('button_name',"do_something()");

button()
은 자바스크립트를 호출하기위한 버튼(<INPUT> 태그의 TYPE속성이 BUTTON인)을 생성한다. 버튼이 눌러졌을 때 -onClick 매개변수에의해 지정된 자바스크립트가 실행된다. 넷스케잎이외의 브로우저에서는 이 폼 요소는 출릭되지 않을 수도 있다.


다음글: 제 6강 - 고급기능 (6059)1996-07-06
이전글: 제 4강 - 표준 HTML 태그 만들기 (7862)1996-07-04

세상사는 이야기

  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >
  • 탈옥의 필수, QuickDo >
  • 윈도 10, 한영 전환도 >
  • 바보도 할 수 있는 War >
  • 북마크에도 확장 아이 >
  • 크롬은 가라, 비발디가 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2014 QAOS.com All rights reserved.