Archive for the ‘PHP’ Category
Wednesday, May 7th, 2008 |
เหอๆๆ ชื่อหัวข้อ งงๆ ป่าว ผมอ่านผมก็ยัง งงๆ เลยครับ แต่เอาเป็นว่าคุณๆที่เคยเขียนโปรแกรมที่ต้องมีการนำเอาค่า id ของตารางไปใช้งานต่อไป และค่า id ที่จะเอาไปนั้นเองในดาต้าเบสก็ดันเป็นข้อมูลแบบ ‘Auto_increment’ หรือ รันขึ้นไปเรื่อยๆอัตโนมัติอีกหล่ะทำไง
นี่ไงๆ เขียนแบบนี้เลย
$result = mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
$row = mysql_fetch_assoc($result);
echo $row[’now_id’]+1;
หรือ
$result = mysql_query(”SELECT MAX(order_id)+1 AS next_id FROM orders “);
$row = mysql_fetch_assoc($result);
echo $row[’next_id’];
ก็ได้ค่าของ id ลำดับต่อไปแล้ว
ง่ายดีไหมครับ…….
แต่……มันไม่ใช่แค่นั้นนะสิ
สมมุติละกันว่า ตอนนี้ มีแถวอยู่แบบนี้ โดยที่ข้อมูลยังครบถ้วน id เป็นฟิลล์แบบ Auto_increment
+—-+————+————+
| id | txt | date |
+—-+————+————+
| 1 | wqwmo | 0211041039 |
| 2 | mote | 0210120016 |
| 3 | phpbuilder | 0211161642 |
| 4 | txt1 | 0211181109 |
| 5 | txt2 | 0211181109 |
+—-+————+————+
หากเราใช้คำสั่ง mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
ค่า now_id จะต้องเท่ากับ 5 ใช่หรือไม่ ?
ถูกต้องนะครับ…
แต่หากว่าเกิดเราลบ id ที่ 5 ไปหล่ะ มันก็จะเหลือข้อมูลแบบนี้
+—-+————+————+
| id | txt | date |
+—-+————+————+
| 1 | wqwmo | 0211041039 |
| 2 | mote | 0210120016 |
| 3 | phpbuilder | 0211161642 |
| 4 | txt1 | 0211181109 |
+—-+————+————+
และเมื่อเราใช้คำสั่ง mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
ค่า now_id จะต้องเท่ากับ 4 ใช่หรือไม่ ?
ก็ถูกต้องนะครับ…
แต่จริงๆแล้ว id ที่จะถูกใช้งานเมื่อถูก insert ครั้งต่อไปมันคือ 6 ครับ
อ่าว เวร แล้วสิ งี้ทำไงดี
บางคนอาจจะใช้วิธี insert ข้อมูลเข้าไปก่อน แล้วค่อยใช้วิธี query ออกมาอีกครั้งหนึ่ง เพ่ือเอาค่า id ล่าสุดไปใช้งานต่อไป
สำหรับคนที่เคยทำแล้วอาจจะบอก ง่ายจริงๆ แต่หลายๆคนที่ไม่เคยใช้งาน ก็ลองเอาไปใช้งานนะ
$q = mysql_query(”show table status from DATABASE_NAME like ‘TABLE_NAME’ “) or die(mysql_error());
echo mysql_result($q, 0, ‘Auto_increment’);
รับรองคราวนี้ได้ค่า id ต่อไปของข้อมูลแบบ Auto_increment ที่ถูกต้องและแน่นอน
วิธีนี้เหมาะกับการต้อวงการทราบค่า id ต่อไป เหมือนที่แสดงใน phpmyadmin ที่บอกว่า
ต่อไป Autoindex 4
ประมาณนี้ครับ
Posted in PHP, ความรู้ | 4 Comments »
Tuesday, March 25th, 2008 |
Framework มันคืออะไร ?
เอาตามความเข้าใจของผม Framework ก็คือชุดคำสั่ง Libraries หรือ Classes ที่ใช้ในการเขียนและพัฒนาโปรแกรม โดย Framework แต่ละตัวก็จะมีมาตรฐานของตัวมันเอง (ตามที่ผู้สร้าง Framework กำหนด) โดยที่ในตัวโค๊ดของมันเองจะมีโค๊ดที่มีลักษณะเป็น Reuseable หรือเป็นโค๊ดที่เราสามารถนำกลับมาใช้ได้อีก อยู่มากมาย เพื่อให้เราเลือกใช้งาน ซึ่งทำให้เวลาที่เราเขียนโปรแกรมสามารถใช้เวลาในการพัฒนาที่สั้นลงได้เยอะเลย เพราะไม่ต้องมานั่งเขียนโค๊ดเดิมๆซ้ำๆให้เสียเวลา
PHP Framework
มีหลายตัวเลยครับ เยอะจริงๆจะให้ไปศึกษาทั้งหมดผมว่าตายกันพอดี เท่าที่เห็นก็มีดังนี้นะครับ
Zend Framework
CakePHP
Symfony Project
Seagull Framework
WACT
Prado
PHP on TRAX
ZooP Framework
eZ Components
CodeIgniter
แล้วจะใช้ตัวไหนดีละเนี่ย ????
มันก็แล้วแต่คุณจะเลือกใช้ตัวไหนนะครับ แต่ที่ผมอยากจะนำตัว Framework เล็กๆ ใช้งานไม่ยุ่งยาก ขนาดไฟล์เมื่อแตกแล้วประมาณ 1 MB กว่าๆ เล็กดี และเป็น Framework ที่ Base on PHP ล้วนๆครับ สามารถนำไปใช้งานได้บนโฮสปกติทั่วๆไปได้ เพราะ Framework บางตัวต้องลงโปรแกรมของมันบ้าง หรือต้องคอนฟิกอะไรไม่รู้ยุ่งยากไปหมด
CodeIgniter คือตัวที่ผมแนะนำ

