ข้ามไปที่เนื้อหาหลัก

บทความ

กำลังแสดงโพสต์จาก มกราคม, 2018

MySQL กับการ JOIN กลุ่มข้อมูลแบบเลือกรายการเดียว ที่ช่วงเวลาเปิดใช้งานสัมพันธ์กัน

จากบทความ  Retrieving the last record in each group   จะเป็นการ JOIN แบบเลือกรายการล่าสุด เช่นกรณีที่ข้อมูลในตารางหลัก มีการเปลี่ยนแปลงรุ่น เปลี่ยนเวอร์ชั่น แต่ยังคงใช้รหัสเดิม และต้องการแค่ข้อมูลเวอร์ชั่นล่าสุดเรคอร์ดเดียวเท่านั้น นอกจากนี้ยังมีอีกกรณี นั่นก็คือ เมื่อเราย้อนกลับไปดูข้อมูลที่เคยบันทึกเอาไว้ โดยอ้างอิงรหัสเดียวกัน ที่ปัจจุบันได้เปลี่ยนเวอร์ชั่นไปแล้ว ข้อมูลที่ JOIN มาจะแสดงอย่างไร??? จะรู้ได้อย่างไรว่า  ณ วันที่นั้นๆ ใช้ข้อมูลเรคอร์ดไหน??? ( ถ้าเราเก็บไอดี PK ไปเลยจะไม่เจอปัญหานี้ แต่เนื่องจากฟิลด์ Code ดันเป็น Unique ID ซึ่งยึดเป็น PK ไปในตัวก็เลยคิดว่าไม่จำเป็นต้องสร้าง ID ขึ้นมาอีก ) ตัวอย่างข้อมูลที่เคยบันทึกไว้ด้วยชื่อหมวดหมู่ก่อนการเปลี่ยนแปลง กรรไกรสองรายการ ที่ใช้หมวดหมู่เดียวกัน แต่คนละปี กรรไกรตัดกิ่ง   ณ วันที่ 2017-06-01 ได้ทำรายการด้วยชื่อ  " วัสดุทำสวน " กรรไกรเล็ก        ณ วันที่ 2018-01-31 ได้ทำรายการด้วยชื่อ  " วัสดุอุปกรณ์ทำสวน " SELECT * FROM product WHERE name LIKE '%กรรไกร%' เรามาดูข้อมูลเมื่อ JO

CodeIgniter ล็อกอินไปสักพัก Session ก็หมดอายุ

 ทำไม SESSION ใน CodeIgniter ถึงหมดอายุเร็วมากๆ!?? งง??? อยู่นานมากๆ จำได้ว่าเคยเจอปัญหานี้เมื่อครั้งที่เริ่มใช้ CodeIgnier ใหม่ๆ (จนกระทั่งเดี๋ยวนี้ก็ยังเป็นอยู่นะ ^^;) เมื่อครั้งที่ใช้ Version 2 แค่เปลี่ยนจาก Files ไปเป็น Database ก็หาย แต่ตอนนี้เกิดขึ้นอีกแล้วววววว >O< สรุปแล้วก็คือเกิดจากชื่อของ SESSION มันไปตรงกันกับ project อื่นๆ แล้วในฐานข้อมูล SESSION ดันใช้ Database ตัวเดียวกัน ci_sessions เพราะมีเหตุจำเป็นต้องใช้ฐานข้อมูลเดียวกัน PROJECT 1 ใช้ db_project.ci_sessions PROJECT 2 ใช้ db_project.ci_sessions เช่นกัน!! ดังนั้นเวลาเปิดหน้าเว็บ Project 2 ก็จะเกิดการสร้าง session id ใหม่ที่ตาราง ci_sessions เดียวกัน ดังนั้นใน Project 1 ก็จะโดนตัดไปโดยปริยาย วิธีแก้ไขปัญหานี้ก็คือ 1. หลีกเลี่ยงการใช้ Database และ Table ตัวเดียวกันในการเก็บ SESSION 2. เปลี่ยน sess_cookie_name ให้เป็นชื่อที่ไม่ซ้ำกันใน config/config.php ของแต่ละ Project ขอให้สนุกกับการเขียนโปรแกรม PHP ด้วย CodeIgniter Framework นะครับ PHP  CI  MANIA   -  PHP Code Generato

ตัวแสดงจำนวนสินค้าในตะกร้าสินค้า (Shopping cart Counter)

