สยามเว็บโฮส โฮสติ้งดี ราคาถูก

วัตถุประสงค์การก่อตั้งฯ
ห้องพระ-ชำระจิตใจ
เรื่องสั้น-บทความ
บทกลอน-บทกวี
เกมส์ออนไลน์
ตำหนักเพลงไทยเดิม
เซียมซีเสี่ยงโชค
กระดานสนทนา
ข่าวฝากประชาสัมพันธ์
กระดานซื้อ-ขายสินค้า
ฟรีอีเมล์เนื้อที่ 5 MB
ติดต่อ นายทะเบียน
Add to Favorites

ทั่วโลก www
ชมรมเว็บเพจไทย

Power by Google!
สนับสนุนพื้นที่ Hosting

สยามเว็บโฮสดอทคอม

 
Updated: 16/10/2545


บทความเรื่อง เริ่มเขียนสคริปต์ด้วยภาษา Perl โดย webmaster@thaitop.com

3. การรับข้อมูลเข้า CGI

คุณจะได้เรียนรู้

  1. การรับข้อมูลเข้าโปรแกรม CGI   โดยใช้แบบฟอร์มและลิ้งค์
  2. การดำเนินการกับข้อมูลที่ได้จากแบบฟอร์มและลิ้งค์


การให้แบบฟอร์มคู่กับ CGI เป็นของคู่กันเหมือนนมข้นหวานกับปลาท่องโก๋ เพราะเป็นวิธีการ ที่จะทำให้ได้ข้อมูล มาดำเนินการในโปรแกรม นอกจากนั้น ก็สามารถใช้ลิ้งค์ ใช้ cookies ใช้ session ก็ได้เช่นกัน แต่ในบทเรียนนี้ จะแสดงวิธีการใช้แบบฟอร์มและลิ้งค์เท่านั้น ด้วยถือว่าเป็นวิธีมาตรฐานสากล

ข้อมูลที่ถูกส่งมาที่ CGI โดยใช้ลิ้งค์ หรือแบบฟอร์มที่ใช้ method=get จะมีลักษณะมาเป็นสายของข้อความ
เช่น name=suwat&email=webmaster@thaitop.com&age=98&city=Bangkok ซึ่งสายข้อความนี้เรียกว่า Querystring

ดังนั้นการที่จะนำข้อมูลออกมาใช้จะต้องทำการแยกข้อมูลออกจากกัน แล้วจะใช้อะไรแยก ? เนื่องจากงานเหล่านี้มีการเรียกใช้ บ่อยๆ จึงมีผู้คิดค้นและเขียนโปรแกรมไว้ให้ เอาเป็นว่าเราสบายไม่ต้องมาเขียนโปรแกรมเอง โปรแกรมที่เขาเขียนไว้นี้จะเรียกว่า ไลบราลี่ (library) ซึ่งตัว library นี้ก็จะเป็นไฟล์ธรรมดานี่แหล่ะครับโดยทั่วไปที่นิยมจะตั้งชื่อว่า cgi-lib.pl   แค่ code ที่อยู่ภายในจะแบ่งการทำงานไว้หลายๆ อย่าง ซึ่งงานแต่ละอย่าง (Routines) มักจะมีผู้เขียนโปรแกรมด้วย Perl ใช้กันบ่อยๆเช่นการ อ่านข้อมูลจากแบบฟอร์มหรือลิ้งค์ การพิมพ์ </body></html> เป็นต้น เวลาใช้งานก็เรียก library ขึ้นมาก่อน จากนั้นก็เรียกชื่อของงานที่ต้องการขึ้นมา รายละเอียดการใช้ library จะมีสอน แต่ตอนนี้เราตัด code เอามาเฉพาะงาน ที่ทำการแยกสายข้อมูลที่ถูกส่งมาด้วยลิ้งค์หรือแบบฟอร์ม code ที่ตัดมาจะมีลักษณะดังนี้ครับ

