Archive for the ‘PHP’ Category
Thursday, September 17th, 2009 |
วันนี้ได้รับคำถามจากนายนิค Flashfly มาจากทาง MSN ว่า “เราเอาไฟล์ PDF มาแสดงในหน้าเว็บไซต์ได้ไหมพี่?” ดีที่มีคนถามมาเพราะจะได้มีเรื่องเขียนลง Blog อิอิ ก็ไม่รีรอครับ มานั่งเขียนลง Blog ดีกว่า คนอื่นที่ไม่ทราบจะได้รู้และนำไปใช้ได้ มากกว่าบอกคนๆเดียว
โดยทั่วๆไปแล้วเวลาใครก็ตามที่จะแสดงไฟล์ PDF ก็มักจะใช้วิธีลิงก์ไปหาไฟล์โดยตรง เช่น
<a href=”doc.pdf” target=”_blank”>ไฟล์ PDF </a>
จะเขียนแบบนี้ซะเป็นส่วนมาก จะมีน้อยคนที่อยากเอา PDF มาแสดงหน้าเว็บไซต์ แต่ในเมื่ออยากทำก็ทำได้ครับ
การนำเอา PDF มาแสดงหน้าเว็บไซต์ ก็เหมือนๆกับการดึงเอา Flash มาแสดงนั่นแหล่ะครับ โดยสามารถนำมาวางได้ 2 แบบคือแบบที่ใช้ <embed> และอีกแบบก็คือการใช้ <object> ครับ เดี๋ยวเรามาดูในแต่ละแบบว่ามีการเขียนโค๊ดยังไงดีกว่า
<embed>
เขียนโค๊ดได้ดังนี้ <embed src=”file.pdf” mce_src=”file.pdf” width=”500″ height=”650″></embed>
ผลลัพท์ของโค๊ดนี้ก็คือการดึงเอาไฟล์ file.pdf ออกมาแสดงหน้าเว็บเลย

