본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 37. Perlprog - Bookmark Program

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.

Perlprog - Bookmark Program

Description

Perl과 DB를 이용한 Bookmark Program 네 번째


새로운 URL 추가(Add Url)

 지난번에 새로운 디렉토리를 추가 했었죠. 그럼 이번엔... 그 디렉토리에 해당하는 URL을 추가하는 프로그램을 만들어 보겠습니다. 지난번에 했던거 하고 거의 같으니깐요. 소스를 보면서 바로 쭈~욱 나가겠습니다.


Url 추가 프로그램(add.cgi)

 메인 페이지 하단에는 "디렉토리 추가"가 있었죠. 근데... 해당 디렉토리를 누르면 그 하단에 "북마크 등록" 이라고 되어 있습니다.

<a href="http://localhost/~bookmark/add.cgi?path=$search_folder">북마크 등록</a>

라고 되어 있는 부분이죠. 여기서 우리는 add.cgi에 현재의 디렉토리명을 변수로 같이 넘겨 주고 있습니다. 디비에 URL를 등록할때의 기준이 되는 값입니다.

Main 프로그램

 # 우리가 필요한 것들을 정의 하구요,

#!/usr/local/bin/perl

use CGI;
use DBI;

$add = new CGI;

print $add->header;

# 넘어온 디렉토리를 변수로 받고,
$path = $add->param('path');

# 혹시나 디렉토리가 정해지지 않을 상태에서 프로그램이 호출되었을 경우, 에러 메세지를 보여주고 종료합니다.
if(!$path)
{
	ErrorMsg();
	exit;
}

# 여기의 'url' 변수는, 등록폼에서 사용자가 등록하고자 하는 url입니다. 이것이 없다면, 등록 폼을 보여줍니다.
# '북마크 등록' 이란 링크를 눌렀을 때에 해당합니다.
if(!$add->param('url'))
{
	ShowForm();
	exit;
}

# 등록 폼에서 하나라도 입력하지 않으면, 에러 메세지를 보여줍니다.
elsif((!$add->param('owner')) || (!$add->param('url')) || (!$add->param('name')) || (!$add->param('descript')) || (!$add->param('search')))
{

	HtmlStart();
	print << Error;
<font size=2 color=red>항목을 하나라도 빼먹으시면 안됩니다.<p>
<a href="javascript: history.go(-1)">돌아가기</a>
</font>
    Error
	HtmlEnd();
	
	exit;
}

# 모든 조건이 만족 된다면, 디비에 접속을 해서 필요한 데이터들을 넣습니다.
# 그 전에 데이터들을 조금 가공(?) 합니다.
else
{
	$type = "b";
	$parent = "/";
	$path = $add->param('path');
	$name = $add->param('name');
	$url = $add->param('url');
	$owner = $add->param('owner');
	$descript = $add->param('descript');
	$descript =~ s/\cM//g;
	$descript =~ s/\n\n/ /g;
	$descript =~ s/\n/ /g;
	$search = $add->param('search');
	
	$dbh = DBI->connect('DBI:ODBC:bookmark', 'sa', '') || die print "$DBI::errstr";
	
	# 기존에 등록이 되었던 url인지 검사 합니다.
	if (Check_url($url))
	{
		Old_Reg();
	}
	else
	{
		$sth = $dbh->prepare( q{insert into bookmark (type, parent, path, name, url, owner, descript, search) values (?, ?, ?, ?, ?, ?, ?, ?)} ) || die print "$DBI::errstr";
		$sth->execute($type, $parent, $path, $name, $url, $owner, $descript, $search);
		$sth->finish;
		
		# 성공했다는 메세지.
		Success();
	}
	
	$dbh->disconnect;
	
	exit;
}
					

Sub 함수들

 메인에서 불러다 쓴 서브 함수들의 정의입니다.

Check_url() - 기존에 등록된 url인지 검사

sub Check_url
{
	my ($ch_url) = @_;
	my ($Con_url);
	my $ch_sth = $dbh->prepare( q{select url from bookmark where url=?} ) || die print "$DBI::errstr";
	
	$ch_sth->execute($ch_url) || die print "$DBI::errstr";
	
	my $old_url = $ch_sth->fetchrow_array;
	
	if ($old_url)
	{
		$Con_url = 1;
	}
	else
	{
		$Con_url = 0;
	}
	
	$ch_sth->finish;
	
	return $Con_url;
}
					

ErrorMsg() - path변수가 포함되지 않은 상태에서 프로그램 호출 시 에러 메세지

sub ErrorMsg
{
	HtmlStart();
	print << Error;
<font size=2 color=red>적절한 디렉토리를 선택하신후 등록 하세요.</font>
	Error
	HtmlEnd();
}
					

ShowForm() - 등록 폼

sub ShowForm
{
	HtmlStart();
	print << Show_Form;
	<p>
	<font size=3><b>새로운 URL을 등록합니다.</b></font>
	<form action=./add.cgi method=post>
	<table width=600 border=0>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>선택된 디렉토리 : </b></font></td>
			<td><font size=2 color=red><b>$path</b></td>
		</tr>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>등록자 : </b></font></td>
			<td><input type=text maxlength=50 size=20 name=owner></td>
		</tr>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>URL : </b></font></td>
			<td><font size=2>http://</;/font><input type=text maxlength=100 size=30 name=url></td>
		</tr>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>URL 제목 : </b></font></td>
			<td><input type=text maxlength=200 size=40 name=name></td>
		</tr>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>URL 설명 : </b></font></td>
			<td><textarea rows=5 cols=40 name=descript></textarea></td>
		</tr>
		<tr>
			<td align=right height=30><font size=2 color=blue><b>검색어 : </b></font></td>
			<td><input type=text maxlength=200 size=40 name=search></td>
		</tr>
		<tr>
			<td colspan=2 align=center>
				<input type=hidden name=path value=$path>
				<input type=submit value="등록"> &nbsp;&nbsp;&nbsp;&nbsp;
				<input type=reset value="취소">
			</td>
		</tr>
	</table>
	</form>
		
	Show_Form
	
	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
}
					

HtmlEnd() - 페이지의 마지막 부분 출력

sub HtmlEnd
{
	print << End;
<hr size=2 color=green width=100%>
<a href="http://web.archive.org/web/20001207005400/http://localhost/~bookmark/"><font color=blue>BlackUnicorn's BookMark Site</font></a>
</font>
</center>
</body>
</html>
	End
}
					

Success() - 자료가 성공적으로 입력되었을때 보여주는 메세지

sub Success
{
	print << Success_Data;
<center>
<font size=2 color=blue>
자료가 등록 되었습니다.<br>
이용해 주셔서 감사합니다.<p>
<a href="http://localhost/~bookmark">Main Page</a>
</font>
</center>
	Success_Data
}
					

Old_Reg() - 이미 url이 등록되었을경우 보여주는 메세지

sub Old_Reg
{
	print << Old;
<center>
<font size=2 color=blue>
이미 등록된 URL 입니다.<br>
다시 등록하여 주십시요.<p>
<a href="javascript:history.go(-1)">Back Page</a>
</font>
</center>
	Old
}
					

NOTES

 ^^; 내용.... 별루 없네요.... 지난번에 했던 이야기들하고 틀린게 거의 없어요... ^^; 그럼 다음에 뵙겠습니다.


이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo