แนะนำเว็บไซต์ สอนเขียน PHP

โดย SONGCHAI SAETERN
เป็นบล็อกที่รวบรวมเทคนิคที่ตัวผมเองใช้เขียนโปรแกรม PHP พัฒนาเว็บแอพพลิเคชั่นด้วยสคริปต์ต่างๆ เช่น JavaScript, jQuery, HTML, CSS และการใช้งานฐานข้อมูล MySQL, PostgreSQL

สอนเขียนโปรแกรม PHP รวมเทคนิคและสคริปต์ต่างๆ

ติดตามงานเขียนของผมได้ที่
http://sunzandesign.blogspot.com/

Daily Report ตอนที่ 6 : ทำความเข้าใจกับ MVC โดยการสร้างไฟล์ Controller, View, Model

โดย SONGCHAI SAETERN


ระบบบันทึกการปฏิบัติงานประจำวัน
[PHP CodeIgniter + PostgreSQL]
ตอนที 6 : สร้างไฟล์ Controller, View, Model



หลังจากที่ได้ดาวน์โหลด CodeIgniter 3.0 มาเรียบร้อยในวิดีโอที่แล้ว
ในวิดีโอนี้เราจะมาเริ่มทำความคุ้นเคยกับการ
เขียน PHP ใน CodeIgniter Framework กันสักที


Daily Report ตอนที่ 5 : ดาวน์โหลด CodeIgniter และทดสอบใช้งานหน้า Welcome

โดย SONGCHAI SAETERN

ระบบบันทึกการปฏิบัติงานประจำวัน ตอนที่ 5

1. ดาวน์โหลด CodeIgniter Framework
2. คลายซิปไฟล์ แล้วนำไปวางใน Document Root (เว็บเซิร์ฟเวอร์แต่ละตัวจะไม่เหมือนกัน)
3. ทดลองเข้าใช้งานผ่านหน้าเว็บ http://localhost/ชื่อโฟลเดอร์ของเรา
4. อ่านคู่มือการใช้งานได้ที่ http://localhost/ชื่อโฟลเดอร์ของเรา/user_guide
    Model - http://www.codeigniter.com/user_guide/general/models.html
    View - http://www.codeigniter.com/user_guide/general/views.html
    Controller - http://www.codeigniter.com/user_guide/general/controllers.html

ที่เหลือก็คือลองอ่านและทำความเข้าใจกับส่วนอื่นๆ ในคู่มือ เช่น Database Reference Helpers  Input Class  URI Class   Session Library 

Daily Report ตอนที่ 4 : ออกแบบฐานข้อมูล PostgreSQL [4/4]

โดย SONGCHAI SAETERN

คอร์สระบบบันทึกการปฏิบัติงานประจำวันออกแบบฐานข้อมูล 4/4 : สร้างฐานข้อมูล ตารางต่างๆด้วย  phpPgAdmin














ติดตามคอร์สได้ที่ : ระบบบันทึกการปฏิบัติงานประจำวัน ด้วย PHP + CodeIgniter Framework

ติดตั้ง PHP 7.0 แล้วใช้ phpMyAdmin เวอร์ชั่นล่าสุดไม่ได้ ขึ้นข้อความเตือน The mbstring extension is missing

โดย SONGCHAI SAETERN

 เครื่องที่ใช้ Ubuntu 14.04, PHP 7.0.3, MySQL 5.5


The mbstring extension is missing

UBUNTU แก้ด้วยการติดตั้ง mbstring เพิ่มเข้าไป

sudo apt-get install php7.0-mbstringsudo service apache2 restart

หากติดตั้งแล้วปรากฏข้อความใน Terminal ว่าไม่พบแพ็กเกจ ให้ติดตั้ง repository เพิ่มเข้าไป

sudo add-apt-repository ppa:ondrej/php
sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

หลังจากนั้นก็อัพเดตแพ็กเกจ
sudo apt-get update
แล้วก็ติดตั้ง mbstring อีกครั้ง

sudo apt-get install php7.0-mbstring

รีสตาร์ทเซอร์วิสแล้วทดสอบเข้าใช้งาน phpMyAdmin อีกครั้ง
sudo service apache2 restart

