รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

การใช้ฟังก์ชั่น php serialize() สำหรับการส่งตัวแปลผ่านฟอร์ม ซ้อนฟอร์มหลายๆ ชั้น

    อันดับ แรก คงต้องขอเกริ่นก่อนว่า ... การส่งค่าผ่านฟอร์มนี่ ทำไปทำไม ประโยชน์คืออะไร ทำแล้วใครได้ประโยชน์ใครเสียประโยชน์ รัฐบาลจะออกมาหนุนเรื่องนี้หรือไม่ ... ซึ่งถ้าจะเล่าเป็นตัวอักษรอย่างเดียว ก็คงจะยาว (ไม่ใช่ขี้เกียจพิมพ์นะครับ กลัวจะมีคงมาติดต่อขอเอาไปทำนิยาม มันจะยุ่งยากเสียปล่าวๆ) ดังนั้นก็เลย ขอยกรูปมาประกอบคำอธิบายซักหน่อย

     

    ปกติเราส่งข้อมูลจากฟอร์ม กด submit ปุ๊บ ก็จะถูกส่งไปบันทึกลงฐานข้อมูลเลย (หรือถ้ามีการตรวจสอบข้อมูล ก็แค่เด้งกลับมาหน้าเดิม) ... แต่ถ้าเกิดกรณีอย่าง กรอกข้อมูลหน้าแรก ไปที่หน้าที่สอง (ยังไม่ได้บันทึกข้อมูลหน้าแรกนะ พักไว้ก่อน) จากนั้นก็ไปหน้าที่สาม อาจะไปหน้าที่ 4 - 5 - 6 ... เรื่อยๆ ก็ได้ ถ้ายังไม่หนำใจ



    ถ้าเกิด กรณีนี้ทำไงดี เบื้องต้นอาจจะคือจะผ่านค่าด้วยการใช้ input แบบ hidden ที่ฟอร์มต่อๆ ไปเรื่อยๆ ... สี่ห้าตัว คงไม่เป็นอะไร แต่ถ้ามีการรับค่าข้อมูล หลายสิบตัว ขึ้นมาล่ะ hidden ไม่ยาวเฟื้อยเลยหรือ ...


    Serialize
    เป็น ฟังก์ชั่นของ php ครับ ... ใช่ครับ นี่เราพูดถึงภาษา php กัน ไม่ใช่ Java หรือ C# หรือ เยอรมัน อะไรทั้งสิ้น ... ฟังก์ชั่นตัวนี้ถูกบรรจุมาให้แล้ว ตั้งแต่ php เวอร์ชั่น 3 รุ่นไดโนเสาร์เคี้ยวหมาก ... แต่ผมเพิ่งจะไปเจอมัน ... อยู่ในกะลาซะนาน ไม่นึกว่าจะมีฟังก์ชั่นสะดวกสบายอะไรเยี่ยงนี้มาให้ด้วย (ทำไมไม่บอกกันหน่อยว้า)
    พูดมาซะยืดยาว ผมว่าท่านผู้อ่านด่าบุพการีผมไปหลายรายแล้วแหงๆ เข้าเรื่องเลยแล้วกัน ...


    ขั้นแรกคือ จากเดิมเราส่งค่าจากฟอร์มไปยังดาวอังคาร เราก็จะใช้แท็ก input ใช่หรือไม่ ... ซึ่งในนั้นก็จะมีค่าสำคัญๆ อันประกอบไปด้วย name และ value ซึ่งผมไม่บอกหรอกว่า ไว้ทำอะไร คงรู้ๆ กันอยู่แล้ว ... ทีนี้สิ่งที่ต้องปรับหน่อยก็คือ ชื่อ name ที่จะใส่ลงไป จากเดิมเป็นชื่อตัวแปลธรรมดา ทีนี้เราก็ไฮโซมาอีกนิด โดยการส่งไปเป็น Array ซะเลย ดังตัวอย่างนี้ ...

     

    1 <input type="text" name="_data1[data_filed1]" value="" />


    จะเห็น ได้ว่าการใส่ name ของมันเป็นแบบ Array คือมีการคร่อมชื่อสมาชิก Array ด้วย [ ] ... ซึ่งเมื่อ submit ฟอร์มนี้ไปยังตัวรับข้อมูล (ดาวอังคาร) ... ก็จะบังเกิดตัวแปลของ php ที่ชื่อว่า $_data1['data_filed1'] เอาไว้ไปทำพิธีกรรมต่อไป ...


    แต่ว่า ถ้าส่ง มาช่องเดียวแบบนี้คงไม่จำเป็นต้องยัดใส่ Array แน่นอน ... นี่แสดงว่า มันต้องมีแบบนี้อีกเป็นแผง โดนที่ชื่อสมาชิกไม่เหมือนกัน ... แต่ก็สรุปได้ว่า _data1 นี่เป็น Array ภายในประกอบไปด้วย สมาชิกและค่ามากมาย


    เมื่อ เราส่งค่าแบบนี้จากฟอร์ม 1 ไปยังฟอร์ม 2 ... ในฟอร์มที่สอง มันก็ยังเห็นค่า _data1 เป็น Array อยู่เอามาใช้งานได้ แต่ถ้าเราจะผ่านค่าจากฟอร์มที่ 2 ไปยังฟอร์มที่ 3 ล่ะ จะส่งไปยังไงเนี่ย ... ยัดลง hidden ตรงๆ ไปโผล่ฟอร์มที่ 3 เราจะได้ค่า _data1 = "Array" (แปลเป็นภาษาไทยได้ว่า ตัวแปล _data1 เก็บคำว่า Array) แหง ...


    ตรงนี้ แหล่ะครับที่ serialize มามีประโยชน์ ... เวลาเอามาใช้ เราก็เอาตัวแปลที่ต้องการผ่านค่า (แนะนำว่าเป็น Array) มาเข้าฟังก์ชั่น serialize เสียก่อน ... ตัวอย่าง ...

     

    1 <input type="hidden" name="_data1" value="<?=serialize($_data1);?>" />


    ดังนี้ แล ... ถ้าเรา view source ดูมันก็จะได้ค่าเป็น string ยาวๆ ที่พอจะอ่านรู้เรื่องอยู่บ้าง ... (ตัวอย่างไม่มี อยากรู้ลองทำแล้วกด view source ดูเอาเอง) ... ทีนี้ค่าของฟอร์ม 1 ก็จะอยู่ในฟอร์ม 2 ในรูปแบบ serialize เรียบร้อยแล้ว ... พร้อมที่จะส่งไปยังฟอร์ม 3 ไปพร้อมกับข้อมูลของฟอร์ม 2 ... (งงมั้ยพิมพ์ไปงงไป)


    จากนั้น เมื่อเรา submit ฟอร์ม 2 ไปยังฟอร์ม 3 ... เราก็จะได้ข้อมูลของฟอร์มสอง (ซึ่งจะเป็น Array ด้วยหรือป่าวก็เรื่องของท่าน) ... กับตัวแปลชื่อ _data1 เป็นชนิด string ...


    จากนั้นเราต้องทำการแปลงข้อมูลกลับมาให้อยู่ในรูปแบบ Array คืนเพื่อเอาไปใช้งานต่อไป ... ดังนี้

     

    1 $_data1 = unserialize($_data1);


    คราวนี้เราก็จะได้ตัวแปล _data1 อยู่ในรูปแบบ Array เหมือนเดิมแล้วครับ เอาไปใช้งานได้ตามสะดวก ...


    หรือถ้ายังอยากจะผ่านค่าไปยังฟอร์ม 4, 5, 6 ... เรื่อยๆ ก็ยังไม่ต้องแปลงกลับก็ได้ ก็ส่ง string ยาวๆ ไปเรื่อยๆ ... แต่อย่าลืมแปลงค่าของฟอร์ม 2, 3 ... ให้อยู่ในรูปแบบ serialize ล่ะครับ มันจะได้จัดการข้อมูลได้ง่ายๆ