ภาพไม่เกี่ยวข้องกับบทความ

ผมเป็นคนหนึ่งที่เข้าไปห้อง tech ของเว็บ pantip.com ทุกวัน ตอบบ้างไม่ตอบบ้าง ขึ้นอยู่กับคำถาม และวันนี้ผมเจอกับคำถามหนึ่ง จริงๆคำถามในทำนองนี้ผมเจอที่นั่นบ่อย แต่ก็ไม่ได้เขียนแนะนำอะไรไป วันนี้เอาสักหน่อยเถอะ

ผมได้เขียนส่งค่า index.php?page=1 ครับ แล้วในหน้า index ก็เขียนโค้ดไว้ว่า ถ้า $page==1 ให้เิปิดหน้า support.php แต่ปรากฏว่า มันก็ไม่ยอมเปิดให้ครับ มันเปิดแต่หน้า index.php ให้ตลอด ซึ่งรันในเครื่องสามารถใช้งานได้ปกติ เป็น php v.5 แต่พออัพขึ้น server ก็เป้นอย่างที่บอกครับ ช่วยหน่อยครับ

เมื่อมองไปที่คำถาม สิ่งที่ท่านผู้ถามทำก็คือ ส่งค่าตัวแปร get ชื่อ page มีค่าเท่ากับ 1 กลับหน้าเดิม แล้วก็มีส่วนของโค้ด ที่คอยเช็กตัวแปร ถ้าเท่ากับ 1 ก็ให้เปิดหน้า support

ประเด็นที่ผมจะพูด คือตรงนี้ $page==1 ตัวแปรตัวนี้เป็นตัวแปร get แต่ท่านเจ้าของคำถามเขียนเหมือนตัวแปรธรรมดา จริงๆแล้ว php อนุญาติให้เขียนในลักษณะนี้ได้ แต่ php.ini จะต้องเซ็ต register_global = on ไว้ คือหมายถึง ให้สามารถเข้าถึงตัวแปร get หรือ post โดยใช้ลักษณะการเขียนแบบตัวแปรธรรมดา

ซึ่งการเขียนลักษณะนี้เป็นสิ่งที่ไม่ควรทำเป็นอย่างยิ่ง เพราะ
1. โค้ดดูไม่ออกเลยว่า มันเป็นตัวแปรธรรมดา หรือตัวแปรที่เกิดจากการส่งค่าผ่านฟอร์ม หรือผ่าน url ทำให้ตีความโค้ดยาก
2. บางโฮสต์ไม่ซัพพอร์ต โฮสต์บางโฮสต์นั้น เขาจะตั้งค่า register_global = off ไว้
3. จะมีปัญหาแน่นอนในอนาคต เมื่อ php เวอร์ชั่น 6 เพราะ register_global จะเท่ากับ off มาเลย และไม่สามารถปรับแก้ได้

แล้วทีนี้เราควรจะเขียนอย่างไร ?
1. ถ้าเป็นตัวแปร get เราก็เขียนอย่างนี้ $_GET[‘page’]
2. ถ้าเป็นตัวแปร post เราก็เขียนอย่างนี้ $_POST[‘page’]
3. ถ้าเป็นตัวแปร session เราก็เขียนอย่างนี้ $_SESSION[‘page’]
4. ถ้าเป็นตัวแปร environment เราก็เขียนอย่างนี้ $_SERVER[‘REMOTE_ADDR’]

ประโยชน์ที่จะได้รับ
1. ดูตัวแปรแล้วรู้ถึงที่มาของมันเลย
2. ซัพพอร์ตทุกโฮสต์
3. อนาคตหมดปัญหา

เห็นอย่างนี้แล้ว เลิกเสียเถอะครับ กับพฤติกรรมการใช้ตัวแปรแบบเดิมๆ