9 ฟังก์ชัน PHP สำหรับจัดการข้อความ ที่มือใหม่ควรใช้ให้เป็น

1. rawurlencode เปลี่ยนเครื่องหมาย & และช่องว่าง ให้อยู่ในรูปแบบ url ที่ถูกต้อง
2. htmlentities ช่วยแปลง string ให้อยู่ในรูปแบบของ html entities
3. nl2br แทรกคำสั่ง <br> ถ้าต้องการขึ้นบรรทัดใหม่
4. strip_tags การเอาคำสั่ง html ออกจาก string
5. wordwrap ตัดคำ หรือขึ้นบรรทัดใหม่ โดยกำหนดได้ว่าจะแทรกที่ตัวอักษรที่เท่าไหร่
6. trim ลบช่องว่างออกจาก string ทั้งซ้ายและขวา
7. substr ตัดเอา string บางส่วนตามตำแหน่งที่เรากำหนด
8. number_format จัดรูปแบบของตัวเลข เช่น ให้มีคอมม่าคั่นหลักพัน เป็นต้น
9. strcmp เปรียบเทียบ string แบบแน่นอนในระดับ binary

สรุปแบบย่อๆนะครับ วิธีใช้แบบเต็มๆดูเพิ่มเติมได้ที่:
http://php.net/manual/en/ref.strings.php

