การรับข้อมูลที่ส่งมาจากฟอร์ม Form นั้น มีวิธีการส่งอยู่ 2 แบบนั่นคือ แบบ GET กับแบบ POST แต่เป็นวิธีการส่งข้อมูลให้กับ server ทั้งคู่ดังนั้นเมื่อเริ่มศึกษาการเขียนเว็บไซต์คนส่วนใหญ่จะสับสนถึงความแตกต่างในการใช้งานระหว่าง GET และ POST ว่าควรใช้งานในลักษณะใดซึ่งสามารถสรุปได้สั้นๆ ดังนี้
- GET ใช้สำหรับรับการดึงข้อมูลจากฐานข้อมูลของเว็บไซต์มาแสดงผล
- POST ใช้สำหรับการเพิ่มหรือเปลี่ยนแปลงข้อมูลต่างๆที่อยู่ในฐานข้อมูลของเว็บไซต์
นอกจากนี้ยังมีรายละเอียดปลีกย่อยต่างๆเพิ่มเติมที่จะกล่าวถึงต่อไปดังนี้
เมื่อไรถึงต้องใช้ GET
หากกระบวนการทำงานของฟอร์มถูกเรียกใช้งานซ้ำๆแล้วแน่ใจว่าเว็บไซต์ยังคงให้ผลลัพธ์เหมือนเดิมแล้วให้ใช้ GET เนื่องจากไม่ส่งผลกับการค้นหาข้อมูลในฐานข้อมูลเนื่องจากข้อมูลที่ถูกเรียกใช้จะถูกเก็บไว้ในแคชของบราวเซอร์นั่นเอง
ลักษณะเฉพาะของ GET:
- ใช้ GET กับข้อมูลที่ปลอดภัยกับเว็บไซต์เช่น คำที่ใช้ในการค้นหาข้อมูลบนเว็บไซต์
- การส่งแบบ GET สามารถเก็บไว้ในแคช (Cache) ของบราวเซอร์ได้พื่อลดจำนวนข้อมูลที่ใช้ในการติดต่อกับเซอร์เวอร์ดังนี้ เมื่อมีการเรียกใช้หน้าเว็บเพจตัวบราวเซอร์จะทำการตรวจสอบว่าเคยมีการเรียกข้อมูลนี้มาก่อนหน้าหรือไม่ ถ้ามีการเรียกใช้มาแล้วบราวเซอร์จะทำการเรียกเอาข้อมูลที่ถูกเรียกมาแล้วจากแคช ของบราวเซอร์นั้นๆ ตัวอย่างเช่น IE ข้อมูลแคชจะอยู่ใน Temporary Internet Files มาแสดงแทนโดยที่ไม่ต้องไปร้องขอเอาจากเซอร์เวอร์อีก ซึ่งทำให้หน้าเว็บเพจนั้นๆสามารถทำงานได้รวดเร็วขึ้น
- การส่งแบบ GET จะถูกเก็บไว้ใน browser history ซึ่งหมายถึงผู้ใช้สามารถเข้าถึงหน้าเว็บเพจได้จากหน้าประวัติการเข้าชมของเว็บบราวเซอร์ตัวนั้นๆ
- การส่งแบบ GET ทำให้ผู้ใช้สามารถทำ bookmark ได้ซึ่งถือว่าเป็นผลดีกับเว็บไซต์เนื่องจากช่วยให้ผู้เข้าชมสามารถสร้างทางลัดในการเข้าเว็บไซต์ของตัวเองได้
- การส่งแบบ GET ทำให้ผู้ใช้สามารถเจาะการทำงานในหน้านั้นได้เนื่องจากมองเห็นพารามิเตอร์ต่างๆปรากฏออกมาที่ Address bar ดังนั้นสำหรับข้อมูลที่มีความสำคัญต่อเว็บไซต์จะไม่เลือกใช้การใช้งาน GET แต่จะใช้ POST แทน ตัวอย่างเช่นเมื่อมีการใช้ GET เพื่อส่งข้อมูลไปยังหน้าต่อไปจากการกรอกข้อมูลใน form ข้อมูลทั้งหมดจะถูกส่งไปเป็น URL เดียวทำให้สามารถใช้งานผ่าน hyperlink หรือ bookmark ได้โดยไม่ต้องกรอกฟอร์มทุกครั้ง
ตัวอย่างการส่งและรับข้อมูลด้วย GET
หน้ากรอกข้อมูลด้วย form
ในการส่งข้อมูลแบบ GET นั้น Form ที่ส่งข้อมูลมา จะต้องกำหนดด้วย method=”get”
<
form
action
=
"get_target.php"
method
=
"get"
>
Name: <
input
type
=
"text"
name
=
"name"
/>
Age: <
input
type
=
"text"
name
=
"surname"
/>
<
input
type
=
"submit"
/>
</
form
>
หน้ารับข้อมูลจาก form
ไฟล์ PHP ที่รับข้อมูลที่ส่งมาจาก Form มีการกำหนด action ไปที่ไฟล์ get_target.php หมายความว่าเมื่อผู้ใช้กดปุ่ม submit แล้วข้อมูลทั้งหมดจะถูกส่งไปยังไฟล์ที่ชื่อว่า get_target.php
การรับข้อมูลแบบ GET ในภาษา PHP จะใช้ตัวแปร $_GET ในการรับข้อมูลซึ่งมีโค้ดทำงานภายในดังนี้
<?
php
Welcome <?php echo $_GET["name"]."  ". $_GET["surname"]; ?>
?>
ตัวอย่าง URL ที่ถูกส่งไปโดย GET
http://www.devxco.com/get_target.php?name=test&surname=man
เมื่อไรถึงต้องใช้ POST
เมื่อกระบวนการในการประมวลผลมีการเปลี่ยนแปลงข้อมูลในฐานข้อมูลให้เลือกใช้ POST
- ใช้ POST เมื่อข้อมูลที่ต้องการส่งมีจำนวนมาก หรือเป็นข้อมูลที่สำคัญและต้องการปกปิด หรือทำการส่งข้อมูลบนโปรโตคอล HTTPS ในบางบราวเซอร์เช่น Internet Explorer ได้กำหนดจำนวนตัวอักษรมากสุดที่สามารถส่งได้เมื่อใช้ GET ซึ่งส่งผลให้ข้อมูลที่ส่งไปถูกตัดทิ้งทำให้เกิดความผิดพลาดได้
พิจาณาในการใช้ POST เมื่อมีลักษณะการทำงานต่อไปนี้:
- ใช้ POST กับข้อมูลที่ต้องการให้เป็นความลับเช่น password
- ใช้กับข้อมูลที่ต้องการนำไปเพิ่มหรือเปลี่ยนแปลงข้อมูลในฐานข้อมูลของเว็บไซต์
- การส่งข้อความในกระทู้ จดหมายข่าว การเขียนบทความเป็นต้น
- มีการส่งข้อมูลเป็นกลุ่มเช่น ข้อมูลที่ได้จากฟอร์ม เพื่อทำการเพิ่มหรือปรับปรุงข้อมูลในฐานข้อมูล
ตัวอย่างการส่งข้อมูลแบบ POST
หน้ากรอกข้อมูลด้วย form
ในการส่งข้อมูลแบบ POST นั้น Form ที่ส่งข้อมูลมา จะต้องกำหนด method=”post”
<
form
action
=
"post_target.php"
method
=
"post"
>
Name: <
input
type
=
"text"
name
=
"name"
/>
Age: <
input
type
=
"text"
name
=
"surname"
/>
<
input
type
=
"submit"
/>
</
form
>
หน้ารับข้อมูลจาก form
ไฟล์ PHP ที่รับข้อมูลที่ส่งมาจาก Form มีการกำหนด action ไปที่ไฟล์ post_target.php หมายความว่าเมื่อผู้ใช้กดปุ่ม submit แล้วข้อมูลทั้งหมดจะถูกส่งไปยังไฟล์ที่ชื่อว่า post_target.php
การรับข้อมูลแบบ POST ในภาษา PHP จะใช้ตัวแปร $_POST ในการรับข้อมูลซึ่งมีโค้ดทำงานภายในดังนี้
<?
php
Welcome <?php echo $_POST["name"]."  ".$_POST["surname"]; ?>
?>
ตัวอย่าง URL ที่ถูกส่งไปโดย POST
http://www.devxco.com/post_target.php
จะสังเกตุได้ว่าเมื่อมีการส่งข้อมูลแบบ POST จะไม่มีพารามิเตอร์ใดๆของฟอร์มถูกแนบไปกับ URL