เมื่อเพจไม่ทำงานตามต้องการ

เวลาผ่านไปหลังจากออกแบบเพจ เขียนโค้ด มาครึ่งวัน เมื่อจะทดสอบ กลับพบว่าเพจไม่ทำงานตามที่หวังครับ Error มั่งแหละ ไม่บันทึกลงฐานข้อมูล หรืออะไรอื่นๆอีกมากมาย ที่ทุกๆ คนคงต้องเคยเจอ แต่ที่ร้ายกว่าคือหาที่ผิดไม่ได้ครับ

เมื่อเกิด Error เราจะแก้ปัญหาได้ยังไงบ้าง
1. ดูจาก Error ที่เพจบอกครับ เช่น ลอง run code นี้
1: <?php
2:   $f = fopen( "f://xxx", "ab");

ขึ้น Error ซะนี่ Warning: fopen(f://xxx): failed to open stream: No such file or directory in c:\appserv\www\_untitle.php on line 2

ดูจากบรรทัดเลย on line 2 ก็บรรทัดที่ 2 ในหน้า _untitle.php ดังนั้นโปรแกรมออกแบบเพจ ควรบอกเลขบรรทัดได้ จะได้ตามไปถูก ถ้าดูที่โค้ด แล้วเห็นว่าผิดตรงไหน ก็แก้ซะ จากโค้ดจะเห็นว่าก็เขียนถูกหมดนี่หว่า ถ้างั้นก็มาดูความหมายของ Error ต่อ Warning: fopen(f://xxx) หมายความว่า Error ที่ฟังก์ชั่นนี้แหละ จากโค้ดก็เห็นอีกแหละ ว่าเขียนฟังก์ชั่นถูกต้อง งั้นก็ต้องมาดูคำอธิบายชนิดของ Error failed to open stream: No such file or directory ต้องแปลกันหน่อยแล้ว ถ้าภาษาอังกฤษไม่แข็งแรงก็ต้องหัดเปิด Dict กันแหละ จาก Error มันบอกว่า มันไม่สามารถเปิดไฟล์ที่กำหนดมาให้ได้ครับ f://xxx ซึ่งอาจหมายความว่า file ไม่มีอยู่จริง หรือไฟล์อ่านไม่ได้ หรืออะไรก็ได้ ขึ้นอยู่กับข้อกำหนดของฟังก์ชั่นที่เรียกครับ

2. Debug ข้อความหรือตัวแปรที่ใช้ภายในเพจครับ เช่น Submit แล้วข้อมูลไม่ถูกจัดเก็บ
<?php
   $user = $_POST['user'];
   -----
   -----
   $sql = "INSERT INTO `xxx` ( `user` ) VALUES ( '$user' )";

เมื่อบันทึกลงฐานข้อมูลแล้วกลับไม่พบว่ามีชื่อ User ซึ่งอาจเกิดจากการที่ไม่มีค่าส่งมาก็ได้ วิธีตรวจสอบด้วยการ debug โดยการ echo มาดู เช่น
<?php
  // debug ค่าที่ส่งมาจากการ POST
   print_r($_POST);
   $user = $_POST['user'];
   -----
   -----
   $sql = "INSERT INTO `xxx` ( `user` ) VALUES ( '$user' )";
  // debug query ให้นำผลลัพท์นี้ไปทดสอบบน phpMyAdmin
  // การ debug ต้องทำหลังจากใส่ตัวแปรต่างๆแล้ว
   echo $sql ."<br />";

เราก็จะรู้ได้ว่าค่าต่างๆที่ส่งมาถูกต้องหรือไม่ครับ

ข้อความที่เป็น string ก็ใช้ echo ส่วนถ้าข้อความเป็น array ก็ใช้ print_r เพื่อแสดงข้อมูลครับ

นอกจากนี้ยังอาจใช้วิธีการ View Source เพื่อดูข้อผิดพลาดได้อีกครับ ผมขอแนะนำให้ใช้ FireFox ในการทดสอบครับ เนื่องจาก FireFox สามารถทำ Highligh เพจเพียงบางส่วนแล้วแสดงซอร์สเฉพาะส่วนที่เลือกได้

ส่วน Javascript ก็ใช้เทคนิคได้คล้ายๆกัน การ Debug อาจใช้ document.Write หรือ Alert ข้อความออกมาดูก็ได้ครับ ในส่วนที่คาดว่าอาจมีข้อผิดพลาด และก็อีกเช่นกัน ผมแนะนำให้ใช้ FireFox เนื่องจาก FireFox สามารถแจ้งบรรทัดที่ผิดพลาดของ Javascript และยังพาไปยังบรรทัดนั้นได้

และอีกเรื่องนึง MySQL ไม่ทำตามที่ต้องการ หรือไม่รู้จะเขียนคำสั่งยังไง หากเราพบว่า ข้อความที่เรา Debug ได้มาเป็นข้อความที่เราต้องการแล้ว ความผิดพลาดอาจเกิดจากใช้คำสั่งผิดพลาด หรือผิดข้อกำหนดของ MySQL ได้ การตรวจสอบข้อผิดพลาดของ MySQL ง่ายๆก็โดยการเอาโค้ดที่ Debug ได้ไปใส่ให้กับ Query ของ phpMyAdmin ดูเลยหากทำได้ ข้อผิดพลาดก็จะอยู่หลังบรรทัดที่ Debug หากทำไม่ได้ก็ให้ลองกระทำคำสั่งบน phpMyAdmin ให้ได้ผลลัพท์ตามต้องการดูเลยแล้วดูโค้ดที่ได้ว่าเขาเขียนยังไงแล้วก็เอามาใส่ให้เว็บเราเป็นอันเสร็จ
ผู้เขียน goragod โพสต์เมื่อ 01 เม.ย. 2551 เปิดดู 6,720 ป้ายกำกับ debugPHP
^