ผลลัพธ์ที่ได้

Daily Report ตอนที่ 3 : ออกแบบฐานข้อมูล PostgreSQL [3/4]

โดย SONGCHAI SAETERN

คอร์สระบบบันทึกการปฏิบัติงานประจำวันตอนที่ 3/4 เพิ่มรายชื่อตารางที่จะต้องใช้พร้อมทั้งชื่อฟิลด์ให้ครบ







สารบัญ : ระบบบันทึกการปฏิบัติงานประจำวัน ด้วย PHP + CodeIgniter Framework

Daily Report ตอนที่ 2 : ออกแบบฐานข้อมูล PostgreSQL [2/4]

โดย SONGCHAI SAETERN



การกำหนดฟิลด์ที่ใช้เก็บข้อมูลต่างๆ ในแต่ละตาราง




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





สารบัญ : ระบบบันทึกการปฏิบัติงานประจำวัน ด้วย PHP + CodeIgniter Framework

การติดตั้งฐานข้อมูล PostgreSQL และ pgAdmin บน Ubuntu 15.10

โดย SONGCHAI SAETERN
การติดตั้งฐานข้อมูล PostgreSQL และโปรแกรมแกรมจัดการฐานข้อมูล pgAdmin 3 เพื่อใช้สร้างฐานข้อมูลบนเครื่องตัวเอง ในระบบปฏิบัติการ Ubuntu 15.10



JavaScript Template Engine : ลดภาระฝั่งเซิร์ฟเวอร์ โดยการใช้ จาวาสคริปต์แสดงผลแทน

โดย SONGCHAI SAETERN


หลังจากที่ใช้ CodeIgniter ก็เกิดชื่นชอบใน "Template Parser Class" ก็เลยทดลองใช้งาน แล้วก็พบว่า PHP + Array เป็นอะไรที่เข้ากันจริงๆ และช่วงนั้นก็อยากจะเขียนสคริปต์ที่ลดภาระของเซิร์ฟเวอร์ให้เบาลงบ้าง โดยอาศัยหลักการใช้ JavaScript ช่วยแสดงผลแทนคำสั่งของ PHP

ซึ่งตอนนี้ก็มีจะมี AngularJS ที่ตอบโจทย์ข้อนี้อย่างมาก เพียงแต่ว่าผมไม่ได้ต้องการความสามารถทั้งหมดแค่ต้องการแค่ส่วนของ Template เท่านั้น ก็เลยเขียนมันขึ้นมาเองแบบบ้านๆซะเลย ^O^


 

ติดตั้ง PostgreSQL และ phpPgAdmin เพื่อใช้งานฐานข้อมูล

โดย SONGCHAI SAETERN
คำที่ใช้ค้นหาวิธีติดตั้ง PostgreSQL บนเว็บ Koding.com คือ "koding.com install postgresql"

จะพบกับลิงค์ไปยังหน้าเพจ http://www.koding.com/docs/installing-postgresql
(ซึ่งลิงค์อาจจะมีการเปลี่ยนแปลงได้)




สำหรับ phpPgAdmin จะเป็นระบบที่เขียนขึ้นมาเพื่อจัดการฐานข้อมูลทำงานคล้ายกับ phpMyAdmin ที่เราใช้งานกับ MySQL เข้าไปดาวน์โหลดได้ที่

http://phppgadmin.sourceforge.net/doku.php?id=download

ให้ดาวน์โหลดเป็นนามสกุลหรือส่วนขยายเป็น .zip เพื่อใช้กับ Koding.Com

ระบบบันทึกการปฏิบัติงานประจำวัน ด้วย PHP + CodeIgniter Framework

โดย SONGCHAI SAETERN

สิ่งที่จะได้เรียนรู้

