บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ PHP

วิธีแก้ปัญหา phpmyadmin เจอ error 404 not found

 ปรกติหลัง ถ้าเราใช้ apache + php ใน แบบใช้ default host เลยนะไม่ได้ config virtual host เราก็มักจะวาง web app เราไว้ที่ /var/www/html  ประมาณนี้ วันนี้เรา install phpmyadmin บน ubuntu 20.04 ด้วยคำสั่ง sudo apt install phpmyadmin  เมื่อลงแล้วพบว่าไม่มี folder phpmyadmin ใน default web root แฮะ  แล้วพอเข้าด้วย localhost/phpmyadmin  ก็เจอ error 404 ซะด้วยสิ  แนวทางแก้ให้ทำตามขั้นตอนนี้ครับ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf sudo a2enconf phpmyadmin.conf systemctl reload apache2 เพียงเท่านี้ก็เรียบร้อยครับ เป็นการเพิ่ม config phpmyadmin ใน default apache นั่นเอง

PHP Connect MySQL ไม่ได้ เจอ error mysqli missing

 วันนี้ลอง Install phpmyadmin บน ubuntu 20.04 ด้วยคำสั่ง   sudo apt install phpmyadmin แล้วะจอว่าจะลง version ใหม่กิ๊กๆ มาเลยแล้ว ไม่สามารถ run บน PHP Version ต่ำกว่า 8.0 ได้เลย  ปัญหาคือ Web app ของเราจำเป็นต้อง run บน PHP Version ต่ำกว่านั้น แถวๆ 5.6 - 7.4  ประมาณนั้น วิธีแก้คือ ไป download phpmyadmin version ที่ support มา วางไว้ใต้ web root เอง ส่วนตัวเราใช้ Version 4.9.11     วิธีการก็ไม่ยาก แค่เรา unzip ออกแล้วก็ rename folder ซะหน่อย แต่ตอนที่เราลงครั้งแรกเจอปัญหาว่า connect mysql ไม่ได้ เจอ error ว่า mysqli missing  วิธีแก้ต่อจากนี้คือให้ run คำสั่ง  sudo apt install php5.6-mysqli  sudo apt install php7.4-mysqli  sudo apt install php8.0-mysqli แล้วแต่ว่าเราใช้ PHP Version ใหนอ่ะนะ

วิธีแก้ PHP ส่ง parameter แบบ Get แล้ว ภาษาไทยเพี้ยน

หากว่าเพื่อนๆ ส่ง Parameter แบบ Get หรือ แปะผ่าน URL ไปนั้นถ้าหากส่งเป็น ภาษาไทย จะทำให้เกิดปัญหาเรื่อง URL Encode ยกตัวอย่างเช่น เราส่งคำว่า ทดสอบ พอมาถึง Backend จะถูกแปลงเป็น %E0%B8%97%E0%B8%94%E0%B8%AA%E0%B8%AD%E0%B8%9A วิธีแปลงกลับเพื่อนำมาใช้งานนั้น  สามารถทำได้ด้วยการใช้ function urldecode ยกตัวอย่างเช่น เราส่ง parameter ชื่อว่า test_param ด้วย value คือ  ทดสอบ เราสามารถแปลงด้วยคำสั่งนี้ได้เลยครับ $decode_value = urldecode($test_param) เพียงเท่านี้เราก็สามารถทำตัวแปร $decode_value ไปใช้งานต่อได้เลยครับ

วิธีทำ Docker Compose LAMP Stack Linux Apache MySQL PHP

 ก่อนที่จะทำขั้นตอนนี้ ให้ทำการติดตั้ง Docker , Docker Compose ให้เรียบร้อยก่อนนะครับ   Docker Compose LAMP Stack Step 1    เตรียมโครงสร้าง Directory ไว้ตามรูปนี้ครับ   docker-web    www          - index.php    - docker-compose.yml    - Dockerfile    สร้าง folder docker-web ที่ข้างในประกอบด้วย 1. folder www   เอาไว้เก็บ file web app ของเราครับตรงนี้จะ map path เข้ากับ /var/www/html/ ของ apache ครับ 2. file docker-compose.yml ตรงนี้คือหัวใจในการ config Docker compose เรานั่นเอง 3. Dockerfile เอาไว้กำหนด docker images ที่เราต้องการใช้ครับ   Docker Compose LAMP Stack Step 2 ใส่ content ใน file Dockerfile ตามด้านล่างนี้เลย FROM php:7.1.2-apache RUN docker-php-ext-install mysqli   Docker Compose LAMP Stack Step 3 ใส่ content ใน file docker-compose.yml ตามด้านล่างนี้เลย version: "3.3" services:     www:         build: ...

