รวม Snippets
แนวทางการใช้งานค่า shared preference ในแอป เมื่อเริ่มต้น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import 'package:flutter/material.dart' ; import 'package:shared_preferences/shared_preferences.dart' ; class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { late String _myValue; @override void initState() { super .initState(); _loadValueFromSharedPreferences(); } // Method to load value from SharedPreferences Future<void> _loadValueFromSharedPreferences() async { final prefs = await SharedPreferences.getInstance(); setState(() { _myValue = prefs.getString( 'my_key' ) ?? 'default_value' ; // Set default value if key does not exist }); } // Method to save value to SharedPreferences Future<void> _saveValueToSharedPreferences(String value) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString( 'my_key' , value); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( 'SharedPreferences Example' ), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Value from SharedPreferences: $_myValue' ), ElevatedButton( onPressed: () { _saveValueToSharedPreferences( 'new_value' ); }, child: Text( 'Save New Value' ), ), ], ), ), ); } } |
เกี่ยวกับการใช้ composer ตรวจสอบเวอร์ชั่น package ที่ถูกติดตั้ง
- กรณีเราต้องการติดตั้ง package ที่เคยใช้งานในโปรเจ็คใหม่ แต่จำไม่ได้ว่า ติดตั้งอะไรไปบ้าง
สามารถดูข้อมูลได้ที่ไฟล์ composer.json
- ถ้าไม่พบไฟล์ composer.json แต่ยังมีไฟล์ composer.lock เราสามารถเรียกใช้คำสั่ง
composer install
เพื่อติดตั้ง package ทั้งหมดในไฟล์นั้นอีกครั้งได้
- กรณีที่ไม่มีทั้งไฟล์ composer.json และไฟล์ composer.lock แต่เรายังมีโฟลเดอร์ vendor
ที่เคยใช้งานอยู่ เราสามารถดูข้อมูล package และเวอร์ชั่นที่เคยติดตั้งได้ที่ ไฟล์ installed.json
vendor/composer/installed.json
ซึ่งจะเป็นข้อมูล package ในเวอร์ชั่น ที่ถูกติดตั้งในครั้งแรกเท่านั้น ดังนั้น หากมีการใช้งานคำสั่ง
composer update
ก็จะไม่มีผลกับข้อมูลเวอร์ชั่นที่ติดตั้ง ในไฟล์ installed.json ก็จะยังไม่ใช่เวอร์ชั่นล่าสุดนั่นเอง
การใช้ container ใน docker เพื่อพัฒนา php web application
สมมติเราพัฒนาใน windows โครงสร้างประมาณนี้
C:\docker\server // จัดการ container C:\docker\mysql_data // กับข้อมูลของฐานข้อมูล mysql C:\docker\server\www // สำหรับเก็บไฟล์ php
1. สร้างไฟล์ docker-compose.yml ใน
version: '3.7' services: mysql: # image: mysql:latest image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: examplepassword MYSQL_DATABASE: mydb MYSQL_USER: myuser MYSQL_PASSWORD: mypassword MYSQL_CHARSET: utf8mb4 MYSQL_COLLATION: utf8mb4_unicode_ci ports: - "3306:3306" volumes: - ../mysql_data:/var/lib/mysql php_apache: image: php:8.1-apache # image: php restart: always ports: - "8080:80" volumes: - ./www:/var/www/html depends_on: - mysql phpmyadmin: # image: phpmyadmin/phpmyadmin image: phpmyadmin restart: always ports: - "8081:80" environment: PMA_HOST: mysql MYSQL_ROOT_PASSWORD: examplepassword depends_on: - mysql
2. รันคำสั่ง ผ่าน command ใน path ส่วนจัดการ container
docker-compose up -d
3. ไฟล์ index.php สำหรับทดสอบ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php // สังเกตว่าตรง localhost เราจะต้องเปลี่ยนเป็นชื่อ container ฐานข้อมูล // เนื่องจากในที่นี่กำหนดเป็นชื่อ mysql ในไฟล์ docker-compose.yml $mysqli = new mysqli( "mysql" , "root" , "examplepassword" , "mydb" ); if ( $mysqli ->connect_errno) { printf( "Connect failed: %s\n" , $mysqli ->connect_error); exit (); } if (! $mysqli ->set_charset( "utf8" )) { printf( "Error loading character set utf8: %s\n" , $mysqli ->error); exit (); } phpinfo(); |
3. ถ้า mysqli ไม่ทำงานหรือ ᩴextension ของ php ตัวใดไม่ทำงาน ให้ไปที่ส่วนของ container ที่เป็น php apache ที่เราใช้งาน
จากนั้นเรียกใช้คำสั่ง 2 คำสั่งนี้ในส่วนของ command ดังตัวอย่างด้านล่าง
docker-php-ext-install mysqli apachectl restart
รันคำสั่งพร้อมกัน ก็จะสามารถใช้งาน การเชื่อมต่อกับฐานข้อมูล
ใช้ htaccess กำหนดให้ลิ้งค์ไปยังหน้า maintenance
กรณีที่เรามีการปรับปรุงหรือเพิ่มประสิทธิภาพเว็บไซต์ และต้องไม่การให้
ผู้ใช้งานเข้าใช้งานได้ในช่วงระยะเวลาหนึ่ง เพื่อจะได้ทำการปรับปรุงเว็บไซต์
เราสามารถสร้างหน้าแจ้งการปรับปรุงเว็บไซต์ หรือที่เรียกว่า maintenance
page ขึ้นมา จากนั้นใช้กำหนดใน ทุกๆ การเรียกใช้งานจะถึงลิ้งค์มายังแจ้ง
รายละเอียด การปรับปรุงเว็บไซต์ ซึ่งอาจจะแจ้งข้อมูลสำหรับติดต่อ กรณีมีความ
จำเป็นด่วนไว้ด้วยก็ได้ แนวทาง คือสร้างไฟล์เพจ หน้าแจ้งการปรับปรุงเว็บไซต์ จาก
นั้นใช้ htaccess กำหนดการลิ้งค์มาด้วยคำสั่งดังนี้
# MAINTENANCE-PAGE REDIRECT <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance.html [R=302,L] </IfModule>
กรณีที่เราต้องการยกเว้น หรือให้เฉพาะบางโฟลเดอร์สามารถยังใช้งานได้ ก็กำหนดส่วน
ที่ต้องการยกเว้นเข้าไป สมมติเช่น เรายังให้สามารถเข้าใช้งานหน้า /dashboard ได้
ก็จะเพิ่มเข้าไปเป็นดังนี้
# MAINTENANCE-PAGE REDIRECT <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REQUEST_URI} !^/dashboard [NC] RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance.html [R=302,L] </IfModule>
php ฟังก์ชั่น ตรวจสอบว่ามี url ในข้อความหรือไม่
ใช้สำหรับตรวจสอบว่าข้อความนั้นๆ มีลิ้งค์ url ทั้งที่แบบมี http https และรูปแบบอื่นๆ ในลักษณะการอ้างอิงถึงลิ้งค์ของเว็บไซต์ต่างๆ อยู่ในข้อความนั้นๆ หรือไม่ ถ้าคืนค่าเป็น 1 พรือ true แสดงว่ามี สามารถนำไปประยุกต์ในการสร้างเงื่อนไขการทำงานได้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php function urldetect( $str ){ $regex = "((https?|ftp)://)?" ; // SCHEME $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(:[a-z0-9+!*(),;?&=\$_.-]+)?@)?" ; // User and Pass $regex .= "([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))" ; // Host or IP address $regex .= "(:[0-9]{2,5})?" ; // Port $regex .= "(/([a-z0-9+\$_%-]\.?)+)*/?" ; // Path $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+/\$_.-]*)?" ; // GET Query $regex .= "(#[a-z_.-][a-z0-9+$%_.-]*)?" ; // Anchor return preg_match( "~^$regex$~i" , $str , $m ); } // สมมติมีการส่งค่ามาผ่าน url มาแล้วเราต้องการตรวจสอบว่ามีลิ้งค์ หรือ url หรือไม่ if (urldetect( $_GET [ 'keyword' ])){ header( "Location:notfound.html" ); exit ; } ?> |
คำสั่ง JavaScript ดึงรูปจาก Facebook Album
แนวทางการใช้งาน จะใช้ผ่าน console ของ dev tool
โดยเปิดไปหน้ารูปรวมของ album ที่ต้องการ จากนั้น เลื่อน scrollbar เพื่อแสดง
รายการรูปทั้งหมด
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | var urlStr = "" ; // ตัวแปรเก็บ url รายการลิ้งค์ของรูป var n_i = document.querySelectorAll( "a[href*='photo.php']" ).length; // จำนวนรูปจากการนับ var n_i = 5; // จำนวนรูปจากการกำหนด var n_v = 0; // ตำแหน่งเริ่มของรูป function getImg(n_v){ if (n_v<n_i){ document.querySelectorAll( "a[href*='photo.php']" )[n_v].click(); setTimeout( function (){ if (document.querySelectorAll( "img[data-visualcompletion='media-vc-image']" ).length>0){ urlStr += '<img src="' ; urlStr += document.querySelectorAll("img[data-visualcompletion= 'media-vc-image' ] ")[0].src; urlStr += '" >'; urlStr += '\r\n' ; document.querySelectorAll( "div[aria-label='Close']" )[0].click(); } n_v++; setTimeout( function (){ getImg(n_v); },500); },1000); } else { console.log(urlStr); } } getImg(n_v); |
หลังจากได้รายการรูป นำไปสร้าง HTML แท็ก image จากนั้นใช้โปรแกรมโหลดจาก url รูป
เข้ารหัส HTML สำหรับส่งค่าใน URL ด้วย PHP และ JavaScript
แนวทางทั้งสอง ใช้สำหรับเข้ารหัสหรือจัดรูปแบบของ HTML ให้สามารถ
ส่งค่าผ่าน url ไปใช้งานได้
PHP
1 | urlencode(htmlentities( "<strong>Title</strong>etc etc" )); |
JavaScript
1 2 3 4 5 6 | function htmlentity(rawStr){ return encodeURIComponent(rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function (i) { return '&#' +i.charCodeAt(0)+ ';' ; })); } htmlentity( "<strong>Title</strong>etc etc" ); |
แนวทาง คำสั่ง SQL เรียงข้อมูลภาษาไทย และภาษาอังกฤษในฟิลด์เดียวกัน
ตารางข้อมูลตัวอย่าง
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE TABLE tbl (`id` int , `data` varchar (9)) ; INSERT INTO tbl (`id`, `data`) VALUES (1, 'ภาษาไทย' ), (2, 'English' ), (3, 'การศึกษา' ), (4, 'Education' ) ; |
คำสั่ง SQL
1 2 3 4 5 6 7 8 9 10 11 12 | ( SELECT a.data, 'th' lang FROM tbl a WHERE NOT a.data REGEXP '[A-Za-z0-9]' ) UNION ALL ( SELECT b.data, 'en' lang FROM tbl b WHERE b.data REGEXP '[A-Za-z0-9]' ) ORDER BY lang DESC , CONVERT (data using tis620) ASC |
ผลลัพธ์
ใช้ htaccess แทนไฟล์รูปภาพที่ไม่พบ หรือไม่มี ด้วยภาพอื่น
วิธีนี้ใช้สำหรับกรณีเราไม่ต้องการเขียนโค้ด หากไม่พบไฟล์รูปที่จะแสดง ให้เอารูปอื่นมาแสดงแทน
ให้เราสร้างรูปสำหรับไว้แทนที่ไว้ที่ path ใดสักที่สมมติเช่นเป็น images และรูปที่เราเก็บอยู่ในโฟลเดอร์
uploads ให้เราสร้างไฟล์ .htaccess แล้วอัพไปไว้ที่โฟลเดอร์รูปหลัก ในที่นี้คือ uploads
แล้วกำหนดไฟล์ ดังนี้
ไฟล์ .htaccess
RewriteEngine on RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f RewriteRule \.(gif|jpe?g|png|bmp) /images/photoreplace.jpg [NC,L]
สมมติถ้าเรียกไปที่ไฟล์รูปที่ไม่มี เช่น https://www.example.com/uploads/notpic.jpg
รูปจะไปดึงจากไฟล์ https://www.example.com/images/photoreplace.jpg มาแสดงแทน
-
หมวดบทความทั้งหมด 34 AJAX Learning 25 Android Learning 46 Angular 16 AngularJs 21 Bootstrap 40 CodeIgniter 27 CodeIgniter 4 48 CSS Learning 16 Dart 8 Dev Tools 19 Expressjs 4 Firebase 75 Flutter 20 HTML5 10 Ionic Native 42 Ionicframework 80 Javascript Learning 231 jQuery Learning 10 jQuery Mobile 18 Line Dev 34 MySQL Learning 3 NodeJs 14 OpenCart 4 OpenCart 3 19 Phonegap 177 PHP Learning 8 Slim 22 VueJS 1 Web Service 5 อื่นๆ
- ถามปัญหาการเขียนโปรแกรม
- กดปุ่ม Refrsh Access Token ของ LINE แล้ว Error ตอบ 1 อ่าน 314
- จากบทความ: การสร้างปุ่มยืนยันให้กับ ลิ้งค์ ด้วย function return confirm() ตอบ 2 อ่าน 2450
- textbox array 2 ตัว มาลบกัน แล้วให้แสดงค่าใน textbox array ผลลัพธ์ เพื่อเอาไปบันทึกข้อมูล ตอบ 1 อ่าน 3021
- fullcalendar 3.6.2 วันที่กิจกรรมไม่ครบตามจำนวนในฐานข้อมูล ตอบ 2 อ่าน 4326
- ช่วยหน่อยครับ ผมอยากทราบวิธีการเช็คไฟล์วีดีโอหน่อยครับ ตอบ 1 อ่าน 4752
- jquery นับจำนวนเลือก radio array อย่างน้อย 1 ตัว แต่ไม่เกิน 3 ตอบ 10 อ่าน 4650
- จำนวนสัปดาห์ของแต่ละเดือนไม่ตรงจำนวนสัปดาห์ทั้งปี ตอบ 1 อ่าน 3981
- ออกรายงานสรุปด้วยกราฟครับ ขอคำแนะนำ แนวทางด้วยครับ ตอบ 2 อ่าน 2736
- ส่งค่าที่เป็นเท้กบ๊อกอาเรย์จากการเลือก ไปไม่ได้ครับ ตอบ 3 อ่าน 2534
- ขอวิธีการดึงข่าว RSS Feed ด้วย PHP จากเว็บไซต์อื่นมาแสดง โดยที่เปิดลิงก์เป็น URL เว็บไซต์ของเรา ตอบ 1 อ่าน 1662
- ตอบคำถามกลับล่าสุด
- เล่น audio เมื่อ play เสร็จแล้วหรือเล่นไปได้สัก 5 นาที จะขึ้นลิงค์ให้กดไปหน้าอื่น ตอบ 8 อ่าน 2999
- ส่งค่าตัวแปรอีกตัวนึง ในฟังก์ชั่น ajax ตอบ 3 อ่าน 1844
- ช่วยหน่อยครับ ติดปัญหาเกี่ยวกับการเปิด pdf บน server จริงครับ (HTTP error 500) ตอบ 3 อ่าน 2974
- สอบถามเกี่ยวกับวิธีเขียน upload file ไปยัง domain อื่นหน่อยครับ ตอบ 1 อ่าน 1640
- วิธีการส่งค่าวันที่ โดยการคลิ๊กเลือกวันที่นั้นๆ จากปฏิทิน fullcalendar ตอบ 1 อ่าน 1833
- ขอตัวอย่าง Flutter insert to mysql ตอบ 1 อ่าน 1614
- ช่วยหน่อยครับติดปัญหาเกี่ยวกับการเขียน array หลายชั่นครับ ตอบ 1 อ่าน 1635
ขอบคุณทุกการสนับสนุน
![]()