<object>
ก็จะมีการกำหนดรูปแบบของโค๊ดดังนี้ <object type=”application/pdf” data=”doc.pdf” width=”500″ height=”650″ ></object>
ซึ่งผลที่ได้ก็เหมือนกันครับ
ที่การนำเอาไฟล์ PDF มาแสดงผลบนหน้าเว็บไซต์แบบนี้ไม่ค่อยนิยมเพราะว่าปัญหาเรื่องของ Browser เป็นหลักครับ เพราะมันอาจจะมีปัญหากับบาง Browser ที่ไม่สามารถเปิดดูได้ หรือ เครื่องที่ไม่ได้ลง Acrobat reader ก็อาจจะเปิดไม่ได้เช่นกัน
ยังไงก็เลือกใช้เอาตามความเหมาะสมนะครับ
Posted in PHP, ความรู้ | No Comments »
Monday, September 14th, 2009 |
วันนี้ผมจะมาพูดถึงฟังก์ชั่นง่ายๆที่มีให้ใช้ใน MySQL กันบ้าง หลังจากที่ไม่ได้เขียน Blog แบบที่มาสาระมานาน วันนี้ขอเขียนหน่อย พอดีเอามาใช้กับเว็บ และ เห็นมีน้องๆและเพื่อนๆหลายๆคนถามผมมาว่า “พี่แม็คขอไอเดียการทำแบบนี้ให้หน่อยสิ” ก็เลยจัดไป
จะว่าไปฟังก์ชั่นที่ผมจะพูดถึงนี้มันก็เป็นฟังก์ชั่นมาตรฐานใน MySQL นี่แหล่ะ แต่บางคนอาจจะไม่เคยทำ แต่ไปใช้การคำนวนในรูปแบบอื่นๆแทน ซึ่งคำสั่งพวกนี้ไปหาอ่านกันได้เพิ่มเติมใน MySQL Manual ได้ครับ
ไอเดียที่มีคนถามผมมาก็คือ
- ไอเดียในการกำหนดวัน เวลา ในการแสดงข่าวสาร
- ไอเดียในการกำหนดวันหมดอายุของแบนเนอร์ต่างๆ
สมัยก่อนตอนที่ผมเขียน PHP แบบมั่วๆในแบบของผมเอง ผมก็มักจะใช้วิธีการคำนวนจากค่า TIMESTAMP แล้วเอาไปบวก ไปลบ ค่าของวินาทีต่างๆ เพื่อให้ได้ผลลัพธ์ตามที่ผมต้องการ แต่เมื่อเริ่มใช้ PHP ไปนานๆเข้าก็ได้เห็นจากใน Manual ของ MySQL ในการใช้คำสั่งในการ Query ข้อมูลเพื่อให้ได้ผลลัพธ์ในแบบที่เราต้องการ ทำให้เขียนโค๊ดได้ไวขึ้น และ แม่นยำมากยิ่งขึ้น
มาดูอันดับแรกเลยก็คือ ฟังก์ชั่นในการหาผลต่างของวันนะครับ ก็เลือกใช้ตัวนี้เลย
DATEDIFF(expr1,expr2)
โดยที่ expr1 ก็คือ ค่าวันเวลาช่วงที่ 1 และ expr2 ก็คือช่วงเวลาที่ 2 เพื่อหาความต่างของเวลา มาลองดูตัวอย่างดีกว่า
SELECT DATEDIFF(’1997-12-31 23:59:59′,’1997-12-30′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ 1 วัน
SELECT DATEDIFF(’1997-11-30 23:59:59′,’1997-12-31′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ -31 วันครับ
นำมาประยุกต์กับการใช้งานอะไร?? ก็เอามานับจำนวนวันของข้อมูลได้ เช่น กระทู้นี้ลงประกาศมากี่วันแล้ว

มาดูฟังก์ชั่นต่อไปที่อยู่ในคำถามที่มีคนถามไอเดียเกี่ยวกับว่าจะกำหนดวันที่แสดงข่าว หรือ วันหมดอายุของแบนเนอร์ จริงๆแล้วมันง่ายมากมายนัก เอาให้คนที่ไม่รู้ละกันนะครับ ไม่รู้ไอเดียแต่ละคนจะเหมือนกันไหม แต่ไอเดียผมจะเป็นแบบนี้
- กำหนดฟิลล์ขึ้นมา 1 ฟิลล์ในตารางที่เราต้องการกำหนดให้มีการกำหนดวันแสดงผลข่าว เช่นผมกำหนดชื่อฟิลล์ว่า date_show_content ซึ่งผมจะกำหนดให้เป็น DATETIME นะครับ หรือใครจะกำหนดเป็น DATE เฉยๆก็ไม่ว่ากัน
- เวลา Admin เพิ่มข่าวสาร และจะกำหนดวันที่จะแสดงก็อาจจะทำ Javascript ที่เป็นพวกสคริป DateTime Picker มาเลือกวันและเวลาในการลงประกาศ
ซึ่ง 2 ข้อนี้ก็อาจจะง่ายมากในการทำ ซึ่งผมจะไม่พูดถึง แต่สิ่งที่ผมจะพูดถึงก็คือการกำหนดแบบว่ากำหนดจำนวนวันเข้าไป เช่น เราเพิ่มข้อมูลวันนี้ แต่อยากให้มันแสดงผลในอีก 5 วันข้างหน้า เราจะเขียนแบบใด ซึ่งอาจจะเอาไปประยุกต์กับการกำหนดการหมดอายุของแบนเนอร์ได้ว่าให้แบนเนอร์นี้ลงโฆษณาได้ 7 วัน เป็นต้น
DATE_ADD และ DATE_SUB คำสั่งนี้เคยใช้กันบ้างไหม ?
สองฟังก์ชั่นนี้มีประโยชน์มากๆเลยในการหาวันข้างหน้า และ วันย้อนหลัง โดยลักษณะการเรียกใช้จะเป็นแบบนี้
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
DATE_ADD ชื่อก็บอกแล้วว่า ADD นั่นก็คือเอาเพิ่มวันแน่นอน มาดูกันว่าเป็นอย่างไร
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 SECOND);
ก็จะได้ 1998-01-01 00:00:00
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 DAY);
ก็จะได้ผลของการเพิ่มวันไป 1 วัน คือ 1998-01-01 23:59:59
DATE_SUB ก็ตรงกันข้ามครับ ก็คือหาวันย้อนหลัง
SELECT DATE_SUB(’1998-01-01 00:00:00′,INTERVAL ‘1 1:1:1′ DAY_SECOND);
ก็คือการหาวันเวลาย้อนหลัง 1 วัน 1 ชั่วโมง 1 นาที 1 วินาที ก็จะได้ผลคือ 1997-12-30 22:58:59
แนวทางในการใช้ของผมก็คือ ผมเอาไปใช้กับระบบสมาชิก VIP ในเว็บผมโดยผู้ลงโฆษณาสามารถเลือกจำนวนวันลงประกาศได้ ว่าจะลงโฆษณากี่วัน แล้วเมื่อครบวันที่กำหนดระบบก็จะไม่แสดงผลรายการโฆษณานั้นๆ ได้ตรงเวลาเปะๆครับ ลองเล่นดูนะครับ ของแบบนี้มันต้องลองเล่นดูครับ ถึงจะเข้าใจนะครับ ขอให้มีความสุขกับการเขียนโปรแกรมครับ

Posted in PHP, ความรู้ | 1 Comment »
Saturday, June 20th, 2009 |

สิ่งที่ผมไม่คาดคิดว่าจะเกิดขึ้นจาก สแกนไวรัส Avira เกิดขึ้นแล้วกับเว็บของผมเอง เมื่ออัพเดทตัวล่าสุดของ Avira ของวันที่ 19/06/2552 เกิดมีปฏิกิริยากับ Javascript ที่มีการกำหนดตัวแปรเยอะๆซะแล้ว ทำให้มีสมาชิกในเว็บโทรมาแจ้งว่าเว็บมีไวรัส (อ่าวกรรมละสิ) แต่เมื่อเข้าไปเช็คผมก็ไม่เจอ ที่บ้านใช้ NOD กับ AVG อัพเดทตลอด ไม่เจอ แต่ก็ยังรู้สึกตะหงิดๆก็เลยลองลง Avira แล้วอัพเดทล่าสุด แจ๊คพ๊อตครับ

ซึ่งสิ่งที่เกิดขึ้นนั้นทำให้เกิดการ Alert ขึ้นมาดังนี้

ซึ่งจากการดูการที่มันแจ้งว่าเป็นไวรัสมันคงคิดว่าโค๊ดมีตัวแปรคล้ายๆกับสคริปไวรัสหรือเปล่า โดยโค๊ดที่ใช้งานมานั้นเขียนแค่
var AMPHER=new Array();
var STATE=’10||กรุงเทพมหานคร||11||สมุทรปราการ||12||นนทบุรี||13||ปทุมธานี||14||พระนครศรีอยุธยา||15||อ่างทอง||16||ลพบุรี||17||สิงห์บุรี||18||ชัยนาท||19||สระบุรี||20||ชลบุรี||21||ระยอง||22||จันทบุรี||23||ตราด||24||ฉะเชิงเทรา||25||ปราจีนบุรี||26||นครนายก||27||สระแก้ว||30||นครราชสีมา||31||บุรีรัมย์||32||สุรินทร์||33||ศรีสะเกษ||34||อุบลราชธานี||35||ยโสธร||36||ชัยภูมิ||37||อำนาจเจริญ||39||หนองบัวลำภู||40||ขอนแก่น||41||อุดรธานี||42||เลย||43||หนองคาย||44||มหาสารคาม||45||ร้อยเอ็ด||46||กาฬสินธุ์||47||สกลนคร||48||นครพนม||49||มุกดาหาร||50||เชียงใหม่||51||ลำพูน||52||ลำปาง||53||อุตรดิตถ์||54||แพร่||55||น่าน||56||พะเยา||57||เชียงราย||58||แม่ฮ่องสอน||60||นครสวรรค์||61||อุทัยธานี||62||กำแพงเพชร||63||ตาก||64||สุโขทัย||65||พิษณุโลก||66||พิจิตร||67||เพชรบูรณ์||70||ราชบุรี||71||กาญจนบุรี||72||สุพรรณบุรี||73||นครปฐม||74||สมุทรสาคร||75||สมุทรสงคราม||76||เพชรบุรี||77||ประจวบคีรีขันธ์||80||นครศรีธรรมราช||81||กระบี่||82||พังงา||83||ภูเก็ต||84||สุราษฎร์ธานี||85||ระนอง||86||ชุมพร||90||สงขลา||91||สตูล||92||ตรัง||93||พัทลุง||94||ปัตตานี||95||ยะลา||96||นราธิวาส’;
…..
…..
…..
จากนั้นก็เอาค่าพวกนั้นมาแยกค่าโดยผ่านการ Split เท่านั้นเอง
function setState(frm,sM) {
var c=frm.elements[’province’];
var aM=eval(”STATE.split(’||’)”);
ซึ่งเป็นโค๊ดในลักษณะของการทำ Multi Dropdown เท่านั้นเอง

เมื่อเลือกจังหวัด ก็จะสามารถเลือกอำเภอได้ก็เท่านั้น ก็ไม่รู้ว่าเจ้า Ariva มันไปคิดว่าการกำหนดตัวแปร แล้วเอามาแยก หรือเข้าฟังก์ชั่น eval มันเป็นไวรัสหรือเปล่า มันก็เลยฟ้องขึ้นมาซะงั้น
สแกนไวรัสยี่ห้ออื่นๆไม่เป็นเลยไม่ว่าจะ NOD , McAfee , AVG มีก็แต่ร่มแดงเท่านั้นที่ดันฟ้องกับคำสั่งพวกนี้ ให้ตายสิโรบิน…
เมื่อฟ้อง ก็ได้ เปลี่ยนก็ได้วุ้ย…แต่จะเปลี่ยนยังไงดีหล่ะในเมื่อ Javascript แบบนี้ใช้ไม่ได้ ก็ต้องอาศัยการทำงานในรูปแบบของ Ajax ซะแล้ว ก็มานั่งเขียนใหม่ด้วยการใช้งานในรูปแบบของ Ajax โดยเขียนง่ายๆ
<script type=”text/javascript”>
var http = false;
if(navigator.appName == “Microsoft Internet Explorer”) {
http = new ActiveXObject(”Microsoft.XMLHTTP”);
} else {
http = new XMLHttpRequest();
}
function SetAmpher(province) {
http.abort();
http.open(”GET”, “Ampher.php?province=” + province, true);
http.onreadystatechange=function() {
if(http.readyState == 4) {
document.getElementById(’ampher_select’).innerHTML = http.responseText;
}
}
http.send(null);
}
</script>
จากนั้นในฟอร์มของเราก็จะสั่งให้มันทำงานตอนที่เราเลือกจังหวัด โค๊ดก็เป็นลักษณะประมาณนี้
<form name=”vip” method=”GET” action=”">
<select name=”province“ id=”province” style=”width:200px;” onChange=”SetAmpher(province.value)”>
<option value=”">เลือกจังหวัด</option>
<option value=”1″>กรุงเทพมหานคร</option>
<option value=”2″>เชียงใหม่</option>
</select>
<div id=”ampher_select”>
<select name=”ampher” size=”1″ id=”ampher” style=”width:200px;” ></select>
</div>
<INPUT TYPE=”submit”>
</form>
ก็ไม่มีอะไรมากก็แค่เวลาเราเลือก Select จังหวัด สคริปก็จะสั่งให้ไปเรียกสคริปที่ชื่อ Ampher.php แล้วส่งค่าตัวแปรที่ชื่อ province ออกไปด้วย จากนั้นเมื่อไฟล์ Ampher.php ทำงานเสร็จก็จะแสดงผล Select ที่เป็นส่วนของอำเภอในจังหวัดนั้นออกมา
ง่ายๆแต่ใช้การได้ดีครับ เดี๋ยวคงจะไล่เปลี่ยน Javascript ลักษณะนี้ทิ้งๆ เพราะกลัววันดีคืนดีเจ้า Avira มันจะเอ๋อฟ้องออกมาแบบนี้อีก หันไปใช้งาน Ajax ให้หมดเลยดีกว่า
Posted in PHP, ความรู้ | No Comments »
Friday, January 23rd, 2009 |
เมื่อวานก็เพิ่งโพสไปสำหรับการดึงข้อมูลแบบ JSON มาแสดง โดยอาศัยคำสั่ง curl ซึ่งใช้งานสะดวกและสั้นกว่าการใช้งานพวก fopen มาก มาวันนี้ก็เลยคิดว่าหากดึงเอา XML มาแสดงผลโดยใช้ curl หล่ะ มันก็คงไม่ได้ยากอะไรมากมายแน่นอน
ขออ้างไปยังข้อมูลที่เกี่ยวกับ XML ซะก่อนซึ่งเอามาจาก wikipedia โดยได้พูดถึง XML ไว้ดังนี้
เอกซ์เอ็มแอล (อังกฤษ: XML) ย่อมาจาก Extensible Markup Language ซึ่งเป็นภาษามาร์กอัปสำหรับการใช้งานทั่วไป พัฒนาโดยW3C โดยมีจุดประสงค์เพื่อเป็น สิ่งที่เอาไว้ติดต่อกันในระบบที่มีความแตกต่างกัน (เช่นใช้คอมพิวเตอร์มี่มีระบบปฏิบัติการคนละตัว หรืออาจจะเป็นคนละโปรแกรมประยุกต์ที่มีความต้องการสื่อสารข้อมูลถึงกัน) นอกจากนี้ยังเพื่อเป็นพื้นฐานในการสร้างภาษามาร์กอัปเฉพาะทางอีกขั้นหนึ่ง XML พัฒนามาจาก SGML โดยดัดแปลงให้มีความซับซ้อนลดน้อยลง XML ใช้ในแลกเปลี่ยนข้อมูลระหว่างเครื่องคอมพิวเตอร์ที่แตกต่างกัน และเน้นการแลกเปลี่ยนข้อมูลผ่านอินเทอร์เน็ต
XML ยังเป็นภาษาพื้นฐานให้กับภาษาอื่นๆ อีกด้วย (ยกตัวอย่างเช่น Geography Markup Language (GML) , RDF/XML, RSS, MathML, Physical Markup Language (PML) , XHTML, SVG, MusicXML และ cXML) ซึ่งอนุญาตให้โปรแกรมแก้ไขและทำงานกับเอกสารโดยไม่จำเป็นต้องมีความรู้ในภาษานั้นมาก่อน
ซึ่งผมจะลองดึง XML จาก feed ใน Blog ของผมเองนะครับ ซึ่งลิงก์ของ Feed ผมก็คือ http://www.myblog.in.th/feed/ ลองคลิกดูได้นะครับ
เมื่อผมลองเปิด URL นั้นใน IE ก็จะแสดงผลดังรูปนี้นะครับ

แล้วเมื่อลองดูโค๊ดของ Feed ที่ได้โดยการ view source ก็จะได้โค๊ดแบบนี้
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– generator=”wordpress/2.3.1″ –>
<rss version=”2.0″
xmlns:content=”http://purl.org/rss/1.0/modules/content/”
xmlns:wfw=”http://wellformedweb.org/CommentAPI/”
xmlns:dc=”http://purl.org/dc/elements/1.1/”
>
<channel>
<title>U call me MAX</title>
<link>http://www.myblog.in.th</link>
<description>เขาเรียกผมว่า เว็บมาสเตอร์</description>
<pubDate>Thu, 22 Jan 2009 16:43:24 +0000</pubDate>
<generator>http://wordpress.org/?v=2.3.1</generator>
<language>en</language>
<item>
<title>JSON เคยใช้กันบ้างไหม ?</title>
<link>http://www.myblog.in.th/2009/01/22/json/</link>
<comments>http://www.myblog.in.th/2009/01/22/json/#comments</comments>
<pubDate>Thu, 22 Jan 2009 16:36:05 +0000</pubDate>
<dc:creator>admin</dc:creator>
<category><![CDATA[PHP]]></category>
<category><![CDATA[ความรู้]]></category>
<category><![CDATA[json]]></category>
<category><![CDATA[xml]]></category>
<guid isPermaLink=”false”>http://www.myblog.in.th/2009/01/22/json/</guid>
<description><![CDATA[สำหรับการส่งข้อมูลในการใช้งานไม่ว่าจะเป็นพวก Web Service ต่างๆพวกเราอาจจะคุ้นกับ XML ซะเป็นส่วนมาก แต่ในบางครั้งนักพัฒนาก็ต้องเจอข้อจำกัดของตัว XML เองบางครั้งก็เลยทำให้นักพัฒนาต้องหาการใช้งานดาต้าในรูปแบบอื่นๆเพื่อนำมาใช้งานกัน
ซึ่ง JSON หรือ JavaScript Object Notation เป็นข้อมูลสำหรับแลกเปลี่ยนที่เล็ก ง่ายสำหรับการ อ่าน และ เขียน ซึ่งจะว่าไปแล้ว JSON ก็คล้ายกับ XML ก็คือเป็นข้อมูลแบบเป็นไฟล์ text ธรรมดาๆ ที่มี Format ที่เป็นมาตรฐานและโครงสร้างของไฟล์ที่ตายตัว
JSON มี 2 รูปแบบคือ
1. แบบ Key pair value
2. แบบ list
ในรูปเป็นตัวอย่างโครงสร้างของข้อมูลในแบบ object และในแบบ array
ที่มาพูดถึง JSON ก็เพราะว่าคุยกะ 9AUM แห่ง Scriptdd.com แล้ว ได้ไฟล์ Plugin Wordpress ที่ดึงเอารูปจากเว็บ PG.in.th มาแสดง ไอ้ผมก็เลยไปลองดึงข้อมูลจากทางเว็บ PG […]]]></description>
อะไรประมาณนี้นะครับ ซึ่งเป็นมาตรฐานของ XML เอาล่ะมาเขียนโค๊ดเพื่อดึงเอา XML นี้เพื่อไปแสดงที่อื่น หรือเว็บอื่นๆของผม หรือใครที่อยากจะดึงเอา Feed ของผมไปแปะในเว็บก็ไม่ว่ากัน
เขียนโค๊ดโดยใช้ความสามารถของ curl ครับ ดังนี้
<?php
$ch = curl_init(”http://www.myblog.in.th/feed/“); //URL จาก feed ในเว็บผมครับ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);
if(isset($doc->channel))
{
parseRSS($doc);
}
function parseRSS($xml)
{
//echo “<strong>”.$xml->channel->title.”</strong>”; //ไม่อยากให้โชว์ไตเติ้ลครับ
$cnt = count($xml->channel->item);
for($i=0; $i<$cnt; $i++)
{
$url = $xml->channel->item[$i]->link;
$title = $xml->channel->item[$i]->title;
$desc = $xml->channel->item[$i]->description;
echo ‘<a href=”‘.$url.’”>’.$title.’</a>’.$desc.’<br /><br />’; //แสดงผลรายการแต่ละอัน
}
}
?>
จากนั้นลองดูผลที่ได้ในการเขียนโค๊ดนี้ ก็ได้ผลดังนี้

จากนั้นผมลองเปลี่ยนไปดึงเอา RSS ของอีกที่หนึ่งมาจากเว็บ motogp.com โดยมี URL คือ http://www.motogp.com/en/news/rss และเมื่อลอง Refresh ก็แสดงผลดังนี้ครับ

อาจจะเป็นอีกไอเดียในการดึง XML มาแสดงผล โดยไม่ได้ใช้คำสั่ง fopen นะครับ
Posted in PHP, ความรู้ | No Comments »
Thursday, January 22nd, 2009 |
สำหรับการส่งข้อมูลในการใช้งานไม่ว่าจะเป็นพวก Web Service ต่างๆพวกเราอาจจะคุ้นกับ XML ซะเป็นส่วนมาก แต่ในบางครั้งนักพัฒนาก็ต้องเจอข้อจำกัดของตัว XML เองบางครั้งก็เลยทำให้นักพัฒนาต้องหาการใช้งานดาต้าในรูปแบบอื่นๆเพื่อนำมาใช้งานกัน
ซึ่ง JSON หรือ JavaScript Object Notation เป็นข้อมูลสำหรับแลกเปลี่ยนที่เล็ก ง่ายสำหรับการ อ่าน และ เขียน ซึ่งจะว่าไปแล้ว JSON ก็คล้ายกับ XML ก็คือเป็นข้อมูลแบบเป็นไฟล์ text ธรรมดาๆ ที่มี Format ที่เป็นมาตรฐานและโครงสร้างของไฟล์ที่ตายตัว
JSON มี 2 รูปแบบคือ
1. แบบ Key pair value
2. แบบ list

ในรูปเป็นตัวอย่างโครงสร้างของข้อมูลในแบบ object และในแบบ array
ที่มาพูดถึง JSON ก็เพราะว่าคุยกะ 9AUM แห่ง Scriptdd.com แล้ว ได้ไฟล์ Plugin Wordpress ที่ดึงเอารูปจากเว็บ PG.in.th มาแสดง ไอ้ผมก็เลยไปลองดึงข้อมูลจากทางเว็บ PG มาดูก็รู้ว่าทางเว็บ PG แจกข้อมูลออกมาเป็นข้อมูลในแบบ JSON ซึ่งเมื่อลองมองๆดูการนำไปแชร์ข้อมูล เพื่อให้เว็บอื่นๆดึงไปใช้ผมว่ามันค่อนข้างที่จะง่ายเลยทีเดียวกับการดึงข้อมูลไปแสดงผล

ลองดึงข้อมูลที่ทาง PG.in.th แชร์ข้อมูลเพื่อทำ API ไว้ เมื่อ save file แล้วเปิดดูก็พบว่ามีข้อมูลดังนี้
{”tg_flash”: null, “Photos”: [{”Src”: “/asset/photo/48×48/14655/X1KBGLQxPz.jpg”, “UploadTime”: “21.01.2009 18:31″, “PhotoId”: 76237, “Description”: “”, “Tags”: “ส่วนตัว”, “Title”: “ซ้อมๆ”, “Longitude”: “98.97″, “Place”: “SuanPrung(1)”, “Latitude”: “18.78″}, {”Src”: “/asset/photo/48×48/14655/H9bG9CNbtg.jpg”, “UploadTime”: “21.01.2009 18:30″, “PhotoId”: 76235, “Description”: “”, “Tags”: “ส่วนตัว”, “Title”: “เลือกอาวุธ”, “Longitude”: “98.97″, “Place”: “SuanPrung(1)”, “Latitude”: “18.78″}, {”Src”: “/asset/photo/48×48/14655/bboLkIN4jr.jpg”, “UploadTime”: “21.01.2009 17:52″, “PhotoId”: 76213, “Description”: “”, “Tags”: “ส่วนตัว”, “Title”: “ซ้อมดนตรีอีกแว้ว”, “Longitude”: “98.98″, “Place”: “DTACoffice(2)”, “Latitude”: “18.78″}……….(อีกมากมาย)………
ซึ่งดูจากชุดข้อมูลแล้วนั้นก็ทราบว่าข้อมูลที่ส่งมาเป็นแบบ object นี่เอง

ผลจาก Plugin WordPress ที่ 9AUM เอามาให้ใช้งาน เพื่อดึงข้อมูลจาก PG.in.th มาแสดงผลนะครับ
เอาล่ะ!!!! มาลองเขียนข้อมูลแบบง่ายๆดูสักชุดหนึ่งกันดีกว่า ผมตั้งชื่อไฟล์ไว้ว่า data โดยมีข้อมูลดังนี้
{”Maxx” : [{”Name” : “Asada Inta”, “Nick” : “Max”}, {”Name” : “Anon Chumjai”, “Nick” : “Non”}, {”Name” : “Jarunee Kapao”, “Nick” : “Jack”}]}
จากนั้นก็ทำการใช้คำสั่งของ curl ดึงไฟล์มาอ่านครับ ( PHP ต้องเปิดใช้งาน curl ด้วย ) แล้วก็ใช้คำสั่ง json_decode เพื่อจัดการข้อมูล แล้วก็วนลูปเอาข้อมูลมาแสดงผลครับ โดยเขียนดังนี้
<?php
$c = curl_init(”http://localhost/test/data“); //URL ของไฟล์ข้อมูล
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt($c, CURLOPT_VERBOSE, 0);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$json_content = curl_exec($c);
curl_close($c);
$json_decode = json_decode($json_content);
for ($i=0 ; $i < 3 ; $i++) {
$Name = $json_decode->Maxx[$i]->Name;
$Nickname = $json_decode->Maxx[$i]->Nick;
$HTML .=”$Name : $Nickname<br />”;
}
echo $HTML;
?>
ผลที่ได้ก็จะเป็นดังนี้ครับ
Asada Inta : Max
Anon Chumjai : Non
Jarunee Kapao : Jack
ไวดีไหมครับ และที่ผมชอบก็คือ หลากหลายภาษาล้วนแล้วแต่ Support ข้อมูลแบบ JSON แทบทั้งนั้นเลย เช่น ASP, ActionScript, C, C++, C#, ColdFusion, Delphi, Haskell, Java, JavaScript, Lisp, LotusScript, Objective C, Perl, Python, Ruby, Visual FoxPro และที่สำคัญก็คือ PHP นี่แหล่ะครับ เลยทำให้ผมเริ่มที่จะเล็งข้อมูลแบบ JSON มาใช้ เพราะโค๊ดเขียนได้สั้นกว่าการอ่าน XML และง่ายสำหรับมือใหม่ๆในการเขียนโค๊ดมากๆ
และของฝากครับสำหรับใครที่อยากจะเปลี่ยนจาก XML เป็น JSON ด้วย PHP ครับ
http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/
เดี๋ยวในเว็บใหม่ๆที่ผมจะทำคงแชร์ข้อมูลออกมาทั้งแบบ XML และ JSON ครับ
Posted in PHP, ความรู้ | 1 Comment »