1. การใช้งาน CodeIgniter Framework
  • การสร้าง Model, View, Controller
  • การสร้างตัวแบ่งหน้าด้วย Pagination ที่มีให้แล้ว
  • การสร้าง Method/Function เพื่อลดความซ้ำซ้อนของโค้ด
 2. การออกแบบฐานข้อมูล
  • หลักการ Normalization หรือ การแยกข้อมูลในกระดาษ ให้มีโครงสร้างเป็นระเบียบอยู่ในฐานข้อมูล เพื่อลดความซ้ำซ้อนของข้อมูล (ข้อมูลซ้ำกันมากๆอย่างไม่จำเป็นขนาดก็ใหญ่ตามไปด้วย)
  • การสร้างฐานข้อมูลด้วย PostgreSQL และจัดการข้อมูลด้วย PgAdmin 3
  • การเชื่อมโยงตารางที่เกี่ยวข้องกันด้วยคำสั่ง JOIN เพื่อแสดงชื่อหรือข้อมูลต่างๆของหลายๆตารางมาแสดงผลรวมกัน
3. การพิมพ์รายงานในรูปแบบ PDF 
  • การเรียกใช้ Libraries จากที่อื่นเข้ามาใน CodeIgniter
  • การใช้งาน TCPDF สร้างเอกสาร PDF จาก HTML
4. อื่นๆ
  • การใช้งาน jQuery
  • การใช้งาน Bootstrap
  • การเขียน JavaScript แบบ OOP

คีย์เวิร์ดวันละคำวันนี้ jQuery, how do you find only visible

โดย SONGCHAI SAETERN
Green Leaf Pattern 01
© Photographer: Sunzandesign | Agency: Dreamstime.com

คีย์เวิร์ดวันละคำ วันนี้ ขอเสนอคำว่า


"jquery selector visible only"


ถามว่าทำไมถึงต้องค้นหาคำนี้
คำตอบก็คือ เพราะบางครั้งเราก็จะต้อง filter หรือค้นหาแค่รายการที่เราต้องการ ส่วนที่เหลือก็ซ่อนเอาไว้ เมื่อใช้คำสั่งเลือกทั้งหมดให้มีผลกับตัวที่เรา filter ไว้เท่านั้น แต่ดันไปมีผลกับทุกตัวรวมถึงที่ซ่อนไว้


เช่นนั้นแล้วการ filter ของเราจะมีประโยชน์อะไร


#Bug ไม่ต้องการเวลา


https://api.jquery.com/visible-selector









PHP Array การออกแบบฐานข้อมูลและเขียนโปรแกรมแสดงหมวดหมู่สินค้า แบบมีหมวดหมู่ย่อยไม่จำกัด

โดย SONGCHAI SAETERN

ดูวิธีการใช้งานแบบเต็มๆที่ PHP กับจัดการฐานข้อมูลหมวดหมู่สินค้า MySQL แบบใช้ตารางเพียงตารางเดียวเท่านั้น 

 

1. สร้างตารางเก็บข้อมูลหมวดหมู่สินค้า

    ส่วนที่สำคัญก็คือ การเพิ่มฟิลด์เพื่อใช้สำหรับอ้างอิงหมวดหมู่หลักของรายการนั้นๆ

ตาราง tb_category
1. id               รหัส primary key
2. name         ชื่อหมวดหมู่
3. parent_id    รหัสของหมวดหมู่หลัก (ถ้าไม่มีให้ใส่ 0)

2. ออกแบบ Array สำหรับเก็บข้อมูลที่ Query จากฐานข้อมูล

    ในขั้นตอนปกติทั่วไป ผมจะใช้วิธีดึงข้อมูลเป็นทอดๆ โดยคิวรี่ไปเรื่อยๆ

2.1 หาหมวดหมู่หลัก WHERE parent_id = 0
2.2 ใน While Loop ให้หาหมวดหมู่ย่อยของแต่ละรายการด้วย WHERE parent_id = id

จากรูปแบบข้อมูลของ category ในความเป็นจริงก็คือ เราต้องการทุกรายการอยู่แล้ว และหากเป็นการ Query ซ้อน Query ก็จะทำให้ MySQL ต้องทำงานหนัก ลองนึกภาพถ้าหมวดหมู่หลัก 1 หัวข้อ มีหมวดหมู่ย่อยของหมวดย่อยโดยเฉลี่ย 3 ชั้น ก็จะเท่ากับต้องคิวรี่ 4 ครั้งในแต่ละหมวด

ดังนั้น ถ้ามี 10 หมวดหลัก ก็เท่ากับว่าต้องคิวรี่ 40 ครั้งจึงจะได้ข้อมูลครบถ้วน

