การรับค่าผ่าน url | ||
ข้อควรทราบ |
|
สั่งประมวลผล perl พร้อมส่งค่า |
การสั่งประมวลผล perl ใน homepage นั้นง่ายมาก เพียงแต่พิมพ์ชื่อแฟ้มในช่อง location ก็เป็นอันเรียบร้อย แต่เครื่องที่เก็บชื่อแฟ้มจะต้องมี perl compiler ด้วยนะครับ ไม่งั้นจะ แสดง source code โดยไม่ประมวลผล
ตัวอย่างแสดงจุด ที่ให้พิมพ์ชื่อโปรแกรม perl ใน browser Netscape Internet Explorer |
รับค่าเดียว |
สั่ง perl ประมวลผล เช่น http://www.thaiall.com/perl/plurl01.pl?test http://www.thaiall.com/perl/plurl01.pl?enthusiasm |
ตัวอย่างคำสั่ง | อธิบายคำสั่ง |
#!/usr/local/bin/perl $buffer = $ENV{"QUERY_STRING"}; $buffer =~ tr/+/ /; $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $buffer =~ s/~!/~!/g; print "Content-type: text/html\n\n"; print $buffer; |
ตัวอย่างนี้แสดงค่าอย่างง่าย ๆ แต่จะเห็นหลายบรรทัดยุ่งเหยิง นั่นคือการแปลงค่าที่รับเข้ามาให้ถูกต้อง บรรทัดที่ 2 คือรับค่าที่อยู่หลังเครื่องหมาย ? บรรทัดที่ 3 - 5 ทำหน้าที่แปลงค่าให้ถูกต้อง ผลของโปรแกรมนี้จะพิมพ์ test คำเดียว |
รับหลายค่า |
สั่ง perl ประมวลผล เช่น http://www.thaiall.com/perl/plurl02.pl?test&jonny http://www.thaiall.com/perl/plurl02.pl?dog&cat |
ตัวอย่างคำสั่ง | อธิบายคำสั่ง |
#!/usr/local/bin/perl $buffer = $ENV{"QUERY_STRING"}; $buffer =~ tr/+/ /; $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $buffer =~ s/~!/~!/g; print "Content-type: text/html\n\n"; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { print $pair,"<br>"; } |
ตัวอย่างนี้แสดงการค่าที่รับเข้ามา แต่แบ่งด้วยเครื่องหมาย & ผลที่ได้จากตัวอย่างคือ test jonny คำสั่ง split เป็นการแยกหลายค่าออกจากกัน หากตัวรับขึ้นต้นด้วย @ จะเป็นการใช้ array มารับ หากตัวรับขึ้นต้นด้วย $ จะเป็นการนับจำนวน ว่ามีกี่ตัว |
รับค่าพร้อมชื่อตัวแปร |
สั่ง perl ประมวลผล เช่น http://www.thaiall.com/perl/plurl03.pl?t1=test&t2=jonny http://www.thaiall.com/perl/plurl03.pl?name=tom&surname=nataree |
ตัวอย่างคำสั่ง | อธิบายคำสั่ง |
#!/usr/local/bin/perl $buffer = $ENV{"QUERY_STRING"}; $buffer =~ tr/+/ /; $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $buffer =~ s/~!/~!/g; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $FORM{$name} = $value; } print "Content-type: text/html\n\n"; print 't1 =' , $FORM{'t1'},'<br>'; print 't2 =' , $FORM{'t2'}; |
จากตัวอย่างนี้ทำให้เข้าใจว่า การส่งค่าผ่าน url อาศัยชื่อของตัวแปรเป็นหลัก ไม่ได้ใช้ตำแหน่งของตัวแปร จึงมีความยืดหยุ่นเป็นอย่างมาก ตัวอย่างนี้แสดงผล 2 บรรทัด คือ t1 = test t2 = jonny คำสั่ง foreach ในตัวอย่างนี้ฉลาดมาก เพราะจะนำค่าจาก array @pairs ทีละตัวส่งให้ $pair แล้วจึงนำ $pair ไปแยกว่าตัวใดเป็นค่า ตัวใดเป็นชื่อ แล้วส่งให้ $FORM{} จดจำ เพื่อเรียกใช้อย่างสะดวกภายหลัง |
รับค่าพร้อมชื่อตัวแปร แยกตัวแปรหลายแบบ |
สั่ง perl ประมวลผล เช่น http://www.thaiall.com/perl/plurl04.pl?t1=สมปอง&t2=นานาลีลา http://www.thaiall.com/perl/plurl04.pl?name=แหว&surname=นิก้า |
ตัวอย่างคำสั่ง | อธิบายคำสั่ง |
#!/usr/local/bin/perl $buffer = $ENV{"QUERY_STRING"}; print "Content-type: text/html\n\n"; print $buffer; print "<hr>"; @keep04 = split '&',$buffer; print $keep04[0],"<br>"; print $keep04[1],"<br>"; print "<hr>"; @keephaha = split '=',$keep04[0]; print $keephaha[1],"<br>"; @keephaha = split '=',$keep04[1]; print $keephaha[1],"<br>"; print "<hr>"; ($name, $value) = split(/=/, $keep04[0]); print $value,"<br>"; ($name, $value) = split(/=/, $keep04[1]); print $value,"<br>"; |
ถ้าสังเกตุให้ดี ตัวอย่างนี้ไม่มีคำสั่งแปลงค่า ซึ่งประกอบด้วย 3 บรรทัดแปลก ๆ เพราะไม่จำเป็น เนื่องจากการส่งค่า ส่งกันตรง ๆ ไม่จำเป็นต้องแปลงกลับ นั่นหมายความว่า ตัวอย่างใน บทนี้ไม่จำเป็นต้องแปลงค่าใด แต่ที่เขียนไป เพื่อให้เรียนรู้ก่อนจำเป็นต้องใช้ในบทอื่น ตัวอย่างนี้แสดงการใช้ split แยก buffer 2 จังหวะ สังเกตุดูนะครับ ตัวอย่างนี้แสดงผล 7 บรรทัด กับเส้น hr 3 เส้น คือ t1=สมปอง&t2=นานาลีลา t1=สมปอง t2=นานาลีลา สมปอง นานาลีลา สมปอง นานาลีลา |
แบบฝึกหัด |
|
+ ผู้สนับสนุน + รับผู้สนับสนุน |