การเขียน chat board อย่างง่าย

ปรับปรุง : 2548-02-12 ()

บทเรียน ONLINE : การเขียนภาษา PERL
[ การเขียน chat board อย่างง่าย ]

  1. ข้อควรทราบ
  2. บอร์ดสำหรับรับ และส่งข้อความ
  3. ส่วนสั่งเพิ่มข้อมูลในบอร์ด
  4. เปิดกระดานมาทดสอบ
  5. แบบฝึกหัด
ข้อควรทราบ
  1. บทเรียนนี้เป็นการเขียน chat board แบบมือสมัครเล่น เพราะผมออกแบบ เขียน และทดสอบ ใช้เวลาไม่ถึง 4 ชั่วโมง จึงมีจุดให้ติมากมาย ผู้ศึกษาจึงต้องทำใจนะครับ ว่า board แบบนี้เป็นแบบมือสมัครเล่น
  2. ถ้าจะสร้างบอร์ดแบบนี้ต้องมีแฟ้ม 2 แฟ้ม คือ html และ perl โดย html มีหน้าที่ทั้งตัวส่ง และรับผลการส่ง สำหรับ perl นั้นทำหน้าที่นำข้อความที่รับมา เพิ่มเข้าไปในแฟ้ม html นั่นเอง เห็นไหมครับ สั้น ง่าย และไม่ซับซ้อน
  3. สำหรับ $limitline คือจำนวนข้อความที่ยอมให้แสดงได้ในหน้าจอ ถ้ามากก็จะใช้เวลา download นานไปด้วย ต้องพิจารณาดูนะครับ
  4. ข้อผิดพลาดที่อาจเกิดขึ้น หลังจาก copy อย่างถูกต้องแล้ว ก็คือ แฟ้ม html บรรทัดสุดท้ายจะต้องเป็น บรรทัดว่างสัก 5 บรรทัดนะครับ นอกนั้นก็ไม่น่าจะผิดพลาดอะไร และถ้าเผลอทำ html เสียเนื่องจากกำลังทดสอบ ก็ copy มาใหม่ครับ และถ้าต้องการแก้ส่วนของบรรทัดสุดท้ายก็ให้ไปแก้ใน perl
  5. สรุปว่าแฟ้มที่เก็บในห้อง perl ที่ผมได้ทดสอบ มี 2 แฟ้มที่ต้องใช้คือ plchat1.htm และ plchat1.pl

บอร์ดสำหรับรับ และส่งข้อความ
ตัวอย่าง html นี้ผมใช้ชื่อ plchat1.htm เก็บในห้อง /perl
ถ้านำไปทดสอบจะใช้ชื่ออะไรก็ได้นะครับ
copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ plchat1.htm
<html><body><a name=top></a><font face="microsoft sans serif" size=0>
<form method=post action=/perl/plchat1.pl>
<input type=text name=txt size=40><br>
<input type=submit value=send>
<input type=reset value=clear>
</form><hr>





ส่วนสั่งเพิ่มข้อมูลในบอร์ด
ตัวอย่าง perl นี้ผมใช้ชื่อ plchat1.pl เก็บในห้อง /perl
ถ้านำไปทดสอบจะใช้ชื่ออะไรก็ได้นะครับ แต่ต้องสัมพันธ์กับ plchat1.htm
หลักการของโปรแกรม คือ
- การนำชุดตัวอักษรที่ได้มาแปลงให้เป็นภาษาไทยได้ก่อน
- เปิด /perl/plchat1.htm แล้วอ่านมาทุกบรรทัด เก็บไว้ใน @gfn
- กำหนดค่าต่าง ๆ ที่จะนำไปใช้ใน loop สำคัญ
- ใน loop ถ้าเจอ /form แสดงว่าหมดส่วน heading ให้พิมพ์ให้พิมพ์ข้อความที่รับเข้ามา คือ $txt ลงไป
- จากนั้นให้นำทั้งหมดที่อ่านจากแฟ้มเขียนลงไป แต่ต้องไม่เกิน $limitline ซึ่งเป็นจำนวนบรรทัดสูงสุดที่อนุญาติ
- เมื่อหมดข้อความแล้วให้นำบรรทัดสุดท้ายพิมพ์ลงไป
copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ plchat1.pl
#!/usr/local/bin/perl
$gsys = <STDIN>;
$gsys =~ tr/+/ /;
$gsys =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$gsys =~ s/~!/~!/g;
@gs = split /=/, $gsys;
$txt = $gs[1];
$filename = join '',"/data1/hm/thaiall.com","/perl/plchat1.htm";
open (fn,"$filename");
@gfn = <fn>;
close(fn);
$cnt = @gfn;
($sec,$min,$hr,$day,$month,$year) = localtime(time);
$limitline = 30; #จำกัดการเก็บข้อมูลเพียง 30 บรรทัด
unlink("$filename");
open (fn,">$filename");
$c=0;
for $i (0 .. $cnt-2) {
if ($c < $limitline) {print fn $gfn[$i];}
if ($c > 0) { $c++; }
if (substr($gfn[$i],0,7) eq "</form>") {
$c = 1;
print fn "<font size=2>",$txt,"</font> _ _ _";
print fn " [<a href=#top>",$ENV{REMOTE_ADDR},"</a> - ";
print fn "<a href=#bottom>",$hr,":",$min,":",$sec,"</a>]<br>\n";
} #if
} #for
print fn "<hr><a name=bottom></a><a href=/perl/plchat.htm>วิธีเขียน Chat board แบบนี้</a>";
print fn "</body></html>";
close(fn);
print "Content-type: text/html","\n\n";
print "<meta http-equiv='Refresh' content='0; URL=/perl/plchat1.htm'>";
print'<body><font face="microsoft sans serif" color=#0000ff>';
print'<a href=/perl/plchat1.htm>คุยกัน .. มาคุยกัน</a></body></html>';

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้เขียน chat board แบบนี้เลย ยังไม่ต้องแก้
  2. ให้ปรับปรุงแก้ไขให้สวยงาม เช่นมีสี มีตาราง เป็นต้น
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223