การนำค่าจาก form เก็บลงแฟ้ม

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

บทเรียน ONLINE : การเขียนภาษา PERL
[ การนำค่าจาก form เก็บลงแฟ้ม ]

  1. ข้อควรทราบ
  2. เพิ่มระเบียน ในแฟ้มใหม่
  3. เรียกข้อมูล มาแสดง
  4. เพิ่มระเบียน ต่อท้ายแฟ้มเดิม
  5. เพิ่มระเบียน ซึ่งแสดงการแยกและรวมเขตข้อมูล
  6. แบบฝึกหัด
ข้อควรทราบ
  1. หากเข้าใจบทของการรับค่าจากฟอร์ม บทนี้ก็เรียกได้ว่าไม่ยากนัก ถ้าผู้ศึกษาเคยมีประสบการณ์ในการเขียนภาษา pascal หรือ c หรือ cobol ที่ได้จัดการกับแฟ้มแบบ text และเข้าใจโครงสร้างแฟ้มแบบนี้มาก่อน เช่นเพิ่ม ลบ หรือแก้ไข เป็นต้น
  2. บทนี้จะทำการรับค่าจากฟอร์ม แล้วจัดเก็บลงแฟ้มใน 2 ลักษณะคือ เก็บทับลงไป หรือเพิ่มเข้าไป
  3. ในบทนี้ผู้ศึกษาจะได้ทดสอบกับข้อมูลครบวงจร คือรู้จักการสร้างแฟ้ม เพิ่มระเบียนต่อท้าย และนำมาแสดง
  4. การลบหรือแก้ไข ไม่ได้กล่าวถึงในบทนี้ แต่ถ้ามองในเรื่องการลบแฟ้มเดิมก่อนเพิ่มระเบียนแรกใหม่ ก็น่าจะชดเชย เรื่องลบระเบียนกับปรับปรุงได้
  5. ตัวอย่างในบทนี้ได้ทดลองกับเครื่องของ hypermart แล้วใช้ได้ครับ เพราะเว็บนี้ใช้ hypermart เป็น host

เพิ่มระเบียน ในแฟ้มใหม่
Click here for open this form sample
<form method=post action=/perl/plsave1.pl>
<input type=text name=getvar>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรม perl นี้จะลบแฟ้ม plsave.txt ทันที
แล้วจึงส่งข้อมูลที่รับเข้ามา เข้าไปเก็บในแฟ้ม
#!/usr/local/bin/perl
print"Content-type:text/html\n\n";
$dat = <STDIN>;
$filename = join '',"/data1/hm/thaiall.com","/perl/plsave.txt";
unlink("$filename");
open(myfile,">$filename");
print myfile $dat;
close(myfile);
print $dat," : finish"
ผลที่ได้จากการกดปุ่ม submit ข้างบนนี้
มีเพียง 1 บรรทัด คือ
getvar=This+is+test : finish
ถ้าท่านพิมพ์คำว่า This is test ในช่องว่าง
สำหรับผลการทำงานที่มองไม่เห็นก็คือ
ได้มีการลบแฟ้ม plsave.txt ถ้าเคยมีอยู่
แต่ถ้าไม่มีก็ไม่เกิดปัญหาอะไร
จากนั้นจะถูกสร้างใหม่ พร้อมการเพิ่มข้อมูลเข้าไป

เรียกข้อมูลมาแสดง
เพื่อจะได้ดูผลการเพิ่มข้อมูล
เรียกโปรแกรม perl ให้ไปอ่านแฟ้มมาแสดง
ถ้าไม่ส่งค่าให้ ก็เรียกตรง ๆ ผ่าน url ได้เลย
เช่น Click here to read file
#!/usr/local/bin/perl
print"Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plsave.txt";
print "<pre>";
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
print @getrec;
ผลของโปรแกรมนี้จะนำข้อมูลที่อยู่ใน plsave.txt
มาพิมพ์ทั้งหมด โดยไม่จัดรูปแบบ หรือแยกบรรทัด

