PHP CI MANIA 0.8.4.09 แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ + เพิ่มตัวเลือก Validate บางฟิลด์

โดย SONGCHAI SAETERN •
- เพิ่มตัวเลือก Validate บางฟิลด์ กรณีละเว้นการตรวจสอบให้เอาเครื่องหมายเช็คถูกออก


-  แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้




สมาชิก Premium ดาวน์โหลดได้ที่
http://fastcoding.phpcodemania.com/index.php/downloads




PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com



PHP CI MANIA 0.8.4.08 อัพเดตเมนูตรวจสอบโครงสร้างฐานข้อมูล (Database Structure Compare)

โดย SONGCHAI SAETERN •
เมนูสำหรับตรวจสอบ เปรียบเทียบโครงสร้างเก่า-ใหม่ เพื่อให้การอัพเดต Code ขึ้น Server ไม่เกิดข้อผิดพลาดด้านโครงสร้างฐานข้อมูล

1. จะมีเมนู "ตรวจสอบโครงสร้างฐานข้อมูล" เพิ่มเข้ามา ให้เลือก
       ด้านซ้าย คือ โครงสร้างที่มีการเปลี่ยนแปลงใน Localhost
       ด้านขวา คือ โครงสร้างที่ Export ออกมาจาก Server ที่ใช้งานจริง

2. เมื่อเลือกฐานข้อมูลที่ต้องการเปรียบเทียบให้กดที่ปุ่ม "Start Check" ถ้าโครงสร้างมีการเปลี่ยนแปลง จะมีข้อความหมายเหตุสีน้ำเงินให้แต่ละตาราง

3. กดปุ่ม "CREATE SQL" เพื่อเริ่มสร้างคำสั่ง SQL สำหรับนำไปอัพเดตบน Server ที่ใช้งานจริง เพื่อให้ตรงกับโครงสร้างใหม่ที่เปลี่ยนแปลงใน Localhost (ท่านสามารถตรวจสอบและอัพเดตด้วยตนเองทีละส่วน โดยไม่ต้องสร้าง SQL อัตโนมัติในข้อต่อไป)

4. จะได้คำสั่งเพื่อนำไปอัพเดตโครงสร้างในฐานข้อมูลด้วย phpMyAdmin หรือกรณี Server ภายใน สามารถใช้โปรแกรมจัดการฐานข้อมูลที่ท่านถนัด เช่น HeidiSQL ในการรันคำสั่งเพื่ออัพเดต

*** ให้ทดสอบรัน SQL บน Localhost ก่อนทุกครั้งเพื่อให้แน่ใจว่าไม่เกิด Error เมื่อนำไปใช้บน Server จริงนะครับ และกรณีที่คำสั่ง SQL เป็นเวอร์ชั่นเก่าไม่สามารถใช้งานได้ ให้ท่านเข้าไปแก้ไขด้วยตนเองผ่านโปรแกรมจัดการฐานข้อมูลที่ท่านใช้ปกติ เพื่อไม่ให้เกิดข้อผิดพลาดกับฐานข้อมูลของท่าน ***


********* คำเตือน หากไม่แน่ใจว่าคำสั่ง SQL ที่ได้มาจะใช้ได้กับฐานข้อมูลของท่าน  ********* 
********* ให้ท่านอัพเดตด้วยตนเอง ห้ามนำคำสั่ง SQL ไปรันโดยเด็ดขาด ********* 




สมาชิก Premium ดาวน์โหลดได้แล้วที่
http://fastcoding.phpcodemania.com/index.php/downloads







PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com

PHP array_chunk() เทคนิคการเขียนโปรแกรมแสดงผล แบบแบ่งตารางหลายคอลัมน์ โดยสร้าง TD ในตารางตามจำนวนคอลัมน์ที่ต้องการ

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



สำหรับเทคนิคการแสดงผลแบบแบ่งหลายคอลัมน์นั้น ยังนิยมอย่างมากในการทำแกลอรี่รูปภาพ ซึ่งตัวอย่างที่นำมาให้ดูนี้อาจจะคุ้นตามกันอยู่แล้ว เป็นบทความที่นำมาจากเว็บไซต์ ThaiCreate.Com

PHP MySQL Multiple Column 

จากตัวอย่างกำหนดให้ $intRows นับจำนวนรายการที่ดึงออกมาจากฐานข้อมูล

 จะมีคำสั่งที่ใช้ตรวจสอบจำนวนคอลัมน์ว่าครบหรือยังเพื่อขึ้นบรรทัดใหม่โดยตรวจสอบ

24.
25.if(($intRows)%2==0)
26.{
27.echo"</tr><tr>";
28.}

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

จัดระเบียบซอร์สโค๊ด PHP ลดการ query ฐานข้อมูล MySQL ลดภาระเซิร์ฟเวอร์ให้น้อยลง (คิวรี่ซ้อนคิวรี่)

โดย SONGCHAI SAETERN •
การเขียนโปรแกรมด้วยภาษา php เป็นภาษาที่ยืดหยุ่น และผมถนัดที่สุด เพราะเราสามารถออกแบบการทำงานได้ง่ายกว่าภาษาอื่น ที่ผมเขียนเป็น เรื่องตัวแปรก็ยืดหยุ่น เรียกใช้ง่าย

บทความนี้จะนำเสนอเทคนิคการเขียนโปรแกรม ที่ช่วยลดจำนวนครั้งในการคิวรี่ฐานข้อมูลน้อยลง เพื่อเป็นการลดภาระของฐานข้อมูล MySQL ให้ใช้ CPU ประมวลผลน้อยลง

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



