วิธีแก้ปัญหา serialize กับ unserialize ที่อยากแนะนำ by tosawat

23
Feb
1

บางครั้งที่เราใช้ function serialize ใน php เพื่อแปลงข้อมูลเป็น text ไปแล้ว แต่เมื่อจะ แปลงกลับด้วย unserialize กลับเจอ error ประมาณนี้ unserialize() [function.unserialize]: Error at offset 297 of 300 bytes โดยตัวเลขอาจจะไม่เหมือนกัน แต่ว่าโดยเนื้อหาก็เหมือนกันนั่นล่ะ
หลังจากที่หาข้อมูลอยู่นาน ก็พบได้ว่า ปัญหาที่แท้จริงแล้วก็คือ format ของ text ที่จะเอามาแปลงกลับโดยใช้ unserialize ไม่ถูกต้อง
หากเราเคยทดสอบ หรือสังเกตุจะเห็นว่า text ที่เราได้จากการแปลงโดยใช้ serialize นั้น จะมีรูปแบบที่ตายตัวครับ นั่นเป็นสาเหตุที่ว่าทำไมจึงไม่ปลอดภัยเมื่อเราเก็บข้อมูลในรูปแบบ serialize ธรรมดา และด้วยความที่เป็นรูปแบบตายตัว ดังนั้น หากมีการเปลี่ยนแปลงที่ string เพียงแค่จุดเดียวเท่านั้นก็จะทำให้เราไม่สามารถแปลงกลับโดยใช้ unserialize ได้ทันที สำหรับวิธีแก้ปัญหาที่ดีที่สุด สำหรับปัญหา unserialize() [function.unserialize]: Error at offset 297 of 300 bytes ก็คือการตรวจสอบ string โดยอาจจะทำการ echo , print_r หรืออะไรก็ได้ เพื่อหาว่าข้อมูลหรือตัวหนังสือไหน แปลก หรือเพี้ยน หรือว่ามีอะไรขาด หรือเกินจากค่าที่ควรจะเป็นหรือเปล่า
ตัวอย่างเท่าที่เคยเจอมา ก็จะมีแบบว่า จากเครื่องหมาย ” ก็เพิ่มมาเป็น \” (ถูกเติมเข้ามาในกระบวนการบันทึกลงฐานข้อมูล) หรือว่า text ที่จะเอามาแปลงนั้นไม่ครบ คือขาดไปตัวเดียวก็มี error แล้ว เป็นต้น
ดังนั้น วิธีการที่ดีที่สุดก็คือ ลองทดสอบว่า serialize แล้วดูว่าได้ค่าอะไร จากนั้น ลองเอาไปเปรียบเทียบกับค่า ที่ error ว่าหน้าตาเหมือนหรือว่าต่างกันตรงไหนอย่างไร ทำไมจึง error เท่านี้ล่ะครับ แก้ bug ได้แน่นอน

กระจกแตกก ก ก [Ai] by TAMA

13
Feb
0

มาทุบตัวหนังสือให้แตกเปรี้ยงปร้างกัน!

พิมพ์  text ขึ้นมาซักคำค่ะ

Create Outlines ให้เรียบร้อย

แล้วจัดตัวหนังสือแต่ละตัวให้เล็กใหญ่ไม่เท่ากันนะคะ

เสร็จแล้วไปที่ Object >> Expand เพื่อให้เป็นชิ้นเดียวกัน

แล้ววาดสามเหลี่ยมเป็นรอยแตกด้านบน

ประมาณนี้ค่ะ

คลิกที่สามเหลี่ยมทีละชิ้นแล้วเลือก Object >> Path >> Divide Objects Below

ค่อยๆทำไปทีละชิ้นนะคะเพราะใ่ช้คำสั่งนี้พร้อมกันหมดทุกชิ้นไม่ได้ค่า

เสร็จแล้วคลิกขวาเลือก Ungroup

จัดแจงให้ตัวหนังสือเราแตกกระจายเลยค่ะ

สวยงาม เปรี้ยงปร้าง

การดึงTextureเฉพาะจุดมาใช้งาน by nontra

31
Jan
0

การดึง Texture ส่วนที่ขาวเฉพาะพื้นที่มาใช้สำหรับงาน Photoshop ทำง่ายยิ่งกว่าปอกกล้วยให้ลิงกิน

อันดับแรกสร้างพื้นก่อนค่ะ

เลือก Texture ที่ต้องการจะใช้ อย่างภาพนี้คือต้องการใช้จุดสีขาวปิ๊งๆภายในภาพสำหรับมาใช้ในการตกแต่งค่ะ

ก่อนอื่น ปรับให้เป็นขาวดำด้วยคำสั่ง Imge > Mode > Grayscale

โปะลงไปบนพื้นที่ต้องการ เหมือนจะทำโรตี้ ก็ต้องโปะแป้งลงบนกะทะ

*ปรับ Layer Style เป็น mode  Screen จะทำให้คัดส่วนที่ขาวที่สุดขึ้นมา

ปรับ Level ของภาพ เอาตามแต่ชอบ ว่าต้องการความชัดของจุด Texture มากน้อยเ่ท่าไหน แล้วจึงเอาไปประยุกต์ใช้กับภาพต่อๆไป

