แก้ปัญหาPHP อัพขึ้น Host แล้วใช้งานไม่ได้ ไม่ส่งค่าตัวแปรแต่ที่เครื่อง localhost ใช้ได้

แก้ปัญหาPHP อัพขึ้น Host แล้วใช้งานไม่ได้ ไม่ส่งค่าตัวแปรแต่ที่เครื่อง localhost ใช้ได้

PHP CODE FATHER โปรแกรมช่วยสร้างโค้ด โปรเจ็ค PHP+MySQL+Boostrap ใช้งานง่าย ๆ


สำหรับปัญหาเวลาเขียนโค้ด โปรเจ็คที่เครื่องตัวเอง (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 หรือ เขียนโค้ดเพิ่มเติมแต่อย่างใด เพียงแค่เอาไปวางไว้ในหน้า หรือไฟล์ที่มีการเรียกใช้ทุกหน้า ก็เรียบร้อยแล้วครับ ***

ย้อนกลับ กลับหน้าแรก