Guest Book

            ในการสร้างสรรค์ home page จริงๆ เราจำเป็นต้องมี guest book เพื่อให้ผู้เข้ามาเยี่ยมชม Website ของเราได้แสดงความคิดเห็น พร้อมทั้งข้อติชม เพื่อที่ผู้พัฒนาจะได้นำไปปรับปรุงแก้ไขต่อไป

            การทำงานในลักษณะ guest book ได้นำหลักการต่างๆตั้งแต่ที่เราได้เรียนกันมาดังนี้

  1. ส่งค่าตัวแปร form ข้อเสนอแนะติชม จาก html from
  2. รับค่าด้วย CGI perl .pl และแปลงค่าตัวแปร
  3. เปิด file ข้อมูล นำค่าตัวแปรบันทึกต่อท้ายลงใน file ข้อมูล ปิด file ข้อมูล
  4. เปิด file ข้อมูล แสดงผลข้อมูลออกทางจอภาพ ปิด file ข้อมูล

listting ที่ 1 gbook.html

<html>
<head><title>สมุดบันทึก ข้อเสนอแนะ ติ ชม</title></head>
<body>

<pre>

<h1>สมุดเยี่ยมชม</h1>
<form method="post" action="admsg.pl">
ชื่อ/นามสกุล: <input type="text" name="name"><br>
ข้อความ:       <input type="text" name="masg">

<input type="submit"><input type="reset">

</form>
</pre>

</body>
</html>

คำอธิบาย

           listting ที่ 1 file gbook.html ทำหน้าที่เป็น Form ส่งข้อมูลด้วยวิธี post ให้กับ addmsg.pl
โดยกำหนดตัวแปรไว้ ดังนี้

           ชื่อ/นามสกุล เท่ากับตัวแปร name
           ข้อความ        เท่ากับตัวแปร masg

           เมื่อกรอกข้อความแล้วกดปุ่ม submit ตัวแปร name และ masg จะถูกส่งไปให้ File admasg.pl

listting ที่ 2 addmsg.pl

#!/usr/bin/perl
print "Content-type: text/html\n\n";

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/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$value =~ s/<([^>]|\n)*>//g;
}$FORM{$name} = $value;
}

open(MSG,">>msg.dat");
print MSG "<b>ข้อความ</b> : $FORM{'masg'}<br><hr>\n";
print MSG "<b>ชื่อ/นามสกุล</b> : $FORM{'name'} <br> \n";
close(MSG);

print "<body bgcolor='#FCF9D8'>";
print "<center><a href=gbook.html><h3><b>คลิ๊กเพื่อลงบันทึกข้อความ</b></h3></a></center>";
print "<hr>";

open(MSG,"msg.dat");
@AllFile = <MSG>;
close(MSG);

@msgdata=(reverse( @AllFile ));

print "@msgdata";

 

คำอธิบาย

           1.   listting ที่ 2 file admsg.pl
                 จะรับค่าตัวแปร name และ masg จาก gbook.html โดยชุด code ต่อไปนี้

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/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$value =~ s/<([^>]|\n)*>//g;
}$FORM{$name} = $value;
}

            2.   จากนั้นชุด code จะแปลงค่าแปร   ในรูป $FORM{'.....'}
                 ชุดตัวแปร   $FORM{'name'} จะรับค่า $name
                 ชุดตัวแปร   $FORM{'masg'} จะรับค่า $masg

            3. เปิด file msg.dat แล้วบันทึก ข้อความต่อไปนี้

                <b>ข้อความ</b> : $FORM{'masg'}<br><hr>
                <b>ชื่อ/นามสกุล</b> : $FORM{'name'} <br>

                ปิด file msg.dat

           4. เปิด file msg.dat แล้วเก็บค่าลงตัวแปร  @AllFile
                กลับค่าตัวแปรภายใน @Allfile จากค่าสุดท้ายมาเป็นค่าตัวแรก ด้วยคำสั่ง reverse

               @msgdata=(reverse( @Allfile ));

                กลับค่าแล้วเก็บไว้ใน @msgdata
                จากนั้นพิมพ์ออกหน้าจอภาพ ดังภาพข้างล่าง

          Tip ถ้าคุณใช้ Server Unix/Linux   คุณจะต้องสร้าง file msg.dat ว่างๆ ขึ้นมาก่อน แล้ว chmod เป็น 777 ส่วนผู้ใช้ Server Windows ไม่ต้องทำครับ

ผลลัพธ์

open_gbook.gif (9169 bytes)

listting ที่ 3 open_gbook.pl

   ในบางครั้งผู้เข้าเยี่ยมชม Website อาจไม่ต้องการบันทึกลง Guest Book แต่อยากดูข้อมูลภายใน Guest Book   ก็สามารถทำได้โดย ตัดตอนชุดคำสั่งรับค่าตัวแปรและบันทึกข้อมูลลง file msg.dat ออก คงเหลือแต่ชุด เปิด file เพื่อขอดูข้อมูล

#!/usr/bin/perl
print "Content-type: text/html\n\n";

print "<body bgcolor='#FCF9D8'>";
print "<center><a href=gbook.html><h3><b>คลิ๊กเพื่อลงบันทึกข้อความ</b></h3></a></center>";
print "<hr>";

open(MSG,"msg.dat");
@AllFile = <MSG>;
close(MSG);

@msgdata=(reverse( @AllFile ));

print "@msgdata";

 

ผลลัพธ์

open_gbook.gif (9169 bytes)

คำอธิบาย

      จะเห็นได้ว่า ผลลัพธ์จะเหมือนกับ adgbook.pl คือ

     เปิด file msg.dat แล้วเก็บค่าลงตัวแปร  @Allfile
                กลับค่าตัวแปรภายใน @Allfile จากค่าสุดท้ายมาเป็นค่าตัวแรก ด้วยคำสั่ง reverse 

               @msgdata=(reverse( @Allfile ));

                กลับค่าแล้วเก็บไว้ใน @msgdata
                จากนั้นพิมพ์ออกหน้าจอภาพ ดังภาพข้างต้น


Copy right Passkorn Roungrong 2000