Example // หลังจากปรับ Screen mode และตกแต่ง Texture ให้เหลือแต่ประกายระยิบระยับ

Example 2 /// ใช้วิธีนี้กับ Texture อื่นๆที่มีลักษณะคล้ายกันได้เช่นกัน ดังภาพที่ทำให้ตรงกลางของดอกไม้เป็นกลมเกลี้ยงประกายเหมือนดวงจันทร์

หมดเวลาสนุกกับ นุ้งมิลพาเพลิน ไว้เจอกันเดือนหน้า จบเห่ ชีวิตเมทัลค่ะ  <3

การแก้ปัญหา ScrollBar ของ Flex โผล่เมื่อใช้ CustomScrollBar จาก Catalyst by Ziah

31
Jan
0
ScrollBar ของ Flex ที่โผล่มาซ้อนกับ CustomScrollBar

ScrollBar ของ Flex ที่โผล่มาซ้อนกับ CustomScrollBar

จากการที่ใช้ Flash Catalyst สร้าง CustomScrollBar เพื่อนำมาใส่ใน Flex ทำให้เกิดปัญหาเรื่อง ScrollBar ของ Flex โผล่มาซ้ำซ้อนกับ CustomScrollBar ของเรา แม้ว่าเลื่อนไปล่างสุดก็ยังมีไอเม็มที่ยังเลยจาก CustomScrollBar ของเราอีก

เลื่อน CustomScrollBar สุดแล้วยังเห็นไอเท็มไม่ครบ

เลื่อน CustomScrollBar สุดแล้วยังเห็นไอเท็มไม่ครบ

ซึ่งวิธีแก้ที่จะเสนอในวันนี้เป็นวิธีการแก้ใน ActionScript ดังนี้ครับ

scroll3

Group ตัวอย่างที่นำมาใชเแสดงผล โดยมี id คือ groupList และจากที่เห็น dataProvider ของ List เราคือ aColvList ซึ่งเป็น ArrayList ที่ถูกกำหนดไว้ใน ActionScript แล้ว

scroll2

จากโค้ดข้างต้นเป็น mxml tag ของ CustomScrollBar ของเราซึ่งกำหนด Viewport ไว้คือ Group ที่ครอบลิสท์ไอเท็มของเราที่จะใช้

scroll4

ทีนี้มาถึงสวนที่เราใช้แก้ปัญหา ScrollBar ของ Flex ไม่ให้แสดงขึ้นมาคือการเติมส่วนที่กำหนดขนาดความสูงของ Group ของเรา ให้มีขนาดเท่ากับส่วนสูงของ Item ของเรา คูณด้วยจำนวนแถว ซึ่งอธิบายโค้ดได้ดังนี้

if(aColvList.length%5) // 5 คือจำนวนของ Item ใน 1 แถวว่ามีกี่ตัว ซึ่งเราทำการเช็คว่าจำนวนไอเท็มของเราพอดีกับแถวหรือไม่หรือมีจำนวนที่เกินมา

colvList.height = (int(aColvList.length/5)+1)*160; //ถ้ามีเกินมาซึ่งก็คือแถวสุดท้ายมี 1-4 ตัว ก็ทำการนำจำนวนไอเท็มทั้งหมดหาร 5 แล้ว +1 ก็จะได้จำนวนแถว + แถวที่เกินมาแล้วคููณกับความสูงของไอเท็มหรือแถวๆหนึ่ง ซึ่งในที่นี้คือ 160

else

colvList.height = int(aColvList.length/5)*160; //ถ้าไม่มีเกินก็ทำการหารเอาจำนวนแถวคูณกับความสูงของแถวได้เลยครับ

ที่นี้เราก็จะได้  CustomScrollBar มาใช้อย่างไม่มีปัญหาแล้วล่ะครับ

CustomScrollBar เมิ่อแก้ไขสำเร็จแล้ว

CustomScrollBar เมิ่อแก้ไขสำเร็จแล้ว

ความแตกต่างของลูป for กับ for each by dekunderkover

31
Jan
0

สำหรับตอนนี้จะไม่พูดถึงลูป for ธรรมดานะ (เราคิดว่าคุณรู้แล้ว)


มาเริ่มกันด้วยการสร้าง object ขึ้นมาก่อน var obj:Object = {'id':'1','name':'myname','description':'descccc','image_name':'name/1.png','exp_max':'7'}
เราจะใช้ข้อมูลนี้กันนะ


อธิบายสิ่งที่อยู่ใน obj กันก่อน
‘id’:'1′ คือ คีย์ที่ชื่อ id เก็บข้อมูล 1 อยู่



มาเริ่มต้นที่ for( in ) กันก่อน for(var k:String in obj){ trace(k); }
ได้ key ออกมา คือ id name description image_name และ exp_max



มาดูกันต่อที่ for each( in ) for each(var d:String in obj){ trace(d); }
ได้ data ออกมา คือ 1 myname descccc name/1.png และ 7


นำไปใช้กันให้ถูกนะคะ :)