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

제 8강 - 간단한 예


폼을 생성하는 스크립트의 완전한 예

 1 : #!/usr/local/bin/perl
 2 :      
 3 : use CGI;
 4 : use CGI::Carp qw/fatalsToBrowser/;
 5 :  
 6 : $query = new CGI;
 7 : 
 8 : print $query->header;
 9 : print $query->start_html("CGI.pm 폼의 예");
10 : print "<H1>CGI.pm 폼의 예</H1>\n";
11 : &print_prompt($query);
12 : &do_work($query);
13 : &print_tail;
14 : print $query->end_html;
15 :  
16 : sub print_prompt {
17 :    my($query) = @_;
18 :  
19 :    print $query->start_form;
20 :    print "<EM>이름은 모니?</EM><BR>";
21 :    print $query->textfield('name');
22 :    print $query->checkbox('진짜 이름이 아님');
23 :  
24 :    print "<P><EM>영국 보신탕은 어디에서 찾을 수 있지?</EM><BR>";
25 :    print $query->checkbox_group(
26 : 				-name=>'Sparrow locations',
27 : 				-Values=>['영국','프랑스','스페인','아시아','천국'],
28 : 				-linebreak=>'yes',
29 : 				-defaults=>['영국','아시아']);
30 :  
31 :    print "<P><EM>아가씨 한명이 보통 몇근이나 먹을 수 있나?</EM><BR>",
32 :    $query->radio_group(
33 : 		       -name=>'how far',
34 : 		       -Values=>['1근','2근','3근','5근'],
35 : 		       -default=>'3근');
36 :    
37 :    print "<P><EM>주로 많이 먹는 멍멍이의 색깔은?</EM>  ";
38 :    print $query->popup_menu(-name=>'Color',
39 : 			    -Values=>['검은색','황색','힌색','얼룩색'],
40 : 			    -default=>'황색');
41 :  
42 :    print $query->hidden('Reference','보신탕 통계');
43 :  
44 :    print "<P><EM>보신탕을 먹을 때 잇점은?</EM><BR>";
45 :    print $query->scrolling_list(
46 : 				-name=>'possessions',
47 : 				-Values=>['체력','정력','미용','맛','향'],
48 : 				-size=>5,
49 : 				-multiple=>'true');
50 :  
51 :    print "<P><EM>보신탕의 국제화에대한 의견?</EM><BR>";
52 :    print $query->textarea(-name=>'Comments',
53 : 			  -rows=>10,
54 : 			  -columns=>50);
55 :    
56 :    print "<P>",$query->reset('지우기');
57 :    print $query->submit('Action','보내기');
58 :    print $query->submit('Action','또보내기');
59 :    print $query->endform;
60 :    print "<HR>\n";
61 :  	}
62 :  
63 : sub do_work {
64 :     my($query) = @_;
65 :     my(@values,$key);
66 : 
67 :     print "<H2>현재 설정값은 다음과 같다.</H2>";
68 : 
69 :     foreach $key ($query->param) {
70 : 	print "<STRONG>$key</STRONG> -> ";
71 : 	@values = $query->param($key);
72 : 	print join(", ",@values),"<BR>\n";
73 :     }
74 : }
75 :  
76 : sub print_tail {
77 :     print <<END;
78 : <HR>
79 : <ADDRESS>김재근</ADDRESS><BR>
80 : <A HREF="http://qaos.com/">홈페이지</A>
81 : END
82 : ;
83 : }
실행결과

monty.cgi 파일비교

 1 : #!/usr/local/bin/perl
 2 : 
 3 : use CGI;
 4 : $query = new CGI;
 5 : print $query->header;
 6 : print $query->start_html("이미지에 클릭을...");
 7 : print <<END;
 8 : <H1>이미지에 클릭을...</H1>
 9 : </A>
10 : END
11 : print "미안하지만 별거 아냐!\n";
12 : 
13 : print $query->startform;
14 : print $query->image_button('picture',"./wilogo.gif");
15 : print "문자선택: ",$query->popup_menu('letter',['A','B','C','D','E','W']),"\n"; 
16 : print "<P>배수: ",$query->radio_group('magnification',['1X','2X','4X','20X']),"\n";
17 : print "<HR>\n";
18 : 
19 : if ($query->param) {
20 :     print "<P>배수, <EM>",$query->param('magnification'),"</EM>\n";
21 :     print "<P>문자, <EM>",$query->param('letter'),"</EM>\n";
22 :     ($x,$y) = ($query->param('picture.x'),$query->param('picture.y'));
23 :     print "<P>위치 <EM>($x,$y)</EM>\n";
24 : }
25 : 
26 : print $query->end_html;
실행결과

