이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.
Perlprog - Bookmark Program
Description
Perl과 DB를 이용한 Bookmark Program 세 번째
새로운 디렉토리 추가(Add Directory)
이번에는 웹 상에서 디비에 새로운 데이터(새로운 디렉토리)를 넣어 보도록 하겠습니다. 다음에 할 내용과 상당부분이 유사합니다.
선행작업(Start)
프로그램에 들어 가기전에, 기존에 해왔던 소스에서 조금 수정을 해야 하는 부분이 있습니다. 처음에 했던, index.cgi 에서 Html()
함수의
<a href="./add.cgi">북마크 등록</a>
이런 부분이 있죠? 여기를
<a href="./add_directory.cgi">디렉토리 등록</a>
이거로 바꿔 주세요.
이유는... 메인 화면에서는 디렉토리를 추가할수 있게 하고, 이 디렉토리으로 검색된 화면에서 URL을 등록할 수 있게 하려고 합니다. 그리고.. 앞으로 진행하면서, 기존에 했던 소스들을 조금씩 수정해야 하는 일이 있을 겁니다.
그때 그때마다 조금씩 수정하면서 나가도록 하겠습니다. 또, 추가하고픈 기능들이 있으면 말씀하세요. 같이 만들어 가는게 전 더 좋아요.
시작(add_directory.cgi)
그럼 add_directory.cgi라는 이름으로 시작합니다.
Main 프로그램
처음은 늘 같죠. :)
#!/usr/local/bin/perl # CGI, DBI 모듈을 사용한다고 알립니다. use CGI; use DBI; # CGI의 새로운 객체를 만들고, http헤더를 찍습니다. $add_directory = new CGI; print $add_directory->header; # 입력되는 디렉토리명을 검사하여, 없으면 등록폼을 보여주고, 있으면 새로이 등록을 합니다. $directory = $add_directory->param('directory'); if(!$directory) { &HtmlStart; &Show_Directory_Form; &HtmlEnd; exit; } else { # 공백은 '_' 로 치환합니다. 이유요? 코딩하는 작업을 없애기 위해.... ^^; $directory =~ s/ /_/g; # 받은 디렉을 인수로해서 Add_Directory() 함수를 호출합니다. &Add_Directory($directory); exit; }
뭐... 이것으로 메인 프로그램은 끝이 났네요.... 여기서부터 서브 함수들입니다.
디렉명이 없을 때 보여주기(sub 1)
그럼.... 입력되는 디렉토리 명이 없으면 (<a href="./add_directory.cgi">디렉토리 등록</a> 여기에서 링크를 누르면, 당연히 디렉토리 명은 존재하지 않습니다.) 실행하는 함수들을 먼저 살펴볼게요. 이건 그냥 폼입니다. HtmlStart(), HtmlEnd() 는 우리가 전에 했던 함수들하고 거의 같아요. 같은 함수들이 앞으로도 나올 거에요. 뭐.... 귀찮으시면... 따로 라이브러리를 만드셔서 해도 됩니다.
HtmlStart()
살펴 볼 내용... 없습니다. 그냥 타이틀 출력.
sub HtmlStart { print << Html; <html> <head> <title>Add New Url</title> </head> <body> <center> <b><font size=3 color=green>My Favorite Site!!!</font></b><p> <font size=2> <hr size=2 color=green width=100%> Html }
Show_Directory_Form()
입력 내용은 디렉토리명 하나면 돼요.
sub Show_Directory_Form { print << Show_Html; <font size=3><b>새로운 Directory 를 등록합니다.</b></font> <form action=./add_directory.cgi method=post> <table width=600 border=0> <tr> <td align=right height=30><font size=2 color=blue><b>디렉토리 명 : </b></font></td> <td><input type=text maxlength=50 size=20 name=directory><br></td> </tr> <tr> <td colspan=2 align=center> <input type=submit value="등록"> <input type=reset value="취소"> </td> </tr> </table> </form> Show_Html }
HtmlEnd()
그냥... 아래 폼 출력.
sub HtmlEnd { print << End; <hr size=2 color=green width=100%> <center> <a href="http://localhost/~bookmark/"><font color=blue>BlackUnicorn's BookMark Site</font></a> </center> </font> </center> </body> </html> End }
디렉토리명이 있을때 작동하는 함수들(sub 2)
위에서 등록폼이 나와서, 우리가 원하는 디렉토리명을 넣었을때 작동하는 함수들에 대해서 알아보도록 하겠습니다. 여기서 이제.. DB와의 작업이 이루어집니다.
Add_Directory
sub Add_Directory { # 디렉토리명을 받고, my ($new_dir) = @_; # DB와 접속을 시도합니다. $dbh = DBI->connect('DBI:ODBC:bookmark', 'sa', '') || die print "$DBI::errstr"; # 기존에 등록되어 있는 디렉명인지 확인하기 위해 # Check_Directory() 함수를 디렉명을 인자로주고 호출합니다. # 이 함수의 설명은 아래에.... # 기존에 등록된 디렉명이라면, 메세지 출력후 끝내고, 그렇지 않다면, 적절한 쿼리문을 실행시켜서 # DB 에 자료를 넣습니다. 성공메세지를 보내고, DB와의 접속을 끝내고, 닫습니다. if (&Check_Directory($new_dir)) { &Old_Reg; } else { $sth = $dbh->prepare(q {insert into bookmark(type, path, name) values ('f', '/', ?)} ) || die print "$DBI::errstr"; $sth->execute($new_dir) || die print "$DBI::errstr"; &Success; $sth->finish; } $dbh->disconnect; }
Check_Directory()
입력된 디렉토리가 존재하는지 확인하는 함수입니다.
sub Check_Directory { my ($ch_dir) = @_; my ($Con_dir); # type 은 'f' , name 은 현재 입력한 값으로 필드를 불러옵니다. # 우리가 필요한 필드는 'name' 이니깐, 그것만 불러옵니다. my $ch_sth = $dbh->prepare( q{select name from bookmark where type='f' and name=?} ) || die print "$DBI::errstr"; $ch_sth->execute($ch_dir) || die print "$DBI::errstr"; # 불러온 필드값을 $old_dir에 저장 my $old_dir = $ch_sth->fetchrow_array; # $old_dir 이 존재하면, 참(1)을 그렇지 않으면 거짓(0)을 리턴합니다. if ($old_dir) { $Con_dir = 1; } else { $Con_dir = 0; } $ch_sth->finish; return $Con_dir; }
Old_Reg()
이미 존재하는 디렉토리 명일 경우 출력합니다.
sub Old_Reg { print << Old; <center> <font size=2 color=blue> 이미 등록된 Directory 입니다.<br> 다시 등록하여 주십시요.<p> <a href="javascript:history.go(-1)">Back Page</a> </font> </center> Old }
Success()
자료가 등록되었을 때 출력합니다.
sub Success { print << Success_Data; <center> <font size=2 color=blue> 자료가 등록 되었습니다.<br> 이용해 주셔서 감사합니다.<p> <a href="http://web.archive.org/web/20001018142757/http://localhost/~bookmark">Main Page</a> </font> </center> Success_Data }
NOTES
함수만 몇 개 되고... 내용은 별루 없는거 같애요.... -.-;; 좀 더 빨리 내용을 진행시키지 못해서 죄송하구요. 수정사항이나, 건의 사항이 있으시면 언제든지 멜이나, 게시판에 글 남겨주시기 바랍니다. 다음엔 URL을 등록하는 프로그램의 이야기를 하겠습니다.
'Common Gateway Interface > Perl' 카테고리의 다른 글
[옛 강좌] 38. IPC의 기본적 이해 (0) | 2015.04.29 |
---|---|
[옛 강좌] 37. Perlprog - Bookmark Program (0) | 2015.04.29 |
[옛 강좌] 35. Perlprog - Bookmark Program (0) | 2015.04.29 |
[옛 강좌] 34. Perlprog - Bookmark Program (0) | 2015.04.29 |
[옛 강좌] 33. Perlprog - perl & db (0) | 2015.04.29 |