การส่งค่าผ่าน Form หน้าเว็บ แบบ POST กับ GET

การส่งค่าผ่าน Form หน้าเว็บ แบบ POST กับ GET

การสั่งข้อมูลผ่าน form จะมีรูปแบบหลักๆคือ แบบ post และแบบ get มาดูความแตกต่าง และการทำงานของสองแบบนี้ ว่าเป็นอย่างไร ต่างกันตรงไหน

จากบทความก่อน ที่พูดถึงเรื่อง form input แล้ววิธีการส่งที่จะส่งแบบ GET หรือ POST นะครับ ก็จะมาแฉแบบละเอียดถึงการส่งแต่ละแบบ และประโยชน์ด้วยครับ

เริ่มต้นจาก แบบ GET แบบ GET นั้น เมื่อเราส่งไปที่หน้ารับแล้ว หน้ารับจะมี?แล้วมีตัวแปรโผล่ขึ้นมา แล้วตามด้วยอะไรเต็มไปหมด เช่น ผมค้น www.google.co.th ด้วยคำว่า meewebfree จะได้ URL ดังนี้ http://www.google.co.th/search?hl=th&q=meewebfree&อะไรอีกมากมายยยยย ลองดูนะครับ hl=th และ q=meewebfree ทั้งสองอันนี้ มันมีความหมายนะครับ คือ หมายความว่า ตัวแปร hl ให้มีค่า th และตัวแปร q ให้มีค่า meewebfree ซึ่ง ในหน้าประมวลผลนั้น สามารถดึงค่านี้เข้าไปประมวลผลได้นะครับ วิธีการก็คือ เขียน

  1. $ชื่อตัวแปรที่สร้างใหม่ = $_GET['ชื่อตัวแปรที่ส่งมา เช่น hl'];

?

โค้ดรับค่า form แบบ get

จากบทความเก่าที่พูดถึงเรื่อง form การรับข้อมูล ผมก็ได้เขียน การดึงค่า แบบ GET เอาไว้ด้วย (โหลดไฟล์ที่อยู่ในบทความเก่านั้นมาครับ รันไฟล์ที่มีชื่อ input.php)

สังเกตบรรทัดที่ 2 ครับ บรรทัดนั้นล่ะครับ ที่เป็นการดึงค่าแบบ GET ออกมาแสดงครับ ซึ่ง ผมจะรันไฟล์นี้ด้วย URL input.php?key=สวัสดีครับ เรามาดูผลที่แสดงกันครับ

โค้ดแสดงผล form แบบ GET

หน้าเว็บก็จะแสดงข้อความ สวัสดีครับ ตามที่เราส่งค่าไปเป็น URL นั้นเลย แล้วไม่ว่าเราจะเป็นเป็นอะไรก็ตาม ระบบ ก็จะแสดงผลตามนั้นนะครับ เช่น input.php?key=test ระบบก็จะแสดงว่า test ครับ

และนี่ก็คือสาเหตุหลักในความไม่ปลอดภัยของระบบ form นั่นเอง เพราะหากสังเกตุบางเว็บที่มี URL ? อะไรแบบนี้นะครับ เมื่อเราเปลี่ยนค่าที่ใส่ให้ตัวแปร เนื้อหาในหน้าเว็บก็จะเปลี่ยนไปด้วยครับ เอาตัวอย่างใกล้ๆที่สุดเลยครับ หากใช้ php-fusion นั้น เวลาเราเขียนบทความ แล้วเปิดอ่าน URL เราจะมี id=.... ใช่ใหมครับ นั่นล่ะครับ เมื่อเลขเปลี่ยน บทความก็เปลี่ยน (ลองทดสอบดูได้ครับ)

และสำหรับการส่งค่าแบบ GET นะครับ ก็เหมือนกับที่ว่าไว้ใน บทความ form การรับข้อมูล เลยครับ เพียงแต่หน้าที่ส่ง หรือหน้า start.htm นั้นเปลี่ยนโค้ดจากคำว่า POST เป็น GET ครับ

