ขั้นตอนแก้ปัญหา - สั่งพิมพ์ PDF แล้วเกิดข้อความแจ้งเตือนข้อผิดพลาด TCPDF error Line Number: 18650

โดย CyberMAN

สั่งพิมพ์เอกสาร PDF ด้วย TCPDF แล้วปรากฏข้อความแจ้ง Error

Message: Undefined offset: 132
Filename: tcpdf/tcpdf.php
Line Number: 18650


ความผิดปกติก็คือ สามารถพิมพ์เอกสารได้ปกติ
แต่มีอยู่รายการเดียว ที่ไม่สามารถพิมพ์ได้ ดังนั้นจึงโฟกัสไปที่ข้อมูลในเอกสารชุดนั้น



เริ่มต้นจากการค้นหาจุดที่เกิดข้อผิดพลาด เนื่องจากไม่มีแจ้งว่าโค้ดบรรทัดไหนที่เราเขียนผิดพลาด แต่ข้อความแจ้งถึงส่วนข้างในไลบรารี่ TCPDF ที่เรานำมาใช้เท่านั้น



1. echo() เท่านั้นที่จะคลี่คลายข้อสงสัย หาจุดที่คิดว่าน่าจะเกิดข้อผิดพลาด แล้ววางโค้ดไปเลย อาจจะเริ่มจาก echo 11111; จนไปถึง echo 99999;  หรือจะ echo 'AAAAAA';  ถึงจุดที่ 'ZZZZZ'; ก็ได้



2. มารันหน้าเว็บเพื่อดูผลลัพธ์กัน ว่าข้อความที่ echo ออกมาจะโผล่ตรงไหนบ้าง ในตัวอย่างข้อความ error ปรากฏขึ้นระหว่าง 5 กับ 6  ให้กลับไปดูโค้ดที่ตำแหน่งช่วงนั้น และปรับสโคปให้เหลือแคบที่สุดจนเจอต้นตอ


3. เมื่อรู้ว่าเกิดจาก writHTMLCell() ก็มาดูว่าอะไรที่ถูกเขียนออกมาแล้วทำให้ PDF ของเราทำงานผิดพลาด แต่ก่อนจะลัดไปถึงขั้นตอนที่ 7 เราลองมาไล่ดูใน Google กันก่อน



4. ลองคัดลอกข้อความแจ้ง error มาทั้งหมดแล้ววางไปใน Google แล้วกดค้นหาดูก่อน และปรากฏว่าไม่เจอสิ่งที่ค้นหา อาจจะเพราะคีย์เวิร์ดยังไม่โดน



5. งั้นเรามาทำให้แคบลงอีกนิด โดยเอาบรรทัดที่ระบุว่าเป็น tcpdf และ บรรทัดที่ error ในไลบรารี่ก็พอ


6. คำตอบที่ได้ก็ทำให้กระจ่างขึ้นมาอีกนิดว่าเป็นเพราะ HTML ของเรามีปัญหา เอาล่ะมาดูกันเลยว่ามันมีอะไรบ้างที่ทำให้เกิดข้อผิดพลาดในข้อมูลของเรา
7. ใช้คำสั่งแสดงผล echo $html ที่เรารับค่าจาก View ของ Controller ที่เขียนสร้าง PDF ส่วนนี้มาดูกันว่าพ่นอะไรออกมาบ้าง



8. เมื่อตรวจสอบดูก็พบว่า มีเครื่องหมายวงเล็บ < ซึ่งเป็น HTML TAG นั่นเองที่เป็นสาเหตุของข้อผิดพลาดครั้งนี้


9. ทำการแทนที่ HTML TAG ให้เป้นรหัสพิเศษที่แสดงผลเป็นวงเล็บในแบบเดียวกัน



10.จะได้รหัสที่ต้องการมาสองตัว คือ  &lt;  และ &gt;  (สังเกตว่าด้านบนมีอักขระพิเศษอีก 3 ตัวที่ต้องแทนที่ด้วย ซึ่งถ้าไม่แทนที่ก็อาจจะจะเกิด error ได้เช่นกัน)


11.สร้างคำสั่งแทนที่ข้อความด้วย str_replace()


 12. มารันหน้าเว็บดูผลลัพธ์กันอีกครั้ง ก็จะพบว่า error หายไปแล้วจ้า



 ขอให้ทุกท่านสนุกกับการเขียนโปรแกรม
และมีสติกับการแก้บั๊กกันต่อไป สวัสดีครับ



:: อ้างอิง ::

TCPDF returning error while generating table structure to print

https://stackoverflow.com/questions/26159707/tcpdf-returning-error-while-generating-table-structure-to-print

htmlspecialchars
http://php.net/manual/en/function.htmlspecialchars.php

TCPDF HTML Tags <>Confusion
https://stackoverflow.com/questions/8585807/tcpdf-html-tags-confusion




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/