วันก่อนไปเห็นน้องค้นนึงมีปัญหาการอัพโหลดเวป คืออัพโหลดแล้ว ไม่สามารถรับค่าตัวแปลได้
โดยส่วนมากปัญหานี้แก้ได้ง่ายมากนะครับ สาเหตุมาจากการที่นักพัฒนา ตอนที่ติดตั้ง PHP เพื่อทดสอบไม่อยากเสียเวลา ในการ Config ระบบ ส่วนมาจะไป Download โปรแกรม Appserv มาใช้งาน ผมก็เป็นคนนึงที่ทำแบบนี้ อันที่จริงไม่ได้เป็นความผิดของคนทำโปรแกรมหรอกครับ แต่ ผู้ที่เอามาใช้งานจะต้องทราบรายระเอียดพื้นฐานก่อนพอสมควรในการที่จะ ลงมือ code โปรแกรม
ตัวของโปรแกรม Appserv นั้นได้ถูก Config ให้สามารถใช้งาน ฟังก์ชั้นต่างๆ
ได้ครบถ้วนทั้งหมดจึงเป็นสาเหตุที่ว่า ทำไมเวลาอัพโหลดขึ้นเวปแล้ว ไม่สามรถใช้งานได้ สิ่งมี่พบอันดับแรกเลย ส่วนมากจะเป็นผู้ที่กำลังเริ่ม PHP ใหม่ๆ ส่วนมาก หลักการเขียน code จะมาจากหนังสือ ผมสังเกตุเห็นหนั้งสือโดยส่วนมากจะไม่ค่อยอธิบายเรื่องของตัวแปลแบบ Global Scope และตัวแปลที่ Server สร้างขึ้น ส่วนนี้ก็เป็นอันนึงที่ นักพัฒนาเวปมือใหม่ส่วนมากจะเจอกัน ก็คือ เวลาที่เราอับโหลดเวปสู่ Server แล้วนั้น ไม่สามารถ ส่งค่าตัวแปลไปสู่หน้าอื่นได้ ทั้งนี้เพราะ Host ที่เราใช้บริการนั้น ไม่ได้ทำการเปิดในส่วนของ Global register เอาไว้เนื่องจากความปลอดภัยของระบบ เป็นสาเหตุให้ ระบบจะไม่สร้างตัวแปรของระบบขึ้นมาโดยอัตโนมัติ แต่เรายังคงจะยังใช้งานตัวแปลเหล่านี้ได้โดยการเรียกใช้ Array ของ String โดยพวกนี้จะเป็น Super Global
โดยปกติ หนังสือต่างที่วางขายเกลื่อนกลาดโดยทั่วไปนั้น การที่จะรับค่าจากฟอร์ม ส่วนมาก จะบอกให้ ใช้ตัวแปลชื่อเดียวกันกับ Textbox หรือ Selection นั้นๆเลย อย่างเช่น
ฟอร์ม
< input name="name" type="text" id="name" />
เวลารับค่าตัวแปลก็ จะให้ใช้ $name เลย
ตัวแปลเหล่านี้เองเป็นตัวแปรที่ระบบ สร้างขึ้น และถ้ามีการปิด
register_global จะไม่สามารถเรียกใช้งานตัวแปลเหล่านี้ได้โดยตรง

จากรู้ปเป็นไฟล์ php.ini ที่ถูก config มากับ Appserv ลองค้นหาคำว่า
register_global จะพบว่ามีการ On ไว้ แต่ถ้าเราจะทำการปิด ก็สามารถทำได้โดยการ เปลี่ยนคำวา On เป็น Off จากนั้น Save file แล้วก็ Restart Apache หรือ จะRestart เครื่องเลยก็ไม่เสียหาย เราสามารถทดสอบได้เลนะครับ
ผมได้ทำไฟลืทดสอบไว้แล้ว
ไฟล์ index.php
//
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns="http://www.w3.org/1999/xhtml">
< head>
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
< title>Untitled Document
< /head>
< body>
< p>ทดสอบ Global Variable< /p>
< form id="form1" name="form1" method="post" action="test.php">
ค่าที่จะส่ง ตัวแปลชื่อ name
< input name="name" type="text" id="name" />
< input type="submit" name="Submit" value="Submit" />
< /form>
< /body>
< /html>
//
ไฟล์ test.php
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns="http://www.w3.org/1999/xhtml">
< head>
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
< title>Untitled Document
< /head>
< body>
< ? php
echo "ทดสอบตัวแปล Global name = ".$name."< br>";
$name=$_POST["name"];
echo "ทดสอบตัวแปล Array แบบ POST name = ".$name."< br>";
$name=$_GET["name"];
echo "ทดสอบตัวแปล Array name GET = ".$name."< br>";
$name=$_REQUEST["name"];
echo "ทดสอบตัวแปล Array name REQUEST = ".$name."< br>";
?>
< /body>
< /html>
จากนั้นเราลองมาดูผลการทดลองกันนะครับ

ทดสอบส่งค่าแล้วนะครับ

ผลออกมาแล้วนะครับ
เห็นไหมครับ แถวบนสุด ใช้การรับค่าโดยระบุตัวแปลไปโดยตรง(Global) $name ผลที่ได้เป็นค่าว่างครับ
ส่วนแถวที่ 2 รับมาโดยใช้ Array String ชื่อว่า _POST Index คือ name ผลที่ได้ $_POST["name"] คือคำที่เราส่งมานะครับ
ส่วนแถวที่ 3 Array String ชื่อว่า _GET Index คือ name ผลที่ได้ คือค่าว่าง $_GET["name"] สาเหตุเพราะว่าฟอร์มของเราในการส่งค่ามานั้น มี Method เป็น post นะครับและไม่มีการ ใช้ URL ในการส่งค่าเช่น
www.xxx.com?name=phpnumber1 ในรูปแบบนี้ถือเป็นการ get ด้วยนะครับ
ส่วนอันสุดท้ายเป็น REQUEST
REQUEST จะสามารถรับค่าได้ทั้ง POST และ GET แต่มีข้อแม้ว่าจะต้องผ่าน form เท่านั้นนะครับ www.xxx.com?name=phpno1 แบบนี้จะไม่ถือว่าไม่เป็น REQUEST นะครับ