งั้นเรามาลดการทำงานของ MySQL ด้วยการ Query ครั้งเดียวแล้วยัดมันเข้าไปใน Array กันดีกว่า

while($row=ดึงข้อมูลแต่ละเรคอร์ด){
    $category[ไอดี] = $row;
}

ตอนนี้เรามี $category ที่เก็บข้อมูลครบถ้วนแล้ว

แต่สิ่งที่เราต้องการคือข้อมูลที่แยกหมวดหมู่แล้วนะ งั้นก็มาดูกันหน่อยว่า รายการไหนเป็นหมวดย่อยบ้าง และก็จัดการสร้างคีย์ "sub" ให้กับรายการนั้นๆที่เป็นหมวดหลักของเราไปเลย

while($row=ดึงข้อมูลแต่ละเรคอร์ด){
     if($row['parent_id'] > 0){
          $category[$row['parent_id']]["sub"][] = $row;
     }else{
          $category[$row['id']] = $row
     }
}

แค่นี้รายการต่างๆก็อยู่เข้าที่เข้าทางเรียบร้อย ที่เหลือก็คือการ วนลูปแสดงมันออกมา

 แต่เราต้องสร้างฟังก์ชั่นในการแสดงข้อมูลรอไว้ก่อนนะ เพระถ้ารายการไหนเป็น sub เราจำเป็นต้องส่งเข้าฟังก์เดิมอีกครั้งไปเรื่อยๆ รู้สึกว่าเขาจะเรียกว่า RECURSIVE Function

function displayCategory($data){
    echo '<hr>';
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    if(isset($data['sub']){
        displayCategory($data['sub']);   //RECURSIVE Function
    }
}

foreach($category as $id=>$row){
    displayCategory($row);
}

 ที่จะแนะนำทั้งหมดก็มีแค่นี้แหละ แต่ถ้าสงสัยหรือรันแล้ว Error เราจะเจอกันใหม่อีกครั้งนะ ^^"
สำหรับวิดีโอสาธิตขั้นตอนการเขียนโค้ดและแสดงผลแบบทีละสเต็ปเอาไว้จะอัพเดตอีกที

ดูวิธีการใช้งานแบบเต็มๆที่ PHP กับจัดการฐานข้อมูลหมวดหมู่สินค้า MySQL แบบใช้ตารางเพียงตารางเดียวเท่านั้น




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/

jQuery filter Case insensitive : ค้นหาอีลิเมนต์ที่ต้องการด้วย jQuery

โดย SONGCHAI SAETERN


ก่อนหน้านี้ผมเคยแนะนำวิธีค้นหาข้อมูลด้วย :contains() Selector ใน jQuery แต่ปรากฏว่างานผมถูกตีกลับครับ ทดสอบแล้วไม่เป็นดังที่ต้องการ เพราะ


text: A string of text to look for. It's case sensitive.


ครับ มันสนใจตัวอักษร ระหว่างตัวเล็กกับตัวใหญ่ด้วย

<p>I am Cyberman</p>


ถ้าผมต้องการค้นหา <p> ที่มีคำว่า cyberman การใช้ contains จะค้นไม่เจอครับ ต้องให้เหมือนทุกคำ คือ จะเจอก็ต่อเมื่อค้นคำว่า Cyberman



ดังนั้น ก็ต้องเปลี่ยนตามลิงค์นี้แหละครับ ^^"

http://stackoverflow.com/questions/7853851/jquery-how-can-i-write-a-case-insensitive-attribute-contains-selector

หลังจากที่ใช้โค้ดใหม่ก็เป็นดังนี้
$('tr').hide();//ซ่อนทั้งหมด

var myCode = $('#my_code').val();
var reg = RegExp(myCode ,"i"); 
$('.select_item').filter(function() {
     return reg.test(this.value);
}).parents('tr').show();//แสดงตามรายการที่ตรง my_code

เพียงเท่านี้ ทุกแถวที่มีคำตรงกับ my_code ก็จะแสดงส่วนแถวที่ไม่ตรงก็จะถูกซ่อนไว้ตามเดิม