เค้าจึงมีการส่งข้อมูลอีกแบบนึง ที่ทำให้มีความปลอดภัยมากขึ้น นั่นก็ คือ แบบ POST นั่นเอง สำหรับการส่ง และรับข้อมูลแบบ POST นั้น ให้ อ่านที่บทความ form การรับข้อมูล เลยนะครับ อธิบายเอาไว้แล้ว

ซึ่งหากเราสังเกตตอนที่รันไฟล์รับและส่งค่านั้น จะเห็นว่า URL ไม่มี ?...... ใดๆเลย นั่นเป็นเพราะว่า ตัวแปรไม่ได้ถูปประกาศออกมาผ่าน URL นั่นเองครับ แต่จะมีการับส่งและใช้งานอยู่ในระบบ ( server )ครับ จึงทำให้มีความปลอดภัยจากการ hack มากขึ้นนั่นเอง......

สำหรับการเขียนการรับค่าทั้งสองแบบนั้น มีประโยชน์อีกอย่างนึงในการทำให้สามารถใช้งานตัวแปรได้อย่างถูกต้อง ในระบบ ที่ register_global = off นะครับ หลายคนมักจะมีปัญหาเรื่องนี้มาก

วิธีแก้ก็ไม่ได้ยากอะไรเลย แค่เติม $ชื่อตัวแปรที่สร้างใหม่ = $_GET['ชื่อตัวแปรที่ส่งมา เช่น hl']; ในตัวแปรที่ส่งมาแบบ get หรือเติม $ชื่อตัวแปรที่สร้างใหม่ = $_POST['ชื่อตัวแปรที่ส่งมา เช่น hl']; เช้าไปในระบบที่มีการส่งแบบ POST ก่อนการเรียกใช้งานตัวแปรก็เท่านั้นเอง เป็นอันเรียบร้อย ทั้งยังใช้งานได้กับทุกระบบอีกด้วยครับ

พยายามเขียนแบบนี้ให้ชินมือครับอย่าพยายามเรียกใช้ตัวแปรโดยที่ไม่มีการ รับ get หรือรับ post เข้ามาครับ จะเป็นการวาง bug ให้โค้ดตัวเองเปล่าๆ

ก็คงหวังว่า น่าจะนำไปประยุกต์ใช้งานกันได้นะครับ ลองดูครับ ครูที่ดีที่สุดคือการทดสอบลองทำด้วยตัวเองครับ เพราะอ่านเข้าใจ แต่ทำจริงก็อาจจะทำไม่ได้ก็ได้ครับ

พื้นฐานของฟอร์มนี้ยังเอาไปประยุกต์ตัวกัน spam ได้อีกด้วยครับ เพียงแค่เพิ่ม input ขึ้นมาอีกอันนึง แล้วส่วนที่รับค่า เราก็รับเข้ามาเพื่อเช็คเงื่อนไขว่าตรงหรือไม่ ก็เท่านั้นเองครับก็สามารถใช้งานได้แล้ว

[PRINT VERSION] เขียน: 2007-03-02 07:00:00 แก้ไข : 2007-03-02 07:00:00 อ่าน : 39262
tag : GET, POST, form ,data, input, output,variable, register_globals, รับค่าผ่าน form, สร้าง form หน้าเว็บ

Comment

Comment
BeYourCyber - 01/03/2007 23:00:00 -
ร่วมพูดคุยในหัวข้อของบทความ การส่งค่าผ่าน Form หน้าเว็บ แบบ POST กับ GET
<p>การสั่งข้อมูลผ่าน form จะมีรูปแบบหลักๆคือ แบบ post และแบบ get มาดูความแตกต่าง และการทำงานของสองแบบนี้ ว่าเป็นอย่างไร ต่างกันตรงไหน</p>