เพิ่มระเบียนต่อท้ายแฟ้มเดิม
ตัวอย่างนี้เป็นตัวอย่างที่ไม่ดีนัก เพราะไม่สามารถแยกข้อมูลแต่ละครั้งที่ส่งเข้าไปได้ง่าย
หากจะให้แยกได้ง่าย ต้องให้ข้อมูลแต่ละครั้งที่ส่งเข้าไปอยู่ต่างบรรทัดกัน
Click here for open this form sample
<form method=post action=/perl/plsave3.pl>
<input type=text name=getvar>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรม perl นี้จะเพิ่มข้อมูลต่อท้ายแฟ้ม plsave.txt
แต่ข้อมูลที่ถูกส่งเข้าไปจะอยู่บรรทัดเดียวกันหมด
ไม่มีการแยกบรรทัดของข้อมูล
#!/usr/local/bin/perl
print"Content-type:text/html\n\n";
$dat = <STDIN>;
$filename = join '',"/data1/hm/thaiall.com","/perl/plsave.txt";
open(myfile,">>$filename");
print myfile $dat;
close(myfile);
print $dat," : finish"
ผลที่ได้จากการกดปุ่ม submit ข้างบนนี้
มีเพียง 1 บรรทัด คือ
getvar=This+is+test : finish
ถ้าท่านพิมพ์คำว่า This is test ในช่องว่าง
สำหรับผลการทำงานที่มองไม่เห็นก็คือ
ถ้าเดิมข้อมูลเท่าใด ก็จะเพิ่มข้อมูลใหม่
ต่อท้ายข้อมูลเดิม ทันที

เพิ่มระเบียน ซึ่งแสดงการแยกและรวมเขตข้อมูล


Click here for open this form sample
<form method=post action=/perl/plsave4.pl>
<input type=text name=getvar1><br>
<input type=text name=getvar2><br>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรม perl นี้จะนำเฉพาะข้อมูลไปเพิ่มใน plsave.txt
และแบ่งแต่ละครั้งที่เพิ่มไว้คนละบรรทัด
และแบ่งแต่ละเขตข้อมูลไว้ด้วยเครื่องหมาย :
#!/usr/local/bin/perl
print"Content-type:text/html\n\n";
$dat = <STDIN>;
$dat =~ tr/+/ /;
$dat =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$dat =~ s/~!/~!/g;
$_ = $dat;
$dat = tr/~-~#-@A-Za-zก-ฮฯ-๙/ /cs;
$dat = $_;
$filename = join '',"/data1/hm/thaiall.com","/perl/plsave.txt";
@dd = split '&',$dat;
$v1 = split '=',$dd[0];
$v2 = split '=',$dd[1];
open(myfile,">>$filename");
print myfile $v1,":",$v2,"\n";
close(myfile);
print $dat," : finish"
ผลที่ได้จากการกดปุ่ม submit ข้างบนนี้
มีเพียง 1 บรรทัด คือ
getvar1=one&getvar2=second : finish
ถ้าท่านพิมพ์คำว่า one และ second ในช่องว่าง
การแสดงผล ถ้ามีการเคาะช่องไฟในแต่ละเขตข้อมูล
จะไม่มีเครื่องหมาย + เข้าไปเก็บในข้อมูลอีก
และตัวอย่างนี้ยังใช้ภาษาไทยได้ เพราะได้แปลงข้อมูลแล้ว

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. นำคำว่า this is me เข้าไปเก็บในแฟ้ม hi.txt
  2. รับค่าจาก form 2 ตัว ไปเก็บในแฟ้ม hihi.txt
  3. อ่านข้อมูลจาก hihi.txt มาแสดง
  4. เพิ่มข้อมูลต่อท้ายแฟ้ม hihi.txt
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน

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