สำหรับปัญหาเวลาเขียนโค้ด โปรเจ็คที่เครื่องตัวเอง (localhost หรือ 127.0.0.1) โค้ดรันได้ ทำงานได้ปรกติ แต่พออัพขึ้น Server หรือ Host จริงกลับทำอะไรไม่ได้เลย ไม่ว่าจะเป็นเพิ่มข้อมูล ลบ แก้ไข มีหลาย ๆ คนที่ถามเข้ามา ผมก็ตอบไปเหมือน ๆ กันทุกคน ก็เลยถือโอกาสเขียนเป็นบทความไว้ให้เลย เผื่อจะมีคนถามอีก จะได้เข้ามาดูได้เลย
ปัญหา ที่พอจะสรุปได้ก็คือ ไม่ส่งค่าตัวแปร นั่นเอง
ส่วนสาเหตุ หรือ วิธีแก้ไขนั้น ก็ลองดูตามนี้เลยครับ
ใน php.ini
ถ้า register_global เป็น on
ลองเข้าไปดูได้ใน Start>Programs>Appserv>Configuration Server>PHP Edit the php.ini Configuration File แล้วค้นหา register_globals ดูครับ จะเห็นว่าที่เครื่องเรามันเปิดอยู่ แบบนี้
register_globals = On
มันจึงสามารถส่งค่าผ่านตัวแปร มาได้เลย
***************************************************************
แต่ถ้า register_global เป็น off
ก็มีวิธีแก้ไขอยู่เหมือนกัน แต่อาจจะยุ่งยากสักหน่อย เพราะเราต้องไปไล่แก้ไขโค้ด ตามด้านล่างนี้ครับ
$_POST["ตัวแปร"] หรือ $HTTP_POST_VARS["ตัวแปร"] ในการส่งค่าแบบ POST
$_GET["ตัวแปร"] หรือ $HTTP_GET_VARS["ตัวแปร"] ในการส่งค่าแบบ GET
ตัวอย่าง เช่น
ที่ทำไว้เป็นแบบนี้ (Befor)
$sql="Insert Into Student Set Std_id='".$Std_id."',Std_Name='".$Std_Name."' "; เอาแค่นี้พอนะครับ
ก็แก้ไขเป็นแบบนี้ (After)
$sql="Insert Into Student Set Std_id='".$_GET["Std_id"]."',Std_Name='".$_GET["Std_Name"]."' ";
สรุปแนวทาง หรือ วิธีแก้ไข
1. ให้ทาง server ทำการเปิดการใช้งาน register_global ให้เรา
2. เราแก้ไขโค้ดเอง เช่น จาก $s_id ก็เปลี่ยนเป็น $_GET["s_id"]; เป็นต้น (ตอนรับค่าตัวแปร ก่อนเอาไปตรวจสอบ หรือ เพิ่มเข้าดาต้าเบสนะครับ)
3. หรือเอาโค้ดด้านล่างนี้ไปใส่ไว้ในหน้าที่ต้องการได้เลยครับ
// Convert Variable Array To Variable
while(list($xVarName, $xVarvalue) = each($_GET)) {
${$xVarName} = $xVarvalue;
}
while(list($xVarName, $xVarvalue) = each($_POST)) {
${$xVarName} = $xVarvalue;
}
while(list($xVarName, $xVarvalue) = each($_FILES)) {
${$xVarName."_name"} = $xVarvalue['name'];
${$xVarName."_type"} = $xVarvalue['type'];
${$xVarName."_size"} = $xVarvalue['size'];
${$xVarName."_error"} = $xVarvalue['error'];
${$xVarName} = $xVarvalue['tmp_name'];
}
?>
*** โค้ดนี้ได้ลองแล้วนะครับ ใช้ได้ดีเลยทีเดียวไม่ต้องไปยุ่งยากเปิดใช้งาน register_global หรือ เขียนโค้ดเพิ่มเติมแต่อย่างใด เพียงแค่เอาไปวางไว้ในหน้า หรือไฟล์ที่มีการเรียกใช้ทุกหน้า ก็เรียบร้อยแล้วครับ ***