វិធីសាស្ត្ររក្សាអក្សរយូនីកូដខ្មែរក្នុង MySQL ជាមួយ PHP
ខ្ញុំអាចនិយាយបានថា អស់រយៈពេលជាយួរមកហើយដែលខ្ញុំមិនបានដឹងថា ត្រូវរក្សាអក្សរយូនីកូដខ្មែរយ៉ាងដូចម្ដេចនៅក្នុង Database របស់ MySQL។ Web Application ជាច្រើនដែលខ្ញុំបានធ្វើជាមួយយូនីកូដខ្មែរកន្លងមក ហើយត្រូវរក្សាទិន្នន័យទៅក្នុង MySQL Table ទិន្នន័យទាំងនោះបានបម្លែងទៅជាអក្សរផ្សេងដែលខ្ញុំមើលមិនដាច់(សូមមើលរូបខាងក្រោម) ប្រសិនបើមាននរណាជួបប្រទះដូចខ្ញុំ វិធីខាងក្រោមនឹងអាចជួបាន។ តែខ្ញុំបានឃើញ WordPress រក្សាយូនីកូដខ្មែរបានល្អណាស់ ហើយមិនមានការផ្លាស់ប្ដូរអីនោះទេ គឺចេញជាភាសខ្មែរយើងធម្មតា ដូចដែលយើងបានឃើញនៅលើ Browser អញ្ចឹង។ ទើបតែយប់មិញនេះគិតថានឹងរកវាអោយឃើញថាគេធ្វើវាយ៉ាងដូចម្ដេច ក៏បានដូចបំណងសូមមើលការនែនាំដូចខាងក្រោម
- មិនទាន់បន្ថែម mysql_query(“SET NAMES utf8”)
- ក្រោយពីបន្ថែម mysql_query(“SET NAMES utf8”)
Embed Khmer Unicode font for all browser!!!
ដោយភាសខ្មែរយើងមិនទាន់បានប្រើទួលំទួលាយក្នុងវិស័យព័ត៌មានវិទ្យា ពិសេសផ្នែកបង្កើតវេបសាយ គឺមានការពិបាកណាស់ប្រសិនបើចង់ធ្វើវេបសាយមួយអោយដើរជាមួយភាសាខ្មែរ។ ដោយសារតែគ្រប់ OS ទាំង Windows Linux និង Mac មិនទាន់បានដាក់ពុម្ភអក្សរខ្មែរយើងអោយបង្ហាញបានត្រឹមនោះទេ។
Simple JQuery Modal Window Tutorial
Simple Jquery Modal Windows ជា Jascript pop-up មើលទៅគួអោយទាក់ទាញអារម្មណ៏ខ្លាំងណាស់
អ្វីទៅជា Cheat Sheet ?
Cheat Sheet ជាដ្យាក្រាមបង្រូមមួយ ដែលបង្ហាញពីតូនាទី សកម្មភាព រចនាសម្ព័ន្ធ របស់កម្មវិធីអ្វីមួយ។ សំរាប់ Programmer ឬ Developer ការប្រើ Cheat Sheet ពិតជាមានផលប្រយោជន៍ខ្លាំងណាស់ យើងមិនចាំបាច់ចំណាយពេលច្រើនក្នុងការស្វែងរកអ្វីមួយក្នុងកម្មវិធីនោះ តូយ៉ាងដូចជា HTML Cheat Sheet (រូបខាងលើ) វាបានបង្ហាញមកទាំងអស់ នូវ HTMl Tag ដែលយើងអាចស្វែងរកបានក្នុងរូបភាពខាងលើ ។
នៅក្នុង Cheat Sheet នេះបានបែងចែកទៅតាមប្រភេទរបស់វា ដួចជានៅក្នុង HTML យើងអាចសែ្វងរក Tab និមួយទៅតាមប្រភេទរបស់វាដូច Link, Table, Form, Object…
មិនថាតែកម្មវិធី ភាសា សូម្បីវត្ថុអីមួយដែលយើងបានបង្កើត យើងក៏អាចបង្កើត Cheat Sheet បានផងដែរ វាជាការបង្រូមពីការពន្យល់នៃការប្រើប្រាស់វត្ថុដែលយើងបានបង្កើតនោះ សំរាប់អ្នកប្រើទួទៅ។
សូមទាញយក Cheat Sheet បន្ថែមដូចខាងក្រោមនេះ
– PHP
– Cakephp
-Prototype
-Jquery
-Mootools
-SEO (Search Engine Optimization)
បង្កើត Pagination ជាមួយ PHP និង Mysql
វិធីបំបែកទំព័រចេញជាផ្នែកៗ ជាគំនិតមួយដែលកំពុងពេញនិយម សំរាប់អ្នកបង្កើត និង រចនា គេហទំព័រ។ វិធីនេះភាកច្រើន គេប្រើនៅពេលដែលទាញទិន្នន័យចេញពី Database ហើយទិន្នន័យនោះមានចំនួនច្រើន គេត្រូវបំបែកវាដាក់ជាច្រើនទំព័រ ដើម្បីងាយមើល និងធ្វើអោយគេហទំព័រដំណើរការលឿនទៀតផង។
ខាងក្រោមនេះជាការបង្ហាញពីការ បំបែកទំព័រជាផ្នែកៗ ជាមួយភាសា PHP និង Mysql ដែលខ្ញុំបានប្រើជាមួយ គំរោងរបស់ខ្ញុំកន្លងមក។
១.បង្កើត Database និង Table
ដំបូងយើងត្រូវមាន Database រូចហើយត្រូវបង្កើត Table ។ ខ្ញុំបង្កើតដាតាបេស មួយឈ្មោះ learnphp ហើយ table ឈ្មោះ product
CREATE TABLE `product` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(50) NOT NULL default ”,
`price` decimal(10,2) NOT NULL default ‘0.00’,
`on_promotion` tinyint(4) NOT NULL default ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=57 ;
រូចបញ្ចូលទិន្នន័យខាងក្រោមនេះ(សូមបញ្ជាក់លោកអ្នកអាចបញ្ចួលវាអោយច្រើនជានេះក៏បានដែរ)
INSERT INTO `product` (`id`, `name`, `price`, `on_promotion`) VALUES
(1, ‘Santa Costume’, ‘14.99’, 0),
(2, ‘Medieval Lady’, ‘49.99’, 1),
(3, ‘Caveman’, ‘12.99’, 0),
(4, ‘Costume Ghoul’, ‘18.99’, 0);
២. បង្កើត file ‘config.php’
file នេះបានកំនត់ Constant មួយចំនូនដែលចាំបាច់ភ្ជាប់ទៅកាន់ Database
<?php // defines database connection data define('DB_HOST', 'localhost');//host name define('DB_USER', 'root');// Database user define('DB_PASSWORD', '');//database password define('DB_DATABASE', 'learnphp'); //database name // defines the number of visible rows in grid define('ROWS_PER_VIEW', 10);//ចំនូនដែលត្រូវបង្ហាញក្នុង ទំព័រនីមួយៗ ?>
៣. បង្កើត Class ‘database.class.php’
class នេះមានទូនាទីទាញយក ទិន្នន័យពី database, កំនត់ចំនួន Product ដែលត្រូវបង្ហាញ និងចំនួនទំព័រដែលត្រូវបំបែកចេញ។
ប្រហែលប្លែកពីអ្នករាល់គ្នាធ្លាប់ប្រើហើយមើលទៅ ចំពោះការភ្ជាប់ កាន់ database ខ្ញុំបានប្រើ class Mysqli ដើម្បីភ្ជាប់ទៅកាន database។ ព្រោះ Mysqli
មានលក្ខណះជា OOP ហើយងាយស្រូលប្រើ វា support តែ PHP5 ឡើងទៅ។
<?php /** *Database class to connect to database *author: Prak Sophy *email:sophy.prak@gmail.com *phone:011735918 *date:28-01-2009 */ require_once('config.php'); class Database { /* * ចំនួនទំព័រសរុប */ public $totalPages; /* * ចំនួន product */ public $itemCount; /* * ទំព័រដែលត្រូវផ្តល់អោយ */ public $returnedPage; /* * database handler * to use Mysqli Class support php 5.x */ private $mMysqli; /* * Table name to use */ private $tableName; /* * Class Contructor */ function __construct($table) { // create the MySQL connection $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); $this->tableName = $table; // call countAllRecords to get the number of grid records $this->itemCount = $this->countAllRecords(); } // class destructor, closes database connection function __destruct() { $this->mMysqli->close(); } /* * count all products * @return number of product rows */ private function countAllRecords() { // Query select count product $query = "SELECT COUNT(*) FROM $this->tableName"; if ($result = $this->mMysqli->query($query)) { $row = $result->fetch_row(); $result->close(); } return $row[0]; } public function readPages($page) { // create the SQL query that returns a page of products $query = $this->createSubpageQuery("SELECT * FROM $this->tableName", $page); if ($result = $this->mMysqli->query($query)) { $i=0; while($rows = $result->fetch_assoc()) { $row[$i]['id'] = $rows['id']; $row[$i]['name'] = $rows['name']; $row[$i]['price'] = $rows['price']; $row[$i]['on_promotion'] = $rows['on_promotion']; $i++; } //return row of product return $row; $result->close(); } } private function createSubpageQuery($query,$pageNo) { // if we have few products then we don't implement pagination if ($this->itemCount <= ROWS_PER_VIEW) { $pageNo = 1; $this->totalPages = 1; } // else we calculate number of pages and build new SELECT query else { $this->totalPages= ceil($this->itemCount / ROWS_PER_VIEW); $start_page = ($pageNo - 1) * ROWS_PER_VIEW; $query.= ' LIMIT ' . $start_page . ',' . ROWS_PER_VIEW; } // save the number of the returned page $this->returnedPage = $pageNo; // returns the new query string return $query; } } ?>
៤. បង្កើត file ‘product.php’ ដើម្បី test class ‘database.class.php’
<style type="text/css"> a span{ margin-left:2px; } </style> <?php require_once 'database.class.php'; //request page number $page = intval($_REQUEST['page']); //page number 0 or less than 0 if($page <= 0) $page =1; $products = new Database('product'); //read page and get products $rows = $products->readPages($page); //Write pagination echo 'Pages:'; for($i=1; $i <= $products->totalPages; $i++) { echo '<a href="products.php?page='.$i.'"><span>'.$i.'</span></a>'; } ?> <table border="1" cellspacing="0" width="400"> <thead> <th>Id</th> <th>Name</th> <th>Price</th> </thead> </tbody> <?php if(count($rows )>0) { foreach ($rows as $row ) { echo '<tr><td>'.$row['id'].'</td>'; echo '<td>'.$row['name'].'</td>'; echo '<td>'.$row['price'].'</td></tr>'; } } ?> </tbody> </table>
9 comments