Cart counter การใช้งานไอคอนแสดงตัวนับจำนวนสินค้าในตะกร้าสินค้านี้ จะต้องใช้ Bootstrap Framework เข้ามาช่วยในการจัดรูปแบบด้วย https://getbootstrap.com/docs/3.3/getting-started/ Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web. ในส่วนของไอคอนแสดงตัวเลขนั้นจะมีโค้ดอยู่ 2 ส่วนด้วยกัน  ส่วนที่ 1 CSS <style> .cart-box{ position: fixed; bottom: 40px; left: 30px; width: 48px; height: 48px; z-index: 2147483000; cursor: pointer; background-position: 50%; } .btn-circle { width: 30px; height: 30px; text-align: center; padding: 6px 0; font-size: 12px; line-height: 1.428571429; border-radius: 15px; } .btn-circle.btn-lg { width: 50px; height: 50px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 25px; } .btn-circle.btn-xl { width: 70px; height: 70px; padding: 10px 16px; font-size: 24px;

วิธีสร้าง Dynamically Controllers ใน CodeIgniter Framework

How to create dynamically controllers function name in codeigniter. 1. แก้ไขไฟล์คอนฟิก application/config/routes.php $route['product/(:any)'] = 'product/show/$1'; 2. สร้างคอนโทรลเลอร์ที่ชื่อ product เอาไว้รับผ่านฟังก์ชั่น show <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Product extends MY_Controller { /** * Index Page for this controller. */ public function show($category='') {     echo $category;//อยากได้ข้อมูลอะไรก็เอาค่าที่ส่งมาไปค้นหา } } 3. ตัวอย่างเช่น      http://localhost/my_project/index.php/product/new  => สินค้าใหม่      http://localhost/my_project/index.php/product/hdd  => ฮาร์ดดิสก์      http://localhost/my_project/index.php/product/ram  => แรม สังเกตว่าเวลาลิงค์ไปหน้า Product ไม่จำเป็นต้องสร้างฟังก์ชั่น new(), hdd(), ram() แต่เราจะวิ่งไปที่ฟังก์ชั่น show() ตามที่กำหนดไว้ในไฟล์ routes.php ที่มา : https://expressionengine.com/forums/archive/topi

แก้ปัญหา base_url() ใน CodeIgniter แสดงแค่โดเมน เข้าไม่ถึง path ของโปรเจ็กต์

การเขียนโปรแกรม PHP ด้วย CodeIgniter Framework ในบางครั้งเราอาจจะเจอปัญหา base_url() ที่เรียกใช้แล้วได้แค่ http://localhost หรือ http://www.your-domain-name.com เท่านั้น เข้าไปไม่ถึงใน Directory ที่ใช้เก็บโปรเจ็กต์ของเรา วิธีแก้ไขก็คือ เข้าไปในไฟล์ config.php แล้วเพิ่มโค้ดด้านล่างนี้เข้าไปแทน application/config/config.php $potocal = 'http' .(( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] == 'on' ) ? 's' : '' ); $directory = str_replace ( '//' , '/' , dirname ( $_SERVER [ 'PHP_SELF' ]). '/' ); $base_url = $potocal . '://' . $_SERVER [ 'HTTP_HOST' ] . $directory ; $config [ 'base_url' ] = $base_url ; แก้ไข  คำสั่งด้านบนนี้ เป็นการหาค่า URL ของหน้าเว็บปัจจุบัน ไม่ได้กำหนดค่า URL ของโปรเจ็กต์ เช่นเมื่ออยู่ใน Controller ชื่อว่า Shop จะได้ http://localhost/soap_station/index.php/shop ดังนั้นเปลี่ยนเป็น $potocal = 'http

แก้ปัญหาการเปิด Firewall ทำให้ Client เชื่อมต่อ MySQL ไม่ได้

"Allow programs to communicate through Windows Firewall" เดิมทีปิด FireWall เอาไว้ โปรแกรมสามารถเชื่อมต่อฐานข้อมูลได้ปกติ หลังจากเปิด Windows Firewall โปรแกรมไม่สามารถเชื่อมต่อฐานข้อมูล MySQL จากเครื่อง Client ได้ แต่เชื่อมผ่าน Localhost ได้ ให้เข้าไปเปิดที่ Control panel > Windows Firewall > Allow a program or feature through Windows Firewall เพื่อกำหนดให้ MySQL ที่เราติดตั้งไว้สามารถทำงานผ่าน Firewall ได้ หลังจากกด OK ลองกลับไปหน้าล็อกอินผ่านโปรแกรมจัดการฐานข้อมูลที่เครื่อง Client อีกครั้ง ท่านใดใช้เครื่องมือจัดการฐานข้อมูลที่เครื่อง Client เชื่อมต่อไปยัง Server แล้วเชื่อมต่อไม่ได้ ลองตรวจสอบการตั้งค่า Windows Firewall ดูนะครับ ข้อสังเกต ไม่ได้เกิดจากการตั้ง Host name ของ MySQL User เพราะตั้งเป็น % เรียบร้อย (คือเชื่อมต่อได้จากทุก iP) แต่ถ้าตั้งค่า Host name แล้วแต่ยังไม่ได้จะมีข้อความแจ้งเตือนอีกแบบ Access denied for '.....'@ 'เลขไอพีหรือComputername' ซึ่งถ้าสั่งคิวรี่คำสั่ง flush

ค้นหาในเว็บไซต์

เนื้อเพลงที่ได้รับความนิยม ในรอบสัปดาห์

การทำ Index ให้ MySQL Database เพื่อเพิ่มความเร็ว

สำหรับตัวอย่างนี้จะเป็นการ JOIN ตาราง 2 ตาราง 1. tb_reject_hd 2. tb_reject_desc ซึ่งจะเชื่อมกันด้วยฟิลด์ docno จะเห็นว่าเราสามารถคิวรี่เรียกข้อมูลออกมาได้ตอนที่ยังไม่ใส่ ORDER BY แต่เมื่อใส่ ORDER BY เข้าไป จะหมุนค้างจนหน้าเว็บหยุดทำงาน จากนั้นก็ลองเพิ่ม INDEX ให้กับฟิลด์ docno ในตาราง tb_reject_desc  ซึ่งในตัวอย่างนี้จะสร้างตารางใหม่ขึ้นมาจากตารางเดิม เปลี่ยนชื่อเป็น tb_reject_desc_with_index และทำการเพิ่ม INDEX KEY เข้าไป เมื่อทดสอบคิวรี่แบบมี ORDER BY จะเห็นว่าสามารถแสดงผลได้ทันที จากการสังเกตตัวเลขเวลาในการประมวลผล จะเห็นได้ว่าแบบไม่ใช้ ORDER BY จะทำงานเร็วกว่า แต่ในการทำงานส่วนใหญ่ก็มักจะต้องใช้ ORDER BY อย่างหลีกเลี่ยงไม่ได้ เช่นกรณีค้นหา แบบเรียงลำดับ ตัวอย่างโค้ดคิวรี่ข้อมูลจากตารางที่ Add Index Key แล้ว <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Add Index Key</title> </head> <body> <h2>ORDER BY with INDE

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

- เพิ่มตัวเลือก Validate บางฟิลด์ กรณีละเว้นการตรวจสอบให้เอาเครื่องหมายเช็คถูกออก -  แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ สมาชิก Premium ดาวน์โหลดได้ที่ http://fastcoding.phpcodemania.com/index.php/downloads PHP  CI  MANIA   - PHP Code Generator  โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม" ราคาสุดคุ้ม    http://fastcoding.phpcodemania.com

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงอะไรบ้าง

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงความเปลี่ยนแปลงของเทคโนโลยีและแนวโน้มการใช้งานของผู้ใช้ใหม่ๆ ดังนั้น นี่คือเทคนิคที่สามารถช่วยให้การสร้างเว็บไซต์ในปี 2023 เป็นไปได้อย่างรวดเร็วและเป็นประสิทธิภาพ: 1. ใช้ Responsive Design: การออกแบบเว็บไซต์ให้สามารถปรับขนาดได้ตามขนาดของหน้าจอของอุปกรณ์ต่างๆ เช่น โทรศัพท์มือถือ แท็บเล็ต และคอมพิวเตอร์ เพื่อให้ผู้ใช้สามารถเข้าถึงและใช้งานได้ง่ายและสะดวก 2. ใช้โครงสร้างของ HTML5: การใช้โครงสร้าง HTML5 จะช่วยให้เว็บไซต์ของคุณมีประสิทธิภาพและปรับปรุงในเรื่องของการเข้าถึงข้อมูล การใช้งานและความปลอดภัย 3. ใช้ CSS Grids หรือ Flexbox: การใช้ CSS Grids หรือ Flexbox จะช่วยให้ง่ายต่อการจัดหน้าเว็บไซต์ และสามารถปรับแต่งรูปแบบของเว็บไซต์ได้ง่ายขึ้น 4. ใช้ JavaScript Frameworks: การใช้ JavaScript Frameworks เช่น React, Angular, หรือ Vue.js จะช่วยให้สามารถสร้างเว็บไซต์ที่เป็น interactive และมีประสิทธิภาพได้อย่างรวดเร็ว 5. ใช้ Content Management Systems (CMS): การใช้ CMS เช่น WordPress, Joomla, หรือ Drupal จะช่วยให้สามารถสร้างเว็บไซต์ได้อย่างร PHP  CI  M

แจกโค้ด PHP : รวมลิงค์ แจกฟรี!! ตัวอย่างโปรเจ็กต์ ที่พัฒนาด้วย PHP

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ  และด้านล่างนี้ก็เป็น Source Code PHP ระบบต่างๆ ที่มีเหล่าผู้ใจดีแจกฟรี!! ให้นำไปลองใช้ลองศึกษากันครับ แจกฟรี  !! ตัวอย่างการ  PHP  Booking # จองห้องประชุม  ผ่านเว็บครับ http://www.thaicreate.com/php/forum/090558.html ระบบแบบสอบถาม https://www.thaicreate.com/php/forum/099342.html แจก code!! การทำประเมินออนไลน์มี ไว้สำหรับพัฒนาต่อยอด https://www.thaicreate.com/php/forum/102203.html แจกฟรี PHP CodeIgniter CMS ให้ทุกท่านได้ลอง (รองรับ Responsive) http://www.thaicreate.com/php/forum/122929.html โดย : https://www.cszcms.com/ แจก PHP : ระบบยืม-คืนเอกสาร (จากตัวอย่าง เอกสารข้อมูลวัตถุดิบสินค้า) http://www.thaicreate.com/php/forum/103428.html แจกระบบ PHP Shopping Cart ระบบตะกร้าสินค้า ระบบสั่งซื้อ มีระบบตัดสต๊อก, สั่งซื้อวัตถุดิบคงเหลือ http://www.thaicreate.com/community/php-shooping-ca

PHP การแสดงสถานะการจอง ด้วยเก้าอี้ สีเขียว สีแดง

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

MySQL คำสั่ง SQL จัดเรียงคำตามตัวอักษร ภาษาไทย ในฟิลด์ที่กำหนด Collation เป็น utf-8

การจัดเรียงข้อมูลตามลำดับตัวอักษรไทย   CONVERT( name USING tis620 ) ASC การเรียงลำดับตัวอักษรแบบ tis-620 ในการเขียนโปรแกรม PHP เพื่อแสดงข้อมูลจากฐานข้อมูล MySQL การเขียนคำสั่ง SQL ให้จัดเรียงลำดับนั้น เราจะใช้ ORDER BY  และกำหนดฟิลด์ที่ต้องการจัดเรียงลำดับ เช่น ในตัวอย่างนี้จะเป็นการจัดเรียงตามลำดับตัวอักษรของชื่อเมนู นั่นก็คือฟิลด์ name นั่นเอง แต่ในขั้นตอนการสร้างฐานข้อมูลนั้น เราได้กำหนด Charset ของตารางและฟิลด์เป็นการจัดเรียง Collation แบบ utf-8 เอาไว้เพื่อให้รองรับภาษาแบบมาตรฐาน ดังนั้นเมื่อเขียนโปรแกรมสั่ง ORDER BY name ASC ก็จะมีการจัดเรียงที่จะให้คำที่มีสระนำหน้าอยู่หลัง ฮ. นกฮุก ไปเสียหมด จะเห็นว่าชื่อเมนูหรือสินค้าที่มี ข นำหน้าจะมาเป็นลำดับแรก ทั้งที่จริงๆแล้ว มีสินค้าที่เป็น ก อยู่หลายรายการ เพียงแต่ว่ามีสระนำหน้าอยู่เท่านั้นเอง จากรูปด้านบน จะมีรายการที่เป็น ก อยู่ 3 รายการ คือเมนู โกโก้ ต่างๆ แต่เพราะมีสระโอ นำหน้า จึงทำให้การจัดเรียงแบบ utf-8 ให้อยู่ในลำดับท้าย เพื่อแก้ไขปัญหานี้ การเขียนโปรแกรมเพื่อ ORDER BY จะต้องทำการเปลี่ยน

จัดระเบียบโค้ด ใน Notepad++ (Auto indentation plugin)

เวลาเขียนโค้ด แล้วไม่ได้จัดรูปแบบ หรือเอาโค้ดจาก Text Editor หนึ่งมาใช้ในอีกตัวหนึ่งก็มีโอกาสที่ Tab หรือ Space bar จะต่างกัน แล้วเราจะมานั่ง TAB เองก็คงไม่ไหว จึงจำเป็นต้องหา Plugin เข้ามาช่วย ลองค้นดูก็เจอกับกระทู้นี้ >> แม้หน้าตาจะไม่ตรงกันแต่หลักๆก็คือเพิ่ม Plugins เข้าไปชื่อ Indent By fold อ่านเต็มๆได้ที่นี่ https://softwarerecs.stackexchange.com/questions/1496/auto-indentation-plugin-for-notepad

PHP + Fullcalendar กับ MySQL

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode()

ว่าด้วยเรื่องของคำสั่ง goto ในภาษา PHP

PHP goto example <?php goto  a ; echo  'Foo' ;   a : echo  'Bar' ; ?> ผลลัพธ์ก็คือ จะแสดงข้อความว่า " Bar" ที่มา : http://php.net/manual/en/control-structures.goto.php ตัวผมเองก็เกิดคำถามว่าเอามาใช้ทำไร??? ก็นึกขึ้นได้ว่าสมัยก่อนตอนเรียนเคยเขียน Assembly แล้วจะมีคำสั่งเพื่อกระโดดไปทำงานส่วนต่างๆ ของโค้ดที่ยาวเป็นหน้ากระดาษ A4 แต่มีผลลัพธ์เพียงเพื่องานเล็กๆงานเดียว ก็เลยคิดว่า น่าจะใช้กับโค้ดที่ยาวเป็นร้อยๆบรรทัดและไม่มีฟังก์ชั่น หรือการเรียกคลาสใดๆได้ ก็เลยลองค้นหาดูว่าคนอื่นๆ เขาใช้คำสั่ง goto ใน PHP กันบ้างหรือเปล่านะ ก็ได้คำตอบเกี่ยวกับคำสั่ง goto ใน PHP มาดังภาพด้านบนนี้แหละครับ ^^; ก็แปลได้ประมาณว่า ถ้าไม่เหนือบ่ากว่าแรงอะไรก็คงไม่จำเป็นต้องใช้หรอกครับ เพราะใน PHP เราสามารถสร้างฟังก์ชั่นและเรียกใช้เมื่อไหร่ก็ได้ สามารถใช้ switch ....  case หรือ if .... else ยาวๆเพื่อตรวจสอบเงื่อนไขการทำงานได้สะดวกสบาย ก็เลยยังมองไม่ออกว่าจะนำมาใช้ตอนไหนอย่างไร แต่ถ้าใครอยากลองเอาไปใช้ก็ไม่เสียหายแต่อย่างใดครับ ^O^

กด Start ตรง mysql ใน XAMPP ไม่ได้ แก้ไขยังไงดี?

ข้อความ Error ที่ปรากฏดังนี้ 6:37:41  [mysql] This may be due to a blocked port, missing dependencies, 6:37:41  [mysql] improper privileges, a crash, or a shutdown by another method. 6:37:41  [mysql] Press the Logs button to view error logs and check 6:37:41  [mysql] the Windows Event Viewer for more clues 6:37:41  [mysql] If you need more help, copy and post this 6:37:41  [mysql] entire log window on the forums ต้องบอกก่อนว่าเคสนี้เกิดขึ้นเมื่อผมรัน XAMPP แบบ Portable แล้วดันไปขยับสาย USB การเชื่อมต่อก็เลยหลุดไป หลังจากถอดสาย USB แล้วเสียบใหม่ XAMP ก็รันได้แค่ Apache อย่างที่เห็นในภาพ หลังจากนั้นสิ่งที่ทำอย่างแรกก็คือ คัดลอก Error ไปค้นในเว็บแล้วลองทำไปเรื่อยๆ จนกว่าจะหาวิธีได้ xampp MySQL does not start https://stackoverflow.com/questions/18177148/xampp-mysql-does-not-start เว็บแรกทำให้รู้ว่าน่าจะเกี่ยวกับ Port ก็เลยลองเปลี่ยนเป็นพอร์ตอื่นก็ Start ได้ทันที You also need to change port 3306 to 3307 in xampp\php\php.ini แต่...นี่ยังไม่ใช่ที่ต้อ

ค้นหาบล็อกนี้