ผมไม่ได้บอกว่าตัวนี้ดีที่สุด แต่ผมลองแล้วคิดว่าพัฒนาอะไรได้ง่ายครับ เหมาะกับคนที่เขียน PHP และ Class ได้ในระดับพอใช้งานได้ ก็สามารถเขียน PHP Framework โดยใช้ CodeIgniter ได้แบบไม่ยากเย็นมากนัก
CodeIgniter เป็น PHP Framework ในรูปแบบของ MVC แต่มีจุดเด่นคือ
-
มีขนาดเล็ก
-
ใช้งานง่ายเพราะแค่แตกไฟล์มาก็เอามาใช้ได้เลย
-
เป็น Framework แบบ DIY (Do IT Yourself) คือจะเขียนอะไรก็ทำเอง ดีตรงที่ไม่ต้องเจอไฟล์แปลกๆที่ไม่รู้ว่ามันทันสร้างมาตอนไหน
-
แหกกฏ MVC เล็กน้อย คือมีแค่ controller กับ view ก็ทำงานได้แล้ว
-
มีคู่มือมาให้ค่อนข้างละเอียด
แต่ที่ชอบแน่นอนคือติดตั้งง่าย เพราะ FTP ลง server ก็ใช้ได้เลยไม่ต้องอะไรยุ่งยากมากมาย และที่ผมชอบตัวนี้เพราะเราต้องเขียนโค๊ดโปรแกรมเอง ซึ่งเป็นสิ่งที่ผมชอบ เพียงแต่เราเอามาพัฒนาบนฐานของ Framework ก็พอ

