การเขียนกระดานแสดงความคิดเห็น (Opinion board)

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

บทเรียน ONLINE : การเขียนภาษา PERL
[ การเขียน opinion board ]

  1. ตัวอย่างกระดานแสดงความคิดเห็น
  2. การสร้างประเด็นใหม่ใน html
  3. การเขียน perl เพิ่ม 2 ส่วนอัตโนมัติ ความคิดเห็นทั้งหมด และส่วน form รับความเห็น
  4. การเขียน perl ที่ถูกสั่งจาก form เพื่อเพิ่มความคิดเห็นใหม่
  5. แบบฝึกหัด
ข้อควรทราบ
  1. กระดานแสดงความเห็นที่เห็นตามเว็บดัง ๆ ของไทย เป็นการนำความสามารถส่วนหนึ่ง หรือนำส่วนหนึ่งจาก wwwboard มาใช้นั่นเอง เพราะการทำ wwwboard จะสามารถเพิ่มกระทู้อะไรก็ได้ ทำให้ไม่สามารถเน้นกระทู้ที่สำคัญ หรือน่าสนใจออกมา ดังนั้นจึงมีผู้นำกระทู้บางส่วนออกมาไว้ที่หน้าแรกของ homepage แต่สำหรับกระดานแสดงความเห็นที่ผมเขียนจะเขียนอย่างง่าย ๆ เพื่อสร้างกระทู้ขึ้นเองโดยไม่มีโครงสร้างที่ซับซ้อนเหมือน wwwboard เพื่อให้ง่ายต่อการนำไปใช้
  2. ตัวกระดานที่เปิดขึ้นนี้ มีส่วนประกอบ 3 ส่วน คือ หัวกระดานซึ่งเป็นประเด็นเริ่มต้น ความคิดเห็นใหม่ที่มีการแสดงความคิดเห็นเข้ามา และส่วนรับความคิดเห็นใหม่
  3. แฟ้มที่ต้องใช้มี 4 แฟ้ม ดังนี้
    1. แฟ้มเก็บส่วนหัว(html) ภายในแฟ้มจะทำหน้าที่เรียกอีก 2 ส่วนอัตโนมัติ คือส่วนตัว และส่วนเพิ่มความคิดเห็นใหม่
    2. โปรแกรม puttext.pl ถูกเรียกจาก แฟ้ม html เพื่อเพิ่มอีก 2 ส่วน เข้าไปในแฟ้ม html นั้นเอง
    3. โปรแกรม puttextn.pl ถูกเรียกจาก form เพื่อนำความคิดเห็นใหม่เพิ่มเข้าไปในแฟ้ม txt เนื่องจากแฟ้ม txt จะเก็บความคิดเห็นที่ถูกเพิ่ม และโปรแกรม puttext.pl จะทำหน้าที่อ่านไปแสดงในแฟ้ม html
    4. แฟ้ม txt ทำหน้าที่เก็บความคิดเห็นที่ถูกเพิ่มเข้ามาทั้งหมด และจะถูกสร้างขึ้นอัตโนมัติ ไม่ควรสร้างขึ้นเองเพราะจะมีปัญหาเรื่อง owner และ chmod ได้
  4. เมื่อต้องการเพิ่มประเด็นใหม่ ให้สร้างแฟ้ม html ขึ้น พร้อมเพิ่มรายละเอียดลงไปในประเด็นใหม่ ไม่จำเป็นต้องไปแก้โปรแกรม perl เลย ทำเฉพาะส่วนของ html เท่านั้น และ html ทุกตัวก็มีอิสระต่อกัน
  5. กระดานนี้จะใช้ได้สมบูรณ์เมื่อเริ่มต้น ต้องมีแฟ้ม 3 แฟ้มในห้อง opinion คือ superman.htm, puttext.pl, puttextn.pl ซึ่งท่านสามารถสร้างแฟ้มลักษณะ superman.htm ได้อีกไม่จำกัด โดยไม่ต้องเพิ่มโปรแกรม perl เมื่อมีการแสดงความคิดเห็น แฟ้ม superman.txt จะถูกสร้างขึ้นอัตโนมัติ
  6. วิธีแก้ปัญหา ในกรณีที่ท่าน get superman.txt มาแก้ไข แล้วส่งกลับเข้าไป หลังจากนั้นจะไม่ยอมรับข้อคิดเห็นใหม่ ให้แก้โดย chmod 777 superman.txt เพราะเกิดปัญหาเรื่องของ own หากทำดังนี้จะไม่เกิดปัญหานี้เมื่อมีการ get และ put ในอนาคตต่อแฟ้มเดิม
  7. ท่านต้องกำหนดสิทธิการเข้าใช้ห้อง opinion เป็น chmod 777 จึงจะทำให้โปรแกรมสร้างแฟ้ม superman.txt ได้อัตโนมัติ เรื่องนี้สำคัญนะครับ อย่างลืมทีเดียว วิธีกำหนดสิทธิอ่านได้จากเรื่อง บทเรียน ftp ที่นี่