วิธีแก้ปัญหา PHP substr utf8

เคยเจอปัญหาเมื่อใช้คำสั่ง PHP substr กัย text ที่เป็น utf8 พบว่านับตำแหน่งผิดตามตัวอย่างเช่น $new_str=substr($new_str,0,50); พบปัญหาว่าไม่สามารถตัดได้ที่ตำแหน่ง 0 ถึง 50 จริง แถมด้านหลังบางทีจะกลายเป็นต่างดาวอ่านไม่ออก แนวทางแก้คือเปลี่ยนมาใช้คำสั่ง mb_substr แล้วกำหนด encode utf8 เข้าไป ตามตัวอย่างด้านล่างครับ $new_str=mb_substr($new_str,0,50,"utf8");  ลองแล้วสามารถ substr ได้ตรงและผลออกมาได้ถูกต้อง

PHP format date จาก ปีเดือนวัน เป็น วันเดือนปี yyyy-mm-dd เป็น dd-mm-yyyy

บ่อยครั้งที่เรา query ข้อมูลจาก Source ต่างๆ เช่น PHP Query Database MySQL จะได้ value ของ field ที่เป็น Date ออกมาเป็น yyyy-mm-dd ทำให้เราต้องมาทำการเปลี่ยน format ให้เป็นที่คุ้นเคยคือ dd-mm-yyyy หรือ dd/mm/yyyy วิธีการทำตามตัวอย่างนี้เลย ตัวอย่าง value ตั้งต้นมาแบบนี้ $original_date = "2019-03-31"; ให้นำมาสร้างตัวแปร date ตามนี้ $timestamp = strtotime($original_date); แล้วค่อยนำมา จัด format ตามที่เราต้องการ $new_date = date("d-m-Y", $timestamp); สิ่งที่ได้จากตัวแปรใหม่ก็จะ เป็นตาม format ที่เราระบุไปนั่นเอง  

PHP Print ค่าทศนิยมตามตำแหน่งจริงโดยไม่ต้องกำหนดค่า

วันนี้เจอปัญหาเรื่อง floating point ของ PHP เข้าไป คือผมมีโจทย์ว่า ต้องการแสดงค่า float ที่มีทศนิยมได้หลากหลายตำแหน่ง เช่น 0.01   0.001 0.0001 0.00001 0.000001 0.0000001 คือตำแหน่งของทศนิยมมันจะหลากหลายมาก ตอนนี้ลองใช้คำสั่งปรกติได้ผลว่า <?=myFloat?> คำสั่งแสดงผลง่ายๆ แบบนี้อ่ะนะ จะมีปัญหาว่าถ้าทศนิยมตั้งแต่ 5 ตำแหน่งเป็นต้นไป เช่น 0.00001 จะแสดงผลเป็น 1.0E-5  ผมเลยลองเอา number_format มาครอบดู <?= number_format( myFloat)?> ผลที่ได้จะกลายเป็น 0  ยกเว้นเราจะกำหนดตำแหน่งทศนิยมลงไปแบบนี้ <?= number_format( myFloat,5)?> ผลที่ได้จะกลายเป็น ผลที่ได้จึงจะเป็น  0.00001 ดูแล้วก็เหมือนจะได้ Solution แล้วอ่ะนะ แต่ .... ปัญหามันคือ ถ้าทศนิยมมันไม่ใช่ 5 ตำแหน่งเสมอไปล่ะ มันอาจเป็น 4 ก็ได้ หรือ 6 ก็ได้ ด้วยคำสั่งเดียวกัน ถ้า Value มันเป็น  0.000001  ผลที่ได้จะเป็น 0.00000 ทันที ในทางกลับกัน ถ้า Value มันเป็น 0.0001 ผลที่ได้ก็จะกลายเป็น 0.00010 เช่นกัน ซึ่งมันก้ไม่ได้ตรงกับที่เราต้องการเลย ชิมิ วันนี้มีวิธีแก้มาให้ตามนี้เลยครั...

แก้ปัญหา ภาษาไทย PHP กับ MySQL ด้วย tis-620