sub FormInput
{
local (*qs) = @_ if @_;

if ($ENV{'REQUEST_METHOD'} eq "GET") #อ่านตัวแปรระบบว่าข้อมูลถูกส่งมาด้วยวิธี GET หรือ POST
{
$qs = $ENV{'QUERY_STRING'}; #ถ้าส่งมาด้วย GET ตั้งตัวแปรเก็บไว้ว่านี่คือข้อมูลที่ต้องนำไปแยก
}
elsif ($ENV{'REQUEST_METHOD'} eq "POST") #แต่ถ้าส่งมาด้วย POST
{
read(STDIN,$qs,$ENV{'CONTENT_LENGTH'}); #ตั้งตัวแปรเก็บไว้ว่านี่คือข้อมูลที่ต้องนำไปแยก
}

@qs = split(/&/,$qs); #จากบรรทัดต่อไปนี้เริ่มทำการแยกโดยใช้คำสั่ง foreach และสร้างตัวแปรในการเรียกใช้

foreach $i (0 .. $#qs)
{
$qs[$i] =~ s/\+/ /g;
$qs[$i] =~ s/%(..)/pack("c",hex($1))/ge;

($name,$value) = split(/=/,$qs[$i],2);

if($qs{$name} ne "")
{
$qs{$name} = "$qs{$name}:$value";
}
else
{
$qs{$name} = $value;
}
}
}


การใช้งานคุณต้อง copy code ดังกล่าวทั้งหมดไปใส่ไว้ในโปรแกรมที่คุณต้องการ จากนั้นทำการเรียกชื่อ ซึ่งชื่อคือ FormInput แล้วจึงใช้งาน การอ่านข้อมูลต่อไป ดังตัวอย่างนี้ ผมตั้งชื่อว่า readinput.pl ซึ่งการใช้จะใช้คู่กับ แบบฟอร์ม คุณสามารถ download ทั้งสองไฟล์นี้มาทดลองในเครื่องของคุณ ได้เลย โดยให้เรียกแบบฟอร์มขึ้นมาก่อน แล้วกรอกข้อมูลให้ครบ คลิ้กส่งดูนะครับ

ไฟล์ readinput.pl มี code และคำอธิบายดังนี้ครับ

print "Content-type:text/html\n\n";
print "<html><body>";
&FormInput (*input); #เรียกใช้ก่อนการทำงานใดๆ ต้องเรียกชื่อให้ถูกด้วยนะครับ
$whoami = $input{'name'}; #ตั้งตัวแปรก่อนการนำค่าออกมาใช้ก็ได้ครับ
print "ชื่อ - $whoami<br>";
print "อีเมล์ - $input{'email'}<br>"; #หรือจะนำค่ามาใช้โดยตรงแบบนี้ก็ได้ครับ
print "อายุ - $input{'age'}<br>";
print "จังหวัด - $input{'city'}<br>";
print "<hr>";
print "</body></html>";

#อ่านข้อมูลจากฟอร์มหรือ querystring จากลิ้งค์

sub FormInput
{
local (*qs) = @_ if @_;

if ($ENV{'REQUEST_METHOD'} eq "GET")
{
$qs = $ENV{'QUERY_STRING'};
}
elsif ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN,$qs,$ENV{'CONTENT_LENGTH'});
}

@qs = split(/&/,$qs);

foreach $i (0 .. $#qs)
{
$qs[$i] =~ s/\+/ /g;
$qs[$i] =~ s/%(..)/pack("c",hex($1))/ge;

($name,$value) = split(/=/,$qs[$i],2);

if($qs{$name} ne "")
{
$qs{$name} = "$qs{$name}:$value";
}
else
{
$qs{$name} = $value;
}
}
}



ลองใช้แล้วก็ดัดแปลงดูนะครับ ถ้าคิดว่าเก่งแล้วอ่าน บทที่ 4 ต่อไปเลยครับ


ชมรมเว็บเพจไทย ตั้งใจมุ่งมั่น สร้างสรรค์เพื่อมวลสมาชิก



เริ่มนับ 20 พฤศจิกายน 2547 เวลา 24.00 น.
เว็บไซต์แห่งนี้ออกแบบสำหรับจอภาพที่มีความละเอียด 800x600 Pixel และ เปิดชมด้วย IE4.0 ขึ้นไป

ชมรมเว็บเพจไทย เป็นเว็บไซต์ที่จัดทำขึ้นเพื่อเผยแพร่ข่าวสารและสาระความรู้เกี่ยวกับการสร้างเว็บไซต์ ให้แด่สมาชิกและผู้สนใจทั่วไป
โดยไม่หวังผลประโยชน์ทางธุระกิจ [Non Profit Organization] ก่อตั้งเมื่อวันที่ 16 ตุลาคม พ.ศ. 2540
ข้อมูลข่าวสาร บทความ และภาพประกอบ ที่ไม่อ้างถึงเจ้าของลิขสิทธิ์ สามารถนำไปใช้ได้โดยไม่ต้องขออนุญาต [Non Copyright]