การสร้างประเด็นใหม่ใน html
ให้ใช้ notepad หรือ editor ที่ท่านถนัด พิมพ์โปรแกรมข้างล่างนี้
แล้ว save ในชื่อใดที่ท่านชอบ แต่มีนามสกุลเป็น htm เช่น superman.htm
ข้างล่างนี้เป็นตัวอย่าง การเขียนประเด็นเรื่อง superman
ถ้านำไปใช้ ก็ให้แก้ไขส่วนต่าง ๆ ที่เกี่ยวกับ superman เท่านั้น
จุดสำคัญที่สุดในโปรแกรมนี้ก็คือ บรรทัดรองสุดท้าย ที่กำหนดให้เรียก
โปรแกรม perl จากห้อง opinion ก็ต้องถามหละว่า ท่านเก็บ puttext.pl ไว้ที่ไหน
แล้วก็แก้จาก opinion เป็นห้องที่ท่านเก็บโปรแกรมนี้ไว้ เป็นอันใช้ได้
เพราะบรรทัดนั้นจะเรียกโปรแกรม perl ให้นำอีก 2 ส่วนมาเพิ่มเข้าไปอัตโนมัติ
copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ superman.htm
<HTML><HEAD><TITLE>ชอบ superman ไหม</TITLE></HEAD>
<BODY text=#000000 bgcolor=#FFFFFd link=#ff0000 vlink=#ff4444>
<font face="microsoft sans serif" size=0>
<dd>Superman เมื่อเอ่ยถึงผู้ชายคนนี้ สาว ๆ ต้องบอกว่านี่หละผู้ชายในฝัน
หุ่นล่ำ สมชายชาตรี มีอะไรที่พิเศษ น่าหลงไหน เก่งแบบสุดยอด และเป็นมนุษย์ต่างดาว
หรือหนุ่ม ๆ ขี้อิจฉา และสาว ๆ ผู้หวั่นไหวคิดอย่างไรกันบ้าง
<hr>
<!--#exec cgi="/opinion/puttext.pl"-->
</body></html>

การเขียน perl เพิ่ม 2 ส่วนอัตโนมัติ
โปรแกรมนี้ทำความเข้าใจตามได้ไม่ยาก หรืออาจไม่แก้ไขอะไรก็ได้
จุดที่ท่านต้องแก้ไข ถ้าไม่ได้เก็บโปรแกรม หรือข้อมูลในห้อง opinion
คือบรรทัดที่มีคำว่า opinion 2 บรรทัด ให้แก้เป็นชื่อ directory ของท่าน
ในกรณีที่ท่านไม่ได้เตรียมห้อง opinion ไว้เก็บข้อมูล txt และโปรแกรม perl
หรือ web server บางเครื่องไม่ยอมให้ใช้ cgi นอกห้อง cgi-bin เป็นต้น
copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ puttext.pl
#!/usr/local/bin/perl
print "Content-type: text/html","\n\n";
print '<center>กดปุ่ม refresh หรือ reload หลังจากเสนอความคิดเห็น</center>';
$dn = $ENV{DOCUMENT_NAME};
$ntxt = substr($dn,0,(length($dn)-4));
$filename = join '',"/data1/hm/thaiall.com","/opinion/",$ntxt,".txt";
$fn = join '',$ntxt,".txt";
open (fn,"$filename");
@gfn = <fn>;
close(fn);
$cnt = @gfn;
@gfn = reverse(@gfn);
for $i (0 .. $cnt-1) {
@rec = split /<br>/,$gfn[$i];
print "<font color=#ff0000>",$rec[0],"</font><br> - ",$rec[1],"<br>";
}
print "<hr><form method=post action=/opinion/puttextn.pl>";
print "<input type=hidden name=filen value='";
print $fn;
print "'>ชื่อ หรือ E-Mail <input type=text name=nm size=40><br>";
print "<textarea name=opinion rows=5 cols=60>";
print "แสดงความเห็นของท่านที่นี่</textarea><br>";
print '<input type=submit name=submit value=ส่งความเห็น(Send_Opinion)>';
print '<input type=reset name=reset value=ล้างความเดิม(Clear)>';
print '</form>';
print '<hr></body></html>';

การเขียน perl ที่ถูกสั่งจาก form
ถ้าท่านไม่ได้แก้โปรแกรม puttext.pl และยังเก็บข้อมูลในห้อง opinion
สำหรับโปรแกรมนี้ก็ไม่ต้องแก้อะไรเช่นกัน แต่ถ้าท่านย้ายห้องจาก opinion
จะมีจุดที่ต้องแก้คือบรรทัดที่ 2 ที่มีคำว่า opinion เท่านั้น
ซึ่งเป็นจุดอ้างถึงแฟ้ม txt เพื่อจะเพิ่มความคิดเห็นใหม่เข้าไป
copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ puttextn.pl
#!/usr/local/bin/perl
$b = "/data1/hm/thaiall.com";
$basedir = join '',$b,"/opinion/";
print"Content-type:text/html\n\n";
print'<HTML><HEAD><TITLE>ร่วมแสดงความคิดเห็น</TITLE></HEAD>';
print'<font face="microsoft sans serif" size=0><center>';
$gsys = <STDIN>;
$gsys =~ tr/+/ /;
$gsys =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$gsys =~ s/~!/~!/g;
$_ = $gsys;
$x = tr/~-~#-@A-Za-zก-ฮฯ-๙/ /cs;
$gsys = $_;
@pairs = split(/&/, $gsys);
foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $FORM{$name} = $value;
}
#===============================
if (length($FORM{'nm'}) > 0 and length($FORM{'opinion'}) > 0) {
$filename = join '',$basedir,$FORM{'filen'};
open(talk,"$filename");
@keeptalk = <talk>;
close(talk);
unlink($filename);
open(talk,">$filename");
foreach $keeprec (@keeptalk) {
print talk $keeprec;
}
print talk $FORM{'nm'},"<br>",$FORM{'opinion'},"\n";
close(talk);
print '<hr><a href=',$ENV{HTTP_REFERER},'>เรียบร้อย.</a><hr>';
} else {
print '<hr><a href=',$ENV{HTTP_REFERER},'>กรอกข้อมูลไม่ครบ</a><hr>';
}
print'</body></html>';

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

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