clickable_image.cgi 파일비교

 1 : #!/usr/local/bin/perl
 2 : 
 3 : $DIFF = "/usr/bin/diff";
 4 : $PERL = "/usr/local/bin/perl";
 5 : 
 6 : use CGI qw(:standard);
 7 : use CGI::Carp;
 8 : 
 9 : print header;
10 : print start_html("파일 비교");
11 : print "<strong>버전 </strong>$CGI::VERSION<p>";
12 : 
13 : print <<EOF;
14 : <H1>파일 비교</H1>
15 : 두개의 파일을 선택하고 파일을 비교하기위해 "파일비교" 버튼을
16 : 눌러라
17 : EOF
18 :     ;
19 : 
20 : # 멀티파폼의 시작
21 : print start_multipart_form;
22 : print "파일 #1:",filefield(-name=>'file1',-size=>45),"<BR>\n";
23 : print "파일 #2:",filefield(-name=>'file2',-size=>45),"<BR>\n";
24 : print "비교형식: ",radio_group(-name=>'type',
25 : 					-value=>['내용','일반']),"<br>\n";
26 : print reset('지우기'),submit(-name=>'submit',-value=>'파일비교');
27 : print endform;
28 : 
29 : # 파일명이 존재하면 폼을 처리한다
30 : $file1 = param('file1');
31 : $file2 = param('file2');
32 : 
33 : $|=1;				# 시스템 버퍼를 경유하지 않고 직접 출력
34 : if ($file1 && $file2) {
35 :     $realfile1 = tmpFileName($file1);
36 :     $realfile2 = tmpFileName($file2);
37 :     print "<HR>\n";
38 :     print "<H2>$file1과 $file2</H2>\n";
39 : 
40 :     print "<PRE>\n";
41 :     $options = "-c" if param('type') eq 'context';
42 :     system "$DIFF $options $realfile1 $realfile2 | 
	$PERL -pe 's/>/&gt;/g; s/</&lt;/g;'";
43 :     close $file1;
44 :     close $file2;
45 :     print "</PRE>\n";
46 : }
47 : 
48 : print end_html;
49 : 
50 : sub sanitize {
51 :     my $name = shift;
52 :     my($safe) = $name=~/([a-zA-Z0-9._~#,]+)/;
53 :     unless ($safe) {
54 : 	print "<strong>$name은 Unix 파일명이 아니다. 미안하지만 여기서 곤둘께.</strong>";
55 : 	exit 0;
56 :     }
57 :     return $safe;
58 : }
실행결과

diff_upload.cgi

주의: 이 CGI는 Unix 시스템 명을 사용하고 있다. 따라서 이 CGI는 Unix에서만 정상적으로 동작한다. 페이지 꾸미기

 1 : #!/usr/local/bin/perl
 2 : 
 3 : use CGI qw(:standard :html3);
 4 : 
 5 : # 폼에서 사용될 상수
 6 : @colors=qw/aqua black blue fuschia gray green lime maroon navy olive
 7 :     purple red silver teal white yellow/;
 8 : @sizes=("<default>",1..7);
 9 : 
10 : # "preferences" 쿠기를 복원한다.
11 : %preferences = cookie('preferences');
12 : 
13 : # 사용자가 배경색상이나 사용자의 이름을 변경하려면 
14 : # 이들은 CGI 매개변수로 나타난다.
15 : foreach ('text','background','name','size') {
16 :     $preferences{$_} = param($_) || $preferences{$_};
17 : }
18 : 
19 : # 몇몇 기본값을 설정한다.
20 : $preferences{'background'} = $preferences{'background'} || 'silver';
21 : $preferences{'text'} = $preferences{'text'} || 'black';
22 : 
23 : # 쿠키의 유효기간이 경과하지 않도록 쿠키를 재설정한다.
24 : # 이 것으로 사용자의 변경은 계속 유효하게 된다.
25 : $the_cookie = cookie(-name=>'preferences',
26 : 			 -value=>\%preferences,
27 : 			 -expires=>'+30d');
28 : print header(-cookie=>$the_cookie);
29 : 
30 : # 사용자의 이름을 타이틀로 병합하기위해 타이틀을 조정한다.
31 : $title = $preferences{'name'} ? 
32 :     "$preferences{name}, 다시와서 반가워!" : "페이지 변경하기";
33 : 
34 : # HTML 페이지를 생성한다. 배경색상과 글꼴의 크기를 변경하기위해
35 : # 여러 넷스케잎 확장 속성을 사용한다.
36 : print start_html(-title=>$title,
37 : 		 -bgcolor=>$preferences{'background'},
38 : 		 -text=>$preferences{'text'}
39 : 		 );
40 : 
41 : print basefont({SIZE=>$preferences{size}}) if $preferences{'size'} > 0;
42 : 
43 : print h1($title),<<END;
44 : 아래의 폼을 제출함으로서 이 페이지의 외관을 변경할 수 있다. 
	30일 내에 이 페이지로 다시 오면 선택한 값들이 복구되는 것을 
	확인할 수 있을 것이다.
45 : END
46 :     ;
47 : 
48 : # 폼을 생성한다.
49 : print hr(),
50 :     start_form,
51 :     
52 :     "이름은: ",
53 :     textfield(-name=>'name',
54 : 	      -default=>$preferences{'name'},
55 : 	      -size=>30),br,
56 :     
57 :     table(
58 : 	  TR(
59 : 	     td("좋아하는 "),
60 : 	     td("배경색:"),
61 : 	     td(popup_menu(-name=>'background',
62 : 			   -values=>\@colors,
63 : 			   -default=>$preferences{'background'})
64 : 		),
65 : 	     ),
66 : 	  TR(
67 : 	     td(''),
68 : 	     td("글꼴색:"),
69 : 	     td(popup_menu(-name=>'text',
70 : 			   -values=>\@colors,
71 : 			   -default=>$preferences{'text'})
72 : 		)
73 : 	     ),
74 : 	  TR(
75 : 	     td(''),
76 : 	     td("글꼴 크기:"),
77 : 	     td(popup_menu(-name=>'size',
78 : 			   -values=>\@sizes,
79 : 			   -default=>$preferences{'size'})
80 : 		)
81 : 	     )
82 : 	  ),
83 : 
84 :     submit(-label=>'설정값 저장'),
85 :     hr;
86 : 	   
87 : print a({HREF=>"/"},'홈페이지로 가기');
88 : print end_html;
실행결과

customize.cgi 상태저장과 내부링크

 1 : #!/usr/local/bin/perl
 2 : 
 3 : use CGI;
 4 : $query = new CGI;
 5 : 
 6 : # 상당히 긴 목록과 팝업 메뉴를 포함하는 HTML 파일을 만든다.
 7 : # 팝업메뉴는 상태정보를 유지한다는 것을 보여주기 위한 것이다.
 8 : print $query->header;
 9 : print $query->start_html("내부 링크의 예");
10 : print "<H1>내부 링크의 예</H1>\n";
11 : print "상태를 생성하기 위해 <cite>상태 생성하기</cite>버튼을 클릭한다.",
12 :     " 팝업 메뉴에서 임의의 값을 선택하고 
	임의의 <cite>건너뛰기</cite>링크를 클릭한다.";
13 : 
14 : print "<A NAME="start"></A>\n"; # 최상위 앵커
15 : 
16 : # 기본 값을 가져온다.
17 : $query->param('amenu','바보1') unless $query->param('amenu');
18 : 
19 : print $query->startform;
20 : print $query->popup_menu('amenu',[('바보1'..'바보9')]);
21 : print $query->submit('상태 생성하기'),$query->endform;
22 : 
23 : # 예시를 위한 긴 목록을 생성한다.
24 : $myself = $query->self_url;
25 : print "<OL>\n";
26 : for (1..100) {
27 :     print qq{<LI>List item #$_ <A HREF="$myself#start">건너뛰기</A>\n};
28 : }
29 : print "</OL>\n";
30 : 
31 : print $query->end_html;
실행결과

internal_links.cgi 자바스크립트 사용하기

1 : #!/usr/local/bin/perl 2 : 3 : # 폼의 입력을 검사하기위해 자바스크립트를 사용하는 방법을 예시한다. 4 : use CGI qw(:standard); 5 : 6 : # 다음 문서내에 포함될 자바스크립트이다. 7 : $JSCRIPT=!!!!!!!!



다음글: 없음2017-08-18
이전글: 제 7강 - 기타 (5867)1996-07-07

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


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