Yii 2.0.8 มีอะไร update สำคัญๆ บ้าง

  • ปรับปรุงความเข้ากันได้กับ PHP 7
  • เพิ่ม method andFilterCompare() สำหรับกรองข้อมูลในคอลัมน์ของ GridView ให้ง่ายขึ้น ใครใช้ Yii 1.1 อยู่น่าจะคุ้นเคยเป็นอย่างดี
  • เพิ่ม comments ให้กับตาราง และคอลัมน์ ในฐานข้อมูล
  • เมื่อเราอัพโหลดไฟล์เรามักลืมระบุ enctype ให้กับฟอร์ม ตอนนี้ไม่ลืมแน่นอน เพราะ Yii จัดการเพิ่ม enctype ให้เราแบบ Auto แล้ว ไม่ต้องระบุครับ
  • เราสามารถระบุเครื่องหมายดอกจันทร์ (*) เพื่อตรวจสอบ mimeTypes แบบกลุ่มได้เช่น image/* หมายถึง image/jpeg, image/png เป็นต้น
  • สามารถตรวจสอบความถูกต้อง (Validate) เวลาได้แล้ว โดยระบุ property ชื่อว่า type กำหนดเป็น TYPE_DATETIME หรือ TYPE_TIME ไม่ต้องเขียนเช็คเองแล้ว
  • เรื่องความปลอดภัย ส่วนใหญ่อัพเดทตั้งแต่ 2.0.7 แล้วครับ สำหรับ 2.0.8 จะเป็นการปรับปรุงประสิทธิภาพเสียมากกว่า เช่น ปรับปรุง Random Number Generator (RNG) ให้ดีขึ้น
  • ล่าสุด มีการปรับปรุง MongoDB extension ใครใช้อยู่ก็ update กันได้เลย
    อ่านเพิ่มเติมได้ที่
    http://goo.gl/FGZ97k

แนะนำหนังสือ Git (version control system) อ่านฟรี

a

ช่วงหลังๆ เห็นประกาศรับสมัครงานต้องการคนที่ใช้ git เป็นด้วย ซึ่งจริงๆแล้ว ผมคิดว่าโปรแกรมเมอร์ทุกคนควรใช้ให้เป็นครับ

ลิงก์ดาวน์โหลดแบบ PDF
https://goo.gl/PCLXsl

ลิงก์อ่านแบบออนไลน์
https://goo.gl/2bstxn

 

แนะนำ WYSIWYG editor ใช้กับ Yii2 Framework

สำหรับใครที่กำลังมองหา WYSIWYG editor ของ Yii2 Framework แนะนำตัวนี้เลยครับ yii2-redactor คุณสมบัติหลักๆ ที่ชอบคือมันสวย ใช้ง่าย มีระบบจัดการรูปภาพ และจัดการไฟล์มาให้เรียบร้อย!! ลิงก์ตามนี้ https://github.com/yiidoc/yii2-redactor

 

1. หลังจากติดตั้งเสร็จ เปิดไฟล์ common\config\main.php ขึ้นมาแล้วเพิ่ม module ครับ

หมายเหตุ ตรง uploadDir และ uploadUrl ใส่เป็นเว็บของตัวเองนะครับ

2. ไปที่ View ของโปรเจคเรา สมมติว่าเป็นไฟล์ _form.php แล้วแทรกโค้ด ดังนี้

เรียบร้อย!! ถ้าอยากรู้ว่ามี options อะไรเพิ่มเติมอีกก็ตามไปได้ที่เว็บ http://imperavi.com/redactor

รวม 14 บทความความรู้เกี่ยวกับ Yii Framework 2 เขียนโดย Jeff Reifman

รวม 14 บทความความรู้เกี่ยวกับ Yii Framework 2 เขียนโดย Jeff Reifman ครับ ผมลองเรียงลำดับเนื้อหาให้เรียบร้อย นี่ถ้า print มาอ่านคงได้เป็นเล่มเลย

1. Programming with Yii2: Getting Started
http://goo.gl/FgqVJh

2. Programming With Yii2: Exploring MVC, Forms and Layouts
http://goo.gl/ZSTjGM

3. Programming With Yii2: Integrating User Registration
http://goo.gl/wmByJr

4. Programming With Yii2: Localization With I18n
http://goo.gl/w6vxC1

5. Programming With Yii2: User Access Controls
http://goo.gl/RcPrZj

6. Programming With Yii2: Sluggable Behavior
http://goo.gl/5w2z4S

7. Programming With Yii2: Blameable Behaviors
http://goo.gl/pPrsuQ

8. Programming With Yii2: Timestamp Behavior
http://goo.gl/7rGWmZ

9. Programming With Yii2: Validations
http://goo.gl/Hi6hwN

10. Programming With Yii2: Specialized Validations
http://goo.gl/dlkWhd

11. Programming With Yii2: Working With Asset Bundles
http://goo.gl/UYW4zX

12. Programming With Yii2: Rich Text Input With Redactor
http://goo.gl/IIpKze

13. Programming With Yii2: Working With the Database and Active Record
http://goo.gl/1pl5MD

14. Programming With Yii2: AuthClient Integration With Twitter, Google and Other Networks
http://goo.gl/urxNYJ

การเปลี่ยน port MySQL/MariaDB จาก 3306 เป็น port อื่น (XAMPP)

ถ้าใครใช้ XAMPP ในการจำลอง Server ถ้า Start MySQL แล้วมีปัญหา อาจเป็นไปได้ว่ามีการชนกันของ port ครับ หรือเราอยากทดลองใช้ MySQL เวอร์ชันใหม่ๆ แต่ไม่อยากลบ MySQL ตัวที่กำลังใช้งานอยู่ บทความนี้จะพาเราไปทำความรู้จักกับการเปลี่ยนหมายเลข port ของ MySQL กัน ลุยกันเลย!

 

1.ดับเบิ้ลคลิก XAMPP Control Panel ขึ้นมา จากนั้น คลิกที่ปุ่ม Config (ของ MySQL) เลือกไฟล์ my.ini ครับ

2.เมื่อเปิดไฟล์ my.ini ขึ้นมาแล้วแก้ไขหมายเลข port ให้เป็นหมายเลขที่เราต้องการ (2จุด) จากนั้นให้บันทึกไฟล์นี้ แล้วปิดไปได้เลย

3.คลิกที่ปุ่ม Config (ของ Apache) เลือกเปิดไฟล์ php.ini ขึ้นมาเพื่อแก้ไขครับ

4.ให้ค้นหาคำว่า mysql.default_port ครับเมื่อเจอแล้ว ให้แก้หมายเลขจาก 3306 เป็นหมายเลข port ที่เราต้องการ และค้นหาคำว่า mysqli.default_port (มี i ต่อท้ายด้วยนะ) ให้แก้หมายเลขเป็นหมายเลข port ที่เราต้องการเช่นกัน จากนั้นให้บันทึกไฟล์แล้วปิดไปได้เลย

หมายเหตุ ในรูปมีเฉพาะ mysql.default_port นะครับ เลื่อนลงมานิดหน่อยจะเจอ mysqli.default_port

5.กดปุ่ม Start ทั้งในส่วนของ Apache และ MySQL ให้สังเกตหมายเลข port MySQL ครับว่าเปลี่ยนไปตามหมายเลขที่เราต้องการหรือเปล่า ถ้าทำครบทุกขั้นตอนก็จะเห็นว่าหมายเลข port ได้เปลี่ยนแล้ว

แต่เดี๋ยวก่อน เวลาเขียน PHP อย่าลืมใส่หมายเลข port ใหม่ในขั้นตอนการ connect ด้วยนะครับ โค้ดตามนี้เลย

//สำหรับ MySQLi connection เขียนแบบ procedural

//สำหรับ MySQLi เขียนแบบ object-oriented

แค่นี้ก็เรียบร้อย!

แนะนำใช้งาน XAMPP แบบ portable

คิดว่าหลายคนที่เขียน PHP มา คงใช้ XAMPP กันเป็นประจำอยู่แล้วครับ แต่ปัญหาคือ XAMPP 5.6.11 เป็นต้นไป มีการเปลี่ยนแปลงในส่วนที่เรียกว่า dashboard กันใหม่ทั้งหมด ทำให้มือใหม่หลายคนปวดหัว และงงกับการใช้งาน วันนี้เลยมาแนะนำวิธีการใช้งานกัน ดังนี้ครับ

1. ดาวน์โหลดโปรแกรมได้ที่

http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/5.6.11/xampp-portable-win32-5.6.11-1-VC11.zip/download

หากมี version ใหม่กว่านี้ก็เปลี่ยนได้ แนะนำให้เลือกแบบ xampp-portable ครับ เพราะเวลาย้ายเครื่องสามารถ copy โฟลเดอร์ xampp ไปได้เลย

2. เมื่อได้ไฟล์ในรูปแบบ .zip มาแล้วให้ extract ไฟล์ไว้ที่ไหนก็ได้ตามต้องการเช่น วางไว้ที่ Drive C:\xampp ในโฟลเดอร์ xampp นี้จะมีไอคอนสีส้มชื่อว่า xampp-control ให้ดับเบิ้ลคลิกขึ้นมาได้เลยครับ จะมีหน้าต่างให้เลือกภาษา แนะนำให้กดปุ่ม Save ได้เลยครับ

 

3. จากนั้นจะกดปุ่ม Start ในส่วนของ Apache และ MySQL ถ้าไม่มีปัญหาอะไรจะขึ้นแถวสีเขียวครับ

 

4. กำหนดรหัสผ่านให้กับ MySQL มีขั้นตอนดังนี้

4.1 เปิด XAMPP control panel ขึ้นมา ให้คลิกปุ่ม Shell ทางด้านขวา แล้วกดปุ่ม Yes อีกครั้งหนึ่ง จะได้โปรแกรมในรูปแบบ command line (หน้าจอดำๆ) ขึ้นมา
4.2 พิมพ์คำสั่งลงไปตามนี้

แล้วกด Enter **(123456 คือรหัสผ่านที่เราต้องการตั้ง)**

4.3 จากนั้นให้เปิดไฟล์ ชื่อว่า config.inc.php ในโฟลเดอร์ phpMyAdmin ตามนี้ C:\xampp\phpMyAdmin
4.4 มองหาบรรทัดที่ 19 และ 21 โดยเปลี่ยน

เป็น

แล้วให้ใส่รหัสผ่านที่ได้ตั้งไว้ในข้อ 4.2 ในบรรทัด

แก้เป็น

(ย้ำอีกครั้ง 123456 คือรหัสผ่านที่ได้ตั้งไว้ในข้อ 4.2) ดังนี้

เสร็จแล้ว อย่าลืม!!! กดบันทึกหรือ save ไฟล์นี้ ด้วยครับ

 

5. ทดสอบโดยเปิด browser แล้วพิมพ์ http://localhost/phpmyadmin/ จะขึ้นหน้าล็อกอิน ก็ลองกรอก username เป็น root และ password ตามข้อที่ 4.2 ได้เลยครับ แค่นี้ก็เรียบร้อย

 

ขอให้สนุกกับเรียนรู้ครับ

แนวทางที่ดีในการเขียน PHP Framework แบบ MVC

แนวทางและข้อปฏิบัติในการเขียน PHP Framework แบบ MVC (กรณีศึกษา Yii Framework 2)


[Models]
Models เป็นศูนย์รวมเกี่ยวกับข้อมูลของระบบ มีกฎตรวจสอบความถูกต้อง และตรรกะเกี่ยวกับระบบของเรา ใช้สำหรับควบคุมและการทำงานของข้อมูลต่างๆ แน่นอนส่วนใหญ่แล้ว Models โค้ดมักเยอะกว่า Controllers มีแนวทางการเขียน ดังนี้

1. ควรประกอบไปด้วย attributes หรือคุณลักษณะของข้อมูล
2. มีส่วนในการตรวจสอบความถูกต้องของข้อมูล
3. ประกอบไปด้วย method ที่เกี่ยวกับ business logic
4. ไม่มีการเขียนเกี่ยวกับ request, session
5. ไม่มีการเขียนส่วนแสดงผล html แน่นอนให้ไปเขียนที่ views แทน
6. หลีกเลี่ยงการมีหลาย scenarios ใน 1 Models

 

[Views]
Views มีหน้าที่เกี่ยวกับการแสดงผลส่วนหน้าเว็บ ประกอบด้วยการจัดรูปแบบข้อมูล การแสดงผลตาม users ต้องการ มีแนวทางการเขียน ดังนี้
1. ประกอบไปด้วยโค้ดในส่วนของการแสดงผล เช่น HTML และโค้ด PHP สั้นๆ เกี่ยวกับกับการจัดรูปแบบข้อมูล หรือ render ข้อมูล
2. ไม่มีโค้ดเกี่ยวกับการจัดการ การ query ข้อมูลจากฐานข้อมูล ส่วนนี้ให้ไปเขียนที่ Models แทน
3. หลีกเลี่ยงการรับข้อมูลแบบ request เช่น $_GET,$_POST ส่วนนี้แนะนำให้ไปเขียนที่ Controller แทน
4. ให้อ่านและเรียกคุณลักษณะ (properties) ของโมเดล แต่ให้หลีกเลี่ยงการการแก้ไข
5. ถ้าส่วนแสดงผลมีการทำงานซ้ำๆ กัน ก็ควรแยกไปใช้ layout หรือสร้างและใช้งาน widgets ในการสร้าง views เป็น blocks แทน
6. สร้างและใช้งาน helper class ต่างๆ ในการจัดรูปแบบข้อมูล เช่น Html helper, Url Helper เป็นต้น

 

[Controllers]
Controllers มีหน้าที่เกี่ยวกับการประมวลผล requests และ responses เมื่อเขียน Controllers แล้วรู้สึกว่าโค้ดมันเริ่มเยอะ ควรแยกโค้ดบางส่วนแยกเป็นคลาสอื่นดีกว่า มีแนวทางการเขียน ดังนี้
1. มีไว้เขียนเกี่ยวกับ request ข้อมูล เช่น get, post, put
2. มีไว้เรียกเมธอดเกี่ยวกับ Models และ เรียก component ต่างๆ
3. มีไว้ส่งข้อมูลต่างๆ ไปให้ views เพื่อนำไปแสดงผล
4. ไม่ควรมีโค้ดการประมวลผลของ Models ถ้ามีให้ไปเขียนที่ Models ดีกว่า
5. หลีกเลี่ยงการเขียน HTML และโค้ดที่เกี่ยวข้องกับการแสดงผลข้อมูล ให้ไปเขียนที่ views ดีกว่า

 

[Security best practices]
(แนวทางการเขียนเพื่อความปลอดภัยของระบบ) มีแนวทางดังนี้

1. Filter input แน่นอนเราไม่สามารถไว้ใจ input ที่เข้ามาในระบบได้ เราควรเขียนโค้ดเพื่อกรองข้อมูลเหล่านี้โดยใน yii เราสามารถใช้ form validation ได้
2. ระวังเรื่อง SQL injections แน่นอนควรใช้การ prepared statements โดยใน yii มีส่วนจัดการฐานข้อมูลให้อยู่แล้ว ได้แก่ Active Record (มี prepared statements มาพร้อมแล้ว)
และมีในส่วนของ Database Access Objects และ Query Builder (อันนี้ต้องเขียนในส่วน prepared statements ระวังด้วยครับ)
3. ระวัง XSS หรือ cross-site scripting แนวทางการป้องกันมี 2 วิธีง่ายๆ ได้แก่
3.1 ใช้คลาส Html helper และเรียก method encode สำหรับการทุกๆการแสดงผล เช่น

3.2 ถ้าส่วนเนื้อหามีโค้ด html ติดมาด้วยให้ใช้คลาส HtmlPurifier และเรียกใช้ method process เข้าช่วยครับ เช่น

3.3 ให้เปิดในส่วนของ CSRF เพื่อป้องกันการปลอม request
3.4 อย่าลืมปิดเครื่องมือเกี่ยวกับการ debug เมื่อจะเอาขึ้นใช้งานจริง (กำหนด YII_DEBUG ให้เป็น false)

 

เป็นไงกันบ้างครับ ลองเอาไปใช้ดูได้นะครับ 🙂

20 แนวทางการเขียน JavaScript ที่ดี

javascript-736400_640

1. ใช้เครื่องหมาย === และ !== แทนการใช้ == และ != เมื่อมีการเปรียบเทียบเสมอ

2. ปิดท้ายคำสั่งด้วยเครื่องหมาย ; ทุกครั้ง

3. ใช้ JSLint (http://www.jslint.com) ในการหาตรวจสอบคุณภาพโค้ด และตรวจดู errors ต่างๆ

4. ถ้ามีการเปิด blocks ของโค้ด ให้เขียนวงเล็บปีกกาในบรรทัดเดียวกัน เช่น

5. การประกาศตัวแปร (Variables) ให้ประกาศบรรทัดแรกทุกครั้งโดยเฉพาะฟังก์ชันเพื่อป้องกันปัญหาเรื่อง global variable เช่น

6. การประกาศตัวแปรให้ขึ้นต้นด้วย var ทุกครั้ง

7. ใช้วงเล็บปีกกา {} เสมอในกรณีที่ประกาศบล็อกมากกว่าหนึ่งบล็อก (blocks) ถ้ามี 1 บล็อกก็ให้อยู่บรรทัดเดียวกัน เช่น

8. การ embed โค้ด แทรกโค้ด javascript ให้แทรกด้านล่างของหน้าเว็บเสมอ (ก่อน tag body)

9. ประกาศตัวแปรต่างๆ ไว้นอกคำสั่ง for เสมอ เมื่อประกาศแล้ว ค่อยนำมาใช้ใน for เช่น

10. อย่าเอาคำสั่งที่เป็นตัวอักษร (String) ไปไว้ในคำสั่ง “SetInterval” หรือ “SetTimeOut” เช่น

ให้เขียนเป็นฟังก์ชันแล้วเรียกใช้ดีกว่า

11. ถ้าจะสร้าง Object ใหม่ให้ใช้ {} ปีกกา แทนการใช้ New Object() เช่น

12. Arrays ก็เช่นกันให้ใช้ [] แทน New Array()

13. ลบคำว่า “language” ออกจากคำสั่ง script เพราะมันไม่จำเป็นแล้ว
จาก

เขียนแค่นี้พอ

หรือ

14. ถ้าประกาศ Objects อย่าใช้คำสงวน เป็นคีย์ (key) เพราะมันจะใช้ไม่ได้ใน IE8

15. ใช้ฟังก์ชัน push ของ Array ในการกำหนดค่าเข้าไปในแทนการใส่ค่าโดยตรง เช่น

16. ใช้เครื่องหมาย Single quotes (‘) สำหรับสตริง (String) เช่น

17. ใช้เครื่องหมายจุด . ในการเข้าถึงพรอพเพอร์ตี้ (properties) ของ Objects เช่น

ตอนเข้าถึง properties ให้เรียกแบบนี้

18. ใช้หนึ่ง var หรือหนึ่ง let ต่อหนึ่งตัวแปร เพราะดูง่าย และป้องกันความผิดพลาด เช่น

19. ตัวแปรที่ยังไม่มีค่า ให้ประกาศไว้ข้างหลังสุดของการประกาศตัวแปรทั้งหมด เช่น

20. ใช้การเขียนโค้ดแบบ camelCase คือ ขึ้นต้นด้วยตัวเล็กและคำต่อไปขึ้นต้นด้วยตัวใหญ่ เมื่อต้องการตั้งชื่อออบเจ็กต์, ฟังก์ชัน, และ อินสแตนซ์ และ ใช้ PascalCase คือ ขึ้นต้นทุกคำด้วยตัวใหญ่ เมื่อต้องการตั้งชื่อ constructor หรือ คลาส

แน่นอนทั้ง 20 ข้อนี้บางข้อเป็นเพียงข้อแนะนำ ก็ลองปรับให้เข้ากับตัวเองดูนะครับ 🙂

6 เทคนิคการเขียนคำสั่ง PHP ให้ทำงานเร็วขึ้น

1. ใช้เครื่องหมายคอมม่า (,) แทนเครื่องหมายจุด (.) ในการเชื่อมต่อ string เช่น

2. เมื่อต้องการแสดงตัวแปรให้ใช้เครื่องหมาย Double Quotes ครอบไว้เร็วกว่า เช่น

3. ถ้าแสดงผลเฉพาะ string อย่างเดียวไม่มีตัวแปรข้างใน ใช้ single quotes ( ‘ ‘ ) เร็วกว่า double quotes(“”) นะ เช่น

4. ถ้ามี array เยอะๆ การวนลูปแนะนำให้ใช้ foreach (เร็วที่สุด) ตามด้วย while และ for ตามลำดับ

5. การอ่านหรือเปิดไฟล์ ฟังก์ชัน file_get_contents() เร็วกว่า fread() ทั้งไฟล์เล็กและไฟล์ขนาดใหญ่<br />

6. เลิกใส่เครื่องหมาย @ ไว้หน้าคำสั่ง เพื่อหยุด Error มันทำให้การทำงานช้าลงนะ<br />

อันนี้เน้นเฉพาะการเขียนโค้ดนะ จริงๆต้องปรับส่วนอื่นๆด้วยนะครับ เช่น Web Server, Database เป็นต้น 🙂