กรณีที่ต้องแสดงข้อมูลหลายเรคอร์ดเรามักจะเจอ fatal error “Allowed memory size exhausted” ข้อความนี้อยู่เป็นประจำ จึงเป็นเหตุผลให้เราต้องแบ่งหน้าการแสดงผล เพื่อให้แสดงผลเร็วขึ้น และไม่ใช้หน่วยความจำเกินขีดจำกัดที่เซิร์ฟเวอร์มีให้

และขั้นตอนการเขียนโปรแกรมที่จะช่วยลดจำนวนการคิวรี่เพื่อให้ MySQL ทำงานได้เร็วขึ้นมีดังนี้


1. ตัดส่วนที่ต้องคิวรี่เพื่อดึงข้อมูลในลูปออกมาไว้นอกลูป

วิธีนี้จะสามารถใช้ได้กับ ตารางข้อมูลที่ข้อมูลตายตัว หรือมีการเพิ่มข้อมูลไม่บ่อย และจะไม่เกินหลักพัน ประมาณนี้

2. สร้างอาร์เรย์เก็บข้อมูลของตารางที่ต้องคิวรี่ในลูปนี้ เอาไว้เรียกใช้ในลูปแทนการคิวรี่จากฐานข้อมูล

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



การเขียนโค๊ด PHP แบบเดิม (เรียกข้อมูลในลูป)

<?php
$no = 0;
$sql = "SELECT * FROM booking WHERE month = '04' ";
//*** คิวรี่ครั้งที่ 1 ***
$result = mysql_query($sql);
while( $rs = mysql_fetch_assoc($result) ){

$dpId = $rs["book_department_id"];
//*** คิวรี่ครั้งที่ 2 ***
$qry = mysql_query("SELECT department_name FROM tb_department WHERE department_id = '".$dpId."' ");
$rsDp = mysql_fetch_assoc($qry);
$departMentName = $rsDp["department_name"];

echo "<br/>", $departMentName;
}
?>
คิวรี่ครั้งที่ 1 :: คือการเรียกข้อมูลการจองของเดือนเมษายน
คิวรี่ครั้งที่ 2 :: คือการการเรียกชื่อแผนกที่พนักงานคนที่รับจองสังกัดอยู่ 
ซึ่งถ้าเดือนเมษายนมีการจอง 50 รายการ ก็จะเรียกคำสั่งคิวรี่ทั้งหมด 50 ครั้ง



การเขียนโค๊ด PHP แบบใหม่ (แยกส่วนที่เรียกข้อมูลในลูป ออกมาไว้นอกลูป)

<?php
//รายชื่อแผนกทั้งหมด
$allDepart = array();
//*** คิวรี่ครั้งที่ 2 ***
$qry = mysql_query("SELECT department_id, department_name FROM tb_department");
while($rsDp = mysql_fetch_assoc($qry)){
$allDepart[$rsDp['department_id ']] = $rsDp['department_name']
}

$no = 0;
$sql = "SELECT * FROM booking WHERE month = '04' ";
//*** คิวรี่ครั้งที่ 1 ***
$result = mysql_query($sql);
while( $rs = mysql_fetch_assoc($result) ){
$dpId = $rs["book_department_id"];
$departMentName = isset($allDepart[$dpId]) ? $allDepart[$dpId] : $dpId;
 
echo "<br/>", $departMentName;
}
?>
คิวรี่ครั้งที่ 1 :: คือการเรียกข้อมูลรายชื่อแผนกทั้งหมด
คิวรี่ครั้งที่ 2 :: คือการเรียกข้อมูลการจองของเดือนเมษายน ถึงแม้เดือนนี้จะมี 50 รายการ แต่การคิวรี่จะเกิดขึ้นเพียง 2 ครั้งเท่านั้นเพราะรายชื่อแผนกทั้งหมดเก็บไว้ในอาร์เรย์ $allDepart แล้ว ซึ่งเรียกใช้ด้วยไอดีทันที



จากตัวอย่างการเขียนโค๊ดสองกรณีนี้ คงพอจะเห็นถึงความแตกต่างแล้วนะครับ กรณีเรียกข้อมูลทั้งหมดมาเก็บในตัวแปล $allDepart ถามว่าจะทำงานช้าไปรึเปล่า บอกได้เลยว่าไม่ช้าครับ แต่จะเปลือง RAM เยอะหน่อยถ้าเก็บข้อมูลเยอะมากๆ ^^;

ผมเคยทดสอบกับข้อมูลตารางที่มีฟิลด์มากกว่า 50 ฟิลด์ เก็บข้อมูลมากกว่า 50,000 เรคอร์ด
และเรียกโดยการ SELECT * FROM table มาเก็บในตัวแปรอาร์เรย์ใช้เวลาเพียงไม่กี่วิครับ
แต่ทดสอบกับเซิร์ฟเวอร์ภายในนะครับ ไม่ได้ทดสอบผ่านอินเตอร์เน็ต แต่ถึงอย่างไรก็เร็วกว่ากรณีแรกอยู่ดีครับ


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



ตัวอย่างเพิ่มเติมของการใช้ Array เก็บข้อมูลเพื่อใช้อ้างอิงแทนการ Query หรือ JOIN โดยตรง
- การทำ Index ให้ MySQL Database เพื่อเพิ่มความเร็ว 







PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com



PHP เบื้องต้น | รวมวิดีโอสอนเขียนโปรแกรม PHP & MySQL

โดย SONGCHAI SAETERN •
1. พื้นฐาน PHP





2. PHP MySQLi CRUD : การจัดการฐานข้อมูล MySQL เบื้องต้น













    






    




4. การจัดการฐานข้อมูล MySQL และการดึงรายงานแบบต่างๆ











5. ตัวอย่างการสร้างคลาส CRUD จัดการฐานข้อมูลด้วย PDO












PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com