Perl 網頁程式設計課程目錄

使用 Perl 程式讀取資料庫 (Read Data from Database with Perl)

資料庫已經建立好了! 如已經登記的會員需要進入, 必需在登入表單填入正確的 UserName 及 password 才可進入。

這一節討論如何使用 Perl 程式讀取資料庫的資料。 讀取資料庫資料的 Perl 程式並不太複雜, 我們一樣將利用我們先前學過 Perl 的東西, 再加入少少新的東西, 便可以完成這個 Perl 程式了。

第 一 步 : 在網頁放下表單

網頁表單的 HTML 文件如下 :

<table cellspacing="0" cellpadding="10" width="100%" >
<tr><td>
<Center>會 員 登 入</Center>
<br><br>

<form action="http://yourdomain.com/cgi-bin/login.pl" method ="POST">
姓 名 :<input type="text" name="name" size="20"><P>
密 碼 :<input type="text" name="password" size="20"><P>

<Center><input type="submit"></Center>
<br>
</Form>

</td></tr>
</table>

Perl 程式解釋如下:

第 7 行 : http://yourdomain.com/cgi-bin/login.pl"

這必需是 Perl 程式正確的 url, 在這例子中, Perl 程式檔案名稱是 login.pl, 你可以使用任何檔案名稱。

Okay! 下一步就討論如何編寫 login.pl 這個 Perl 程式。

第 二 步 : 讀取資料庫

以下的 Perl 程式便是讀取資料庫的資料, 然後和訪客填入的資料作比較。 如資料相符便可進入。 嘩! 原來一樣咁簡單!

#!/usr/bin/perl
print "Content-type: text/html\n\n";
#
#
### parse the form ########################
#
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
#
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s/~!/ ~!/g;
   $FORM{$name} = $value;
   }
#
### End of Parse Form #####################
#
$name= "$FORM{'name'}";
$password= "$FORM{'password'}";
#
#
### Check Empty Entry ########
if ($name eq "") {
&register;
}
#
if ($password eq "") {
&register;
}
#
###################################
#
### Open DataBase #############
#
open(DATA,"data.txt");
@lines = <DATA>;
close(DATA);
#
######################################
#
foreach $lines (@lines) {
   ($word1,$word2,$word3)=split (/:/,$lines);
   if ($word1 eq $name) {
   if ($word2 eq $password) {
   &message;
   exit;
   }
   }
}
# 52
&wrong;
exit;
#
### Sub-routines ################
#
sub register {
print "<Center><H2>Login UnSucessful !</h2></Center>";
print "Please fill in your user name or password";
exit;
}
#
sub wrong {
print "<Center><H2>Login UnSucessful !</h2></Center>";
print "Please in correct user name or password!!";
exit;
}
#
sub message {
print "<Center>Login Sucessful !</Center>";
print "<Center>Message From MyGreatName.com</Center><BR>";
print "Hello $name,<P>";
print "Congratulation ! Login Sucessfully !<P>";
exit;
}

Perl 程式解釋如下:

第 1 - 23 行 :

相信讀者已經十分熟識這段 Perl 程式了, 如不明白, 請重新溫習本 Perl 課程.

其中第 20 行將表單的姓名設定為變數 $name

第 21 行將表單的密碼設定為變數 $password

第 24 - 33 行 :

檢查訪客是否忘記填入姓名或密碼. ("" 即是沒有資料). 如忘記填入姓名或密碼則會執行子程式 (Sub-routine) register.

第 27 行 : open(DATA,"data.txt");

這行是命令開啟資料庫檔案 data.txt , 然後將資料庫檔案 data.txt 放入資料處理箱 (File Handle) DATA 內.

第 28 行 : @lines = <DATA>;

哈哈, 原來將資料庫檔案設定為陣列 @lines.

相信讀者已經十分熟識陣列了. 如不明白, 請重新溫習本 Perl 課程!

第 29 行 : close(DATA);

處理完畢後便可以關閉資料處理箱.

第 41 - 52 行 :

如讀者是由第一章開始閱讀本 Perl 課程, 相信讀者已經十分熟識這段 Perl 程式了, 如不明白, 請重新溫習本 Perl 課程!

其中第 44 行 : ($word1,$word2,$word3)=split (/:/,$lines);
即是將資料分離並同時設定變數 $word1, $word2, $word3 給分離的資料. 在這例子中 :

$word1 變數代表資料錄的姓名
$word2 變數代表資料錄的密碼
$word3 變數代表資料錄的電話

如姓名及密碼均正確,則會執行第 47 行的子程式 messages, 然後離開本程式。

第 53 行 : &wrong;

如姓名或密碼不正確,則會去到第 53 行 並執行子程式 wrong, 然後離開本程式。

Conclusion:

Okay! 本 Perl 課程到此差不多完成了, 不知讀者有沒有察覺到, 其實我們不需要學習太多 Perl 的語法, 便已經可以寫出很多變化及實用的程式。 當然, 這樣有時會令到程式有些笨拙, 但影響並不太大, 你可以因程度增加而改善這些小缺點。

有些課程太著重Perl的語法, 第一階段必需學習很長時間 Perl 的語法, 才開始第二階段的學習編寫程式。 以致很多朋友還未完成第一階段, 因為太過沈悶, 已經放棄了。