รูปภาพ
บ่อยครั้งที่มักเจอปัญหาเวลาใช้ PHP Query ข้อมูลภาษาไทยจาก MySQL แล้วกลายเป็น ???? วิธีแก้ไขคือให้ทำการ Set ค่า Collation ให้เป็น tis620_thai_ci หรือจะเลือก Default ไว้ตั้งแต่ตอน create database เลยก็ได้เช่นกัน เสร็จแล้วตอนที่ PHP connect  MySQL Database ให้ทำการกำหนด Collation name ด้วยคำสั่งนี้ mysql_query("SET NAMES TIS620"); ตัวอย่างเช่น <? $username="test"; $password="test"; $database="test"; mysql_connect("localhost",$username,$password); @mysql_select_db($database) or die( "Unable to select database"); mysql_query("SET NAMES TIS620"); ?>  กรณีนี้เราสามารถใช้  UTF8 แทน TIS620 ได้ด้วยวิธีเดียวกันครับ ซึ่งหลังๆ ผมแนะนำให้เป็น UTF8 จะดีกว่านะ

วิธีป้องกัน SQL injection PHP กับ codeigniter

บ่อยครั้งคที่เราเขียนโปรแกรมโดยที่ไม่คำนึงถึงความปลอดภัย เปิดช่องโหว่ให้ผู้ไม่หวังดีสามารถใส่ SQL Injection เข้ามาได้ ยกตัวอย่างเช่น หน้าจอ login ถ้าเรา รับ parameter เป็น username กับ password แล้วนำไปใช้ใน SQL Query แบบง่ายๆ เช่น select * from muser where username='$user_name' and password='$passwrod' ดูแล้วก็ไม่น่าจะมีอะไรแต่ลองนึกภาพดูนะ ยกตัวอย่างจาก statement ข้างต้น สิ่งที่ได้คือคำสั่งนี้ select * from muser where username='admin' and password='admin1234' ถ้าหากผู้ไม่หวังดีส่งค่าของ $password เข้ามาแบบนี้ล่ะ    test' or '1'='1  ลองแทนค่าดูก็จะได้แบบนี้ select * from muser where username='admin' and password='test' or '1'='1' คำสั่ง or 1=1 เป็นจริงเสมอรับรองได้เลยว่าไม่ว่าจะใส่ username , password มั่วๆ เข้ามา ก็สามารถทะลุหน้าจอ login เราเข้าไปได้แน่นอน แบบนี้แหละเขาเรียกว่าปัญหา  SQL injection   แนวทางแก้แบบง่ายๆ เลยนะให้เปลี่ยนไปใช้คำสั่งนี้ครับ $dbResult = $this->db-...

PHP Object การเรียกใช้ตัวแปรแบบ Dynamic คล้าย eval ใน javascript

บทความเกี่ยวกับ : PHP Object การเรียกใช้ตัวแปรแบบ Dynamic PHP Object การเรียกใช้ตัวแปรแบบ Dynamic ในบางงานที่จำเป็นต้องใช้การเข้าถึงตัวแปร  แบบที่ไม่ได้ระบุชื่อตัวแปรชัดเจน  ตัวอย่างเช่น  ใน code เรามีตัวแปรอยู่ ประมาณนี้ $data1; $data2 ตอนเราเรียกใช้ ถ้าเรารับชื่อตัวแปรมาเป็น parameter เช่น $val="data1"; หากเราต้องการเข้าถึงตัวแปร "data1" สามารถทำได้ง่ายๆแบบนี้ $$val;  ตามนี้จะเป็นการใช้งาน ตัวแปรของ value ของ $val อีกที ฟังแล้วเริ่มงง  มันก็คล้ายๆ กับ eval ใน java script แหละครับ ทีนี้เข้าเรื่อง แล้วถ้าเกิดว่ามันเป็น Object ล่ะจะทำไง เช่น $obj->data1; $obj->data2; เราจะเข้าถึงแบบ dynamic ได้ยังไง คำตอบคือง่ายๆ แบบนี้เลยครับ $obj->$val; ตามนั้น

ต้วอย่างการใช้ PHP เพื่อ Remove HTML tag

บทความเกี่ยวกับ : ต้วอย่างการใช้ PHP เพื่อ Remove HTML tag ผมเคยเจอปัญหาเรื่องการเอา content ที่มีการแทรก tag HTML บนๆ อยู่กับข้อความมาใช้แล้วต้องการ remove ออก เช่นพวก tag <b>  หรือ style sheet ต่างๆ แรกๆ ก็เขียน code  replace เองพอเอาอยู่ แต่พอเจอหน้าที่เยอะๆ และมี tag ที่ซับซ้อนมี ขยะ ปนเพียบผลที่ได้คือ replace กันหงิก T_T วันนี้ไปเจอ วิธีการดีๆ มา เลยเอามาฝาก ตาม Link ข้างล่างครับ   ตัวอย่าง PHP Remove HTML Tag