เขียนเล่นๆดูครับ
ตัวอย่างโค๊ดในหน้านี้ก็คือ
<?php
class Blog extends Controller {
function index()
{
$this->load->view(’blog/header’);
$this->load->view(’blog/body’);
$this->load->view(’blog/footer’);
}
}
?>
เขียนแนวๆนี้แหล่ะ
ส่วนการเรียก URL ก็ใช้ RewriteEngine ซะเพื่อให้ URL มันออกมาแบบสวยงามและตรงตามหลักการทำ SEO ครับ ลองโหลดไปศึกษากันดูได้ที่เว็บไซต์ http://codeigniter.com/
Posted in PHP, ความรู้ | 6 Comments »
Wednesday, February 27th, 2008 |
คือมีหลายๆครั้งนะที่เวลามีคนชอบถามผมว่าทำไม PHP มันจึงดีกว่า ASP ไอ้ผมเองก็เคยใช้มาด้วยกันทั้งคู่อยู่แล้ว ก็รู้อยู่นะว่า PHP มันดีกว่า ASP อยู่แล้ว ไม่ว่าจะ ASP หรือแม้แต่ ASP.net ก็ตาม ก็พอดีแหล่ะที่ไปอ่านที่ เจ้าบอล เดอะกาฝากไดอารี่ แปลจากของต่างประเทศเอาไว้ ก็เลยหยิบมาให้เพื่อนๆ อ่านๆกัน เพราะมันเป็นเรื่องลึกๆ ที่บางครั้งอธิบายให้เด็กใหม่ๆแล้วขี้เกียจพูด อิอิ
1. ความเร็วเป็นต่อ
อันนี้เขาว่า ASP นั้นเป็นสคริปต์ที่มีพื้นฐานอยู่บนสถาปัตยกรรม COM ครับ… ASP นั้น Microsoft ต้องการให้โปรแกรมเมอร์สามารถเขียนโปรแกรมได้ง่าย เลยเอา COM มาทำหน้าที่จัดการอะไรต่อมิอะไรทั้งหมด แต่ทว่า การเรียกใช้ COM เป็นตัวกลางในการจัดการโค้ดต่างๆ นี่แหละครับ ทำให้การทำงานช้าลง เพราะมี header ที่มากขึ้น อันเนื่องมาจากการติดต่อกับ COM นั่นเอง
ซึ่งอันนี้ PHP ได้เปรียบ เพราะว่าทุกอย่างจะถูกรันภายใต้หน่วยความจำ ที่เป็นของ PHP เอง ไม่มีพ่อค้าคนกลางมาทำให้เกิด overhead แต่อย่างใดครับ
ซึ่งเขาให้ดูหลักฐาน คือการลองเชื่อมต่อ แล้วประมวลผล SQL Statement จำนวน 40 ครั้ง ผ่านการเชื่อมต่อกับฐานข้อมูล Microsoft SQL กับ PHP ด้วยวิธีต่างๆ แล้วบันทึกระยะเวลาออกมา ได้ผลดังนี้ครับ
Using MSSQL extension 01.88
Using ODBC extension 09.54
Using ODBC via COM (ADO) 17.28
Using OLEDB via COM 06.19
สังเกตว่า พอมีตัวกลางเป็นพวก ODBC หรือ COM เข้ามา การประมวลผล จะช้าลงอย่างเห็นได้ชัด
When we access the database using PHP’s ODBC extension, it’s 9.54 secs. Using the COM interface to connect to ODBC adds a 80% overhead (17.28 secs) to ODBC.
แต่ถึงจุดนี้ เขาก็พูดถึงข้อเสียนิดของ PHP ด้วยนะครับ คือเรื่องของเสถียรภาพ ว่าหาก PHP module เกิดล่ม ผลก็คือ เว็บเพจต่างๆ จะได้รับผลกระทบไปหมด… แต่ถ้ามองอีกแง่ ในอนาคตการพัฒนามันมากขึ้น เสถียรภาพก็ย่อมมากขึ้นเช่นกัน ซึ่งเกิดขึ้นแน่นอน เพราะ PHP เป็น Open Source ครับ
2. การจัดการหน่วยความจำที่ดีกว่า
สำหรับ ASP บน IIS4 หากมีการเรียกใช้ไฟล์ header.asp ในหน้าเว็บ 20 หน้า ก็จะมีการเก็บไฟล์ header.asp ที่คอมไพล์ไว้แล้ว ทั้งหมด 20 ไฟล์ลงในหน่วยความจำ… และแม้ว่า IIS5 จะได้รับการปรับปรุงในส่วนนี้แล้วก็ตาม แต่ว่าจะมีเพียงโปรแกรมเมอร์ที่ใช้ Windows 2000 เท่านั้น ที่อัพเกรดได้ เพราะว่า การปรับปรุงนี้ ไม่มี backward compatibility หรือ ความเข้ากันได้กับโปรแกรมเวอร์ชันก่อนๆ พูดง่ายๆ คือ IIS ในปัจจุบัน ที่ยังเป็น NT ก็ยังคงมีปัญหากับการจัดการหน่วยความจำอยู่ดี
ส่วน PHP นั้นไร้ปัญหา เพราะว่ามันจะโหลดไฟล์เฉพาะเท่าที่ require มาครับ
3. ฟรีแบบไร้เงื่อนไข ไม่มีเลศนัยใดๆ
อันนี้ผู้เขียนเขียนประมาณเชิงประชดครับ เขาว่าสำหรับ ASP นั้น หากต้องการการเข้ารหัส ก็ต้องซื้อ ASPEncrypt มา หากต้องการจัดการกับอีเมล์ ก็ต้องซื้อ ServerObject’s QMail มา (อันนี้ใช้อ้างกับ ASP.NET คงไม่ได้แล้ว เพราะเห็นเขาว่า ASP.NET สามารถเชื่อมต่อกับ Mail Server ได้ง่ายๆ เหมือน PHP แล้ว) และหากต้องการทำไฟล์อัพโหลด ก็ต้องซื้อซอฟต์แวร์มาเพิ่มอีก (อันนี้ก็คงหมายถึง ASP เวอร์ชันก่อน .NET เช่นกัน)
แต่สำหรับ PHP มันฟรีมาแต่ไหนแต่ไรครับ
ใครที่อยากใช้ ASP แล้วก็ใช้พวกนี้ได้ฟรีๆ ก็คงต้องอัพเกรด IIS เป็น IIS6 ครับ (ซึ่งตอนนี้ก็มีใน Windows 2003)
4. ผนวกกำลังกับ MySQL ก็ยิ่งทำให้เจ๋งเข้าไปอีก
MySQL เป็นฐานข้อมูลที่ฟรี และมีประสิทธิภาพสูงมากพอที่จะนำไปพัฒนาระบบฐานข้อมูลขนาดเล็ก ถึงขนาดกลางได้สบายๆ
PHP นั้นมีการรวมตัวกับ MySQL อย่างแนบแน่น และมีฟังก์ชันในการจัดการกับฐานข้อมูล MySQL มากมาย (จริงๆ แล้ว ก็มีฟังก์ชันในการจัดการกับฐานข้อมูลอื่นๆ อีกมากเช่นกัน)
จริงๆ แล้ว สำหรับเว็บไซต์ขนาดกลาง ASP และ PHP ก็เป็นโซลูชั่นที่ดี เพียงแต่ ASP + MS Access หรือ ASP + ODBC + MySQL นั้น ยังทำงานได้ช้ากว่า PHP + MySQL ครับ
ส่วนพวก MS SQL หรือ Oracle นั้น อาจจะเร็วก็จริง แต่แพงเสียเหลือกำลังครับ คงไม่ไหวแน่นอน
5. รูปแบบการเขียนคล้ายกับ Java หรือ C++
อันนี้เป็นเพียง ข้อคิดเห็นในฐานะโปรแกรมเมอร์เท่านั้นครับ สำหรับผู้ที่ชำนาญพวก Java หรือ C++ นั้น จะเขียน PHP ได้เร็วกว่า เนื่องจากมีรูปแบบการเขียนคล้ายกัน
สำหรับใครที่มาสาย Visual Basic นั้น จะมองว่า ASP ง่ายกว่าเห็นๆ ครับ
6. ไม่มี show-stopper เวลาที่พบบั๊ก
หากคุณเจอบั๊กใน ASP แล้วอยากให้ทางไมโครซอฟต์แก้บั๊กให้ คงไม่ใช่เรื่องง่ายๆ แน่ หากคุณไม่ใช่บริษัทที่ใหญ่โตจริงๆ เช่นนี้แล้ว บั๊กที่คุณเจอ กว่าจะได้รับการแก้ไข คงกินเวลานานแน่ (เว้นเสียแต่มันจะเป็นบั๊กที่ยิ่งใหญ่อลังการ มีคนพบเห็นมากมาย)
แล้วเกิดบั๊กนั้นทำให้โค้ดไม่ทำงาน ตราบใดที่บั๊กยังไม่ได้รับการแก้ไขล่ะ จะทำยังไง?!? คงต้องเขียนโปรแกรมใหม่แหงๆ
สำหรับ PHP นั้น คุณไม่ต้องรอให้ใครมาแก้บั๊กให้คุณเนิ่นนานหรอก เพราะหากมันเร่งด่วนจริงๆ คุณก็แค่จ้างโปรแกรมเมอร์เก่งๆ มาแก้บั๊กให้คุณได้เลย เพราะ PHP ไงๆ ก็เป็น Open Source อยู่แล้ว
7. Cross Platform จะอยู่ระบบปฏิบัติการไหนก็บ่ยั่น
ปัญหาหกข้อแรก ที่ทำให้ PHP ดูดีกว่า ASP นั้น การออกมาของ ASP.NET คงทำให้หายไป หรือเหลือน้อยลงอย่างมากที่สุด (จริงๆ แล้ว ASP.NET ก็มีอะไรหลายๆ อย่างที่ดีกว่า PHP นะ เช่นพวก component ใหม่ๆ อย่าง component สำหรับการตรวจสอบการกรอกข้อมูล หรือปฏิทิน — อันนี้ผมเสริมเอง) แต่ที่แน่ๆ คือ สุดท้ายคุณก็ต้องรันมันบนเซิร์ฟเวอร์ที่เป็น IIS ของไมโครซอฟต์อยู่ดี (แม้ว่า ChilliSost ASP จะเป็นทางเลือกสำหรับ ASP บน Linux ก็ตาม แต่ก็ไม่ได้ดีเท่า)
แต่สำหรับ PHP นั้น คุณสามารถพัฒนาบน IIS หรือ Apache บน Windows แล้วต่อไปก็เอาไปรันบนเว็บเซิร์ฟเวอร์อื่นๆ บนระบบปฏิบัติการ Linux, Sun Solaris, FreeBSD หรือ Unix ก็ได้ โดยที่แทบไม่ต้องแก้ไขอะไรเลย (อาจจะมีปัญหาเรื่อง file permission อยู่บ้าง)
ขอบคุณเจ้าบอลที่แปลไว้ให้อ่านกันนะ
Posted in PHP, ความรู้ | No Comments »
Wednesday, February 27th, 2008 |
ในบางครั้งที่เราทำเว็บไซต์สำหรับสอนเขียนโปรแกรม เราเองก็คงอยากได้สีสวยๆของโค๊ด เหมือนที่เห็นในพวกโปรแกรมทำเว็บต่างๆเช่น Editplus , Dreamweaver อะไรพวกนี้ เพื่อให้คนที่อ่านโค๊ดเข้าใจ และเห็นสีที่ชัดเจนมากขึ้น

อยากแสดงสีชัดเจนแบบนี้
บางคนอาจจะเขียนฟังก์ชั่นต่างๆในการแสดงในเว็บ เช่นให้มีบรรทัด และ ตัวเลขกำกับต่างๆแบบนี้

ตัวอย่างจาก php.deeserver.net
ซึ่งการเขียนในแบบที่ php.deeserver.net ทำนั้นจะต้องมีสคริปมาช่วย ซึ่งผมจะไม่ขอพูดถึง แต่ผมจะมาพูดถึงการใช้ฟังก์ชั่นที่ติดมากับ PHP อยู่แล้ว (ของมันมีให้ใช้ก็ใช้ให้คุ้มๆหน่อย)
show_source
ฟังก์ชั่นที่มากับ PHP4 , PHP5 เป็นฟังก์ชั่นที่เอาไว้โชว์โค๊ดทั้งหมดของไฟล์ โดยมีวิธีเรียกใช้แบบนี้
<?
show_source(”008.php”);
?>
โดยทำการระบุชื่อไฟล์ที่จะแสดงโค๊ดลงไปเลย โดยผลที่ได้ก็จะเป็นแบบนี้

ไม่ยากเลยสำหรับฟังก์ชั่นนี้เพราะใช้วิธีการระบุไฟล์ไปเลย แต่หากเวลานั่งเขียนสอนโค๊ดผมคงไม่มานั่งทำไฟล์ทิ้งไว้เป็นร้อยๆไฟล์แน่นอน ดังนั้นหากจะใช้กับการสอนก็ต้องใช้อีกฟังก์ชั่นหนึ่ง
highlight_string
ฟังก์ชั่นนี้ก็เช่นเดียวกันใช้กับ PHP4 , PHP5 โดยเป็นฟังก์ชั่นที่ใช้งานในการแสดงโค๊ดโดยตรง วิธีเขียนก็ดังนี้
<?php
highlight_string(’<?php phpinfo(); ?>’);
?>
ซึ่งผลที่ได้ก็จะเป็นแบบนี้

ง่ายๆไม่ต้อง config อะไรให้ยุ่งยากครับ แต่ก็มีครับบางคนอาจจะอยากแก้ค่าสีที่แสดง ก็ทำได้โดยแก้ไขที่ php.ini ครับ ดังรูป

แก้ค่าสีเองตามใจได้เลยใน php.ini
ง่ายไหมครับกับการแสดงโค๊ด อ่ะมาดูการเขียนฟังก์ชั่นการแสดงโค๊ดที่ใช้งานได้ง่ายๆดีกว่าผมชอบแบบนี้เพราะมันเรียกใช้งานได้ง่ายดีครับ
<?
function code()
{
static $on=false;
if (!$on) ob_start();
else
{
$buffer= “<?php\n”.ob_get_contents().”?>”;
ob_end_clean();
highlight_string($buffer);
}
$on=!$on;
}
?>
<?code()?>
if (eregi(”config.in.php”,$PHP_SELF)) {
Header(”Location: ../index.php”);
die();
}
<?code()?>
นี่เป็นตัวอย่างโค๊ดนะครับ โดยสีเขียวคือส่วนที่ต้องการแสดงโค๊ดครับ ส่วนผลนั้นก็ออกมาแบบนี้ครับ

สวยงามมาก….^_^
คงเป็นประโยชน์สำหรับคนที่อยากโชว์โค๊ดตัวเองนะครับ
Posted in PHP, ความรู้ | No Comments »
Tuesday, February 26th, 2008 |
พอดีวันนี้มีน้องคนหนึ่งถามขึ้นมาเรื่องการนำข้อมูลจาก Excel ไปลง MySQL จากที่ไม่รู้ว่าจะเขียนอะไรดีในวันนี้ ก็เลยได้เรื่องเขียนซะเลย 555 ขอบใจมากที่ถามมา
อ่ะ..มาทำกัน สมมุติว่าผมมีไฟล์ Excel ที่มีข้อมูลแบบนี้

แล้วทำไงต่อหล่ะ วิธีง่ายๆก็คือ ไปสร้างดาต้าเบส และ ตาราง ใน phpmyadmin โดยให้มีโครงสร้างที่เหมือนกับไฟล์ Excel ไฟล์นี้ ซึ่งผมก็สร้างออกมาเป็น

จากนั้นกลับไปยังไฟล์ Excel แล้วไปลบเอาส่วนหัวมันออกซะให้เหลือแต่ข้อมูล

จากนั้นก็ทำการ Save as ครับ ให้ Save ไปเป็นไฟล์ CSV แบบมีคอมม่าคั่น หากภาษาอังกฤษก็ดูตามรูปละกัน

สมมุติว่าผม Save ไฟล์นี้ชื่อ csv2mysql.csv จากนั้นผมก็ไปยัง phpmyadmin ครับแล้วทำการเลือกที่เมนู Import ครับ

ก็เลือก Option ต่างๆเหมือนที่ผมเลือกละกัน
ที่สำคัญคือการเปลี่ยน ; ให้เป็น , ด้วยนะครับ เพราะไฟล์ที่เรา Save มาเป็น CSV แบบใช้คอมม่าคั่น เมื่อเลือกทุกอย่างครบถ้วนก็จัดการ ลงมือ ได้เลย หากไม่ทำผิดพลาด หรือฟิลล์ต่างๆถูกต้องก็จะได้ข้อมูลเข้าไปอยู่ในดาต้าเบส ดังรูป

ง่ายๆเห็นไหมครับ คราวนี้จะมีข้อมูลสักกี่หมื่น กี่แสน ใน Excel ก็นำมาใส่ใน MySQL ได้แล้ว ^_^
Posted in PHP